iptablesを使用してアウトバウンドトラフィックを別のIPにリダイレクトする方法

iptablesを使用してアウトバウンドトラフィックを別のIPにリダイレクトする方法

サーバー 1 (192.168.0.1:8080) とサーバー 2 (192.168.0.2:8765) があります。 iptablesを使用して、アウトバウンドトラフィックをserver1ポート8080からserver2にリダイレクトする必要があります。

server1で以下を設定しました。

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A OUTPUT -p tcp --sport 8080 -m owner --uid-owner nobody -j ACCEPT
iptables -t nat -A OUTPUT -p tcp --sport 8080 -m owner --uid-owner tomcat7 -j DNAT --to-destination 192.168.0.2:8765

しかし、これはうまくいきません。また-m、パラメータなしでは機能しません-uid-owner

答え1

私は与えられたホスト:ポートへの発信トラフィックを別のホスト:ポートにリダイレクトするために次の規則を使います。 (仮想マシンクラスタで組み込みシステム(固定アドレスを含む)をシミュレートするためのものです。)

iptables -t nat -A OUTPUT -p tcp -d 192.168.1.101 --dport 1234 -j DNAT --to-destination 192.168.1.102:4321

上記のルールをインストールした後、次のような場合:

root@archive:~# telnet 192.168.1.101 8888

指定されたアドレスに移動するトラフィックが表示されます。

root@archive:~# tcpdump -i eth2 host 192.168.1.102 or host 192.168.1.101
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth2, link-type EN10MB (Ethernet), capture size 262144 bytes
21:04:27.953124 IP archive.34496 > 192.168.1.101.8888: Flags [S], seq 2498286032, win 29200, options [mss 1460,sackOK,TS val 961612280 ecr 0,nop,wscale 7], length 0
21:04:28.949044 IP archive.34496 > 192.168.1.101.8888: Flags [S], seq 2498286032, win 29200, options [mss 1460,sackOK,TS val 961612530 ecr 0,nop,wscale 7], length 0

もしあなたなら:

root@archive:~# telnet 192.168.1.101 1234

変換されたアドレスに移動するトラフィックを表示する必要があります。

21:04:50.321139 IP archive.53164 > 192.168.1.102.4321: Flags [S], seq 2332928074, win 29200, options [mss 1460,sackOK,TS val 961617873 ecr 0,nop,wscale 7], length 0
21:04:52.325090 IP archive.53164 > 192.168.1.102.4321: Flags [S], seq 2332928074, win 29200, options [mss 1460,sackOK,TS val 961618374 ecr 0,nop,wscale 7], length 0

あなたの質問のルールはソースポート(--sport)を指定します。アウトバウンドトラフィックの場合、通常は送信元ポートがわかりません。通常、ソケットのバインド/接続時に動的に割り当てられます。たとえば、上記のダンプでは34496と53164です。

関連情報