LXCコンテナを使用しています。私のコンテナのそれぞれは、10.0.3.0/24にIPアドレスを持っています。特定のポートでホストに着信するパケットをコンテナにリダイレクトしたいので、次のルールを使用します。
iptables -t nat -A PREROUTING -p tcp --dport 3000 -j DNAT --to-destination 10.0.3.4:3000
これにより、(パケット外で)実行できます#->ホスト:3000->コンテナ:3000
それは素晴らしい働きをします。ただし、コンテナ(この前のルールで使用されているものではない)内にいて、ポート3000で別のホスト(たとえばHost2)にアクセスしたい場合、パケットはコンテナにリダイレクトされます。します:
(コンテナパケット内)#-> Host2:3000-> Host:3000-> CONTAINER:3000
(コンテナパケット内)の代わりに#-> Host2:3000-> Host:3000-> Host2:3000
上記のルールをに変更しようとしました
iptables -t nat -A PREROUTING -s 10.0.3.0/24 -p tcp --dport 3000 -j DNAT --to-destination 10.0.3.4:3000
つまり、パケットがコンテナからのものである場合は、ルールを適用しないでください。ただし、これは機能しません。よろしく、どんな助けも素晴らしいでしょう
これが私のiptablesルールです:
Chain PREROUTING (policy ACCEPT 154 packets, 29925 bytes)
pkts bytes target prot opt in out source destination
4 240 DNAT tcp -- * * 10.0.3.0/24 0.0.0.0/0 tcp dpt:3000 to:10.0.3.5:3000
3 180 DNAT tcp -- * * 10.0.3.0/24 0.0.0.0/0 tcp dpt:3001 to:10.0.3.6:3001
Chain INPUT (policy ACCEPT 126 packets, 28400 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 25 packets, 1900 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 29 packets, 2140 bytes)
pkts bytes target prot opt in out source destination
28 1525 MASQUERADE all -- * * 10.0.3.0/24 !10.0.3.0/24
動作しないということは、コンテナ内からホストを3000カールすると、コンテナにリダイレクトされることを意味します:3000
-s
flagsは、指定されたホストまたはネットワークに一致するトラフィックのみを選択します。すべてのトラフィックを一致させたい場合除くそれを使用する
! -s 10.0.3.0/24
そしてそれを逃れることを忘れないでください!
引用符または円記号を使用してシェルから。