web-dev-qa-db-ja.com

特定の範囲のIPに対してのみiptablesポート転送

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

3
rmonjo

-s flagsは、指定されたホストまたはネットワークに一致するトラフィックのみを選択します。すべてのトラフィックを一致させたい場合除くそれを使用する

! -s 10.0.3.0/24

そしてそれを逃れることを忘れないでください!引用符または円記号を使用してシェルから。

8
MadHatter