IPTables-別のIPとポートへのポート(内部から)


10

現在、ポート80でNASボックスを実行しています。外部からNASにアクセスするには、次のようにポート8080をNASのポート80にマッピングします。

iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 10.32.25.2:80

これは魅力のように機能しています。ただし、これが機能するのは、ネットワークの外部(職場、別の家など)からWebサイトにアクセスしている場合のみです。したがって、「」と入力するとmywebsite.com:8080、IPTablesが正しく機能し、すべてが正常に機能しています。

さて、私が抱えている問題は、ネットワークの内部からこのポートをリダイレクトする方法を教えてください。ドメイン名mywebsite.comは内部(10.32.25.1)からルーター(私のLinuxサーバー)を指していますが、内部から10.32.25.2のポート8080にポート8080をリダイレクトします。

どんな手掛かり?

#1を編集

この質問を容易にするために、私はこの図をまとめました。お探しの情報が間違っていたり、誤って表示されている場合は、遠慮なく更新してください。

                                 iptables
                                     |                   .---------------.
    .-,(  ),-.                       v               port 80             |
 .-(          )-.        port 8080________               |               |
(    internet    )------------>[_...__...°]------------->|      NAS      |
 '-(          ).-'     10.32.25.2    ^   10.32.25.1      |               |
     '-.( ).-'                       |                   |               |
                                     |                   '---------------'
                                     |
                                     |
                                   __  _ 
                                  [__]|=|
                                  /::/|_|

@slmその通りです。10.32.25.2:8080ではサーバーがポート80にあるため、何も起こりません。外部から、NATは指定されたIP(10.32.25.2)のポート8080からポート80にリダイレクトします。NET-> NAT:8080-> 10.32.25.2:80。内側からルールが必要なのですが、そこに何を置くかわかりません。
DavidBélanger2013年

@slmはい。どうすればそのようなことを達成できるのかわかりません。に10.32.25.1:8080リダイレクトしたいと思い10.32.25.2:80ます。上記の私のルールは外部から機能していますが、ネットワークの内部からは機能していません。そのため、オフィスにいる場合は、website.com: 8080 からNASにアクセスでき、完全に透過的です。私の家から、website.com:8080は10.32.25.1を指しています。ポート8080もNASにポート80でリダイレクトしますが、これも透過的な方法で行います。
DavidBélanger2013年

@slmはい、すべてが正常に機能しています。内部ネットワークからポート10.32.25.1:8080を10.32.25.2:80にリダイレクトするだけです。
DavidBélanger2013年

のようなインターフェイスについても言及しeth0 10.32.25.2、インバウンドインターフェイスに基づいてiptablesの使用を記述できるようにします
Rahul Patil

申し訳ありませんOPPS、私だけのこぎり..あなたはすでに問題解決...
ラーフルパティル

回答:


13

ようやくハウツーを見つけました。まず、-i eth1「外部」ルールに追加する必要がありました(eth1は私のWAN接続です)。また、他に2つのルールを追加する必要がありました。ここで私が最後に来たもの:

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 8080 -j DNAT --to 10.32.25.2:80
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to 10.32.25.2:80
iptables -t nat -A POSTROUTING -p tcp -d 10.32.25.2 --dport 80 -j MASQUERADE

2
最初のルールには既にそれが含まれているため、2番目のルールは必要ありません...
machineaddict '28

1
最初のルールは、インターフェースeth1に到着した場合にのみ、プリルートを制限します。2番目のルールは、すべてのインターフェースに適用されるため、より一般的です。ループに注意してください!
tu-Reinstate Monica-dor duh 2015年

4

また、宛先NATを実行するには、パッケージ転送を有効にする必要があることを忘れていました。デフォルトでは、通常はオフになっているため、iptablesルールは機能しません。次のコマンドを発行して有効にできます。

echo 1 > /proc/sys/net/ipv4/ip_forward

本当にありがとうございました、私は何時間も私の髪を抜いていたでしょう!
ColinM 2015年

3

最初に次との転送を許可

echo 1 > /proc/sys/net/ipv4/ip_forward

次にiptableルールを設定します

IF=eth1
PORT_FROM=8080
PORT_TO=80
DEST=10.32.25.2
iptables -t nat -A PREROUTING -i $IF -p tcp --dport $PORT_FROM -j DNAT --to $DEST:$PORT_TO
iptables -t nat -A POSTROUTING -p tcp -d $DEST --dport $PORT_TO -j MASQUERADE

/etc/rc.localたとえば、これらの行を入れることができます。注:Debian jessieは実行可能にし、rc.localサービスを有効にしてから

systemctl enable rc-local.service

0

最初に、転送がアクティブになっていることを確認する必要があります。

cat /proc/sys/net/ipv4/ip_forward

そうでない場合は1、実行しecho 1 > /proc/sys/net/ipv4/ip_forwardます。

ポート80および443で10.32.25.1にヒットするトラフィックを10.32.25.2の80ポートに転送する場合は、以下のルールを使用する必要があります。

iptables -t nat -A PREROUTING -d 10.32.25.1 -p tcp -m multiport --dports 80,443 -j DNAT --to-destination 10.32.25.2:80
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.