Dockerコンテナのデフォルトインターフェイスの変更

Dockerコンテナのデフォルトインターフェイスの変更

私はこの問題で2日間苦労しました。

仮定:

  • Dockerネットワーク(およびインタフェース)の命名端末ネットワークタイプサブネット172.18.0.0/16
  • 2つのインターフェースイーサネット0(192.168.1.1)及びイーサネット1(192.168.2.1)
  • デフォルトパスは次を通過します。イーサネット0

私が望むもの:

  • リンクされたコンテナからのトラフィック端末ネットワーク行かなければならないイーサネット1

私が試したこと:

  • dockerによって生成されたデフォルトのiptableルールは変更されません。

-A POSTROUTING -s 172.18.0.0/16 ! -o docknet -j MASQUERADE

  • 私のルール:

iptables -t mangle -I PREROUTING -s 172.18.0.0/16 -j MARK --set-mark 1

ip rule add from all fwmark 1 table 2

表2は以下の通りである。

default via 192.168.2.1 dev eth1 proto static

この設定を使用してDockernetに接続されているコンテナ(172.18.0.2)で8.8.8.8をpingしようとすると、次のことが発生します。

  • 172.18.0.2は192.168.2.1に変換されます。
  • パケットはeth1を通過します。
  • パケットは送信元アドレス 8.8.8.8 および宛先アドレス 192.168.2.1 を使用して eth1 に返されます。

ここでは、192.168.2.1から172.168.0.2への逆方向の移行が発生する必要がありますが、実行時にこのtcpdump -i any host 8.8.8.8移行を追跡することはできません。

conntrack -Lも確認しましたが、結果は次のとおりです。

icmp 1 29 src=172.18.0.2 dst=8.8.8.8 タイプ=8 コード=0 id=9 src=8.8.8.8 dst=192.168.2.1 タイプ=0 コード=0 id=9 タグ=0 使用=1

有用な情報:

  • eth1は実際に4G USBアダプタです。
  • IP転送が有効になっています。
  • curl --interface eth1 ipinfo.io期待どおりに動作

ベストアンサー1

おすすめ記事