問題の紹介
私のネットワーク トポロジは、次の図のようになっています。すべてのホストは異なる Linux ディストリビューションを実行しており、すべての構成は (うまくいけば) RHEL7 であるホスト A で実行されるはずです。
このルーティングテーブルでは:
Destination Gateway Genmask Flags Metric Ref Use
Iface
default fw.gatename. 0.0.0.0 UG 100 0 0 enp34s0
10.0.1.0 0.0.0.0 255.255.255.0 U 0 0 0 enp9s0
10.0.1.2 0.0.0.0 255.255.255.255 UH 0 0 0 bridge1
10.12.0.0 0.0.0.0 255.255.255.0 U 100 0 0 enp2s0f1
10.14.0.0 0.0.0.0 255.255.255.0 U 100 0 0 enp2s0f0
10.17.0.0 0.0.0.0 255.255.255.0 U 100 0 0 enp7s0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
172.18.0.2 0.0.0.0 255.255.255.255 UH 0 0 0 bridge2
172.18.0.3 0.0.0.0 255.255.255.255 UH 0 0 0 bridge0
172.18.0.4 0.0.0.0 255.255.255.255 UH 0 0 0 bridge1
192.168.3.0 0.0.0.0 255.255.255.0 U 100 0 0 enp34s0
192.168.30.0 0.0.0.0 255.255.255.0 U 0 0 0 enp35s0
192.168.30.91 0.0.0.0 255.255.255.255 UH 0 0 0 bridge2
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
私の主な目標は、ホストAの各物理インターフェースをDockerコンテナにマップして、トラフィックが自由に流れるようにすることです。のみこのマッピングの両端の間(このマッピング外のインターフェースとの間のトラフィックはありません)。
たとえば、Container1 は (図の赤いリンクに沿って) ホスト B とのみ通信でき、Container2 は (図の緑のリンクに沿って) ホスト C とのみ通信できる必要があります。
最初の試み
デフォルトでは、docker はブリッジbr-97707d67f97c
(例) を作成しますが、これは削除しました (すべてのコンテナーを相互に接続するため)。ブリッジを「プライベート」にする方法があるかもしれないと考えたため、3 つのブリッジ ( 、、bridge0
)を作成しました。bridge1
bridge2
現状では、どのコンテナからでもホスト A、B、C のどのインターフェースにも ping できますが、あるコンテナから別のコンテナに ping することはできません。これは、同じサブネット上にあってブリッジが混乱しているためだと考えられます。
質問
ホスト上のインターフェースを論理的に分離して、必要なインターフェースとのみ対話できるようにするにはどうすればよいでしょうか?
答え1
最初からやり直し、インターフェイスをサブネットごとに分離することで、このエラーを解決できました。
質問の図を例にすると、Container2 の IP アドレスを 10.0.0.0/24 サブネット内、つまり 10.0.1.100 に変更しました。Container1 のアドレスを 192.168.30/24 サブネットに変更しました。
また、私の例のブリッジは OSI レイヤー 2 でのみ動作する必要があるため、 と から IP アドレスは不要であると判断してenp35s0
削除しました。enp9s0