Wie kann ich Schnittstellen auf einem Host logisch trennen?

Wie kann ich Schnittstellen auf einem Host logisch trennen?

Problemeinführung

Ich habe eine Netzwerktopologie, die wie im folgenden Diagramm aussieht. Auf allen Hosts laufen unterschiedliche Linux-Distributionen, und meine gesamte Konfiguration sollte (hoffentlich) auf Host A erfolgen, also RHEL7.

Netzwerktopologiediagramm

mit dieser Routingtabelle:

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

Mein Hauptziel ist es, jede physische Schnittstelle von Host A einem Docker-Container zuzuordnen, damit der Datenverkehr frei fließen kann.nurzwischen beiden Enden dieser Zuordnung (und kein Datenverkehr zu oder von Schnittstellen außerhalb dieser Zuordnung).

Beispielsweise sollte Container1 (nur) mit Host B (entlang der roten Links im Diagramm) kommunizieren können, und Container2 sollte (nur) mit Host C (entlang der grünen Links im Diagramm) kommunizieren können.

Ein erster Versuch

Standardmäßig erstellt Docker br-97707d67f97cbeispielsweise eine Brücke, die ich entfernt habe (weil sie alle Container miteinander verbindet). Ich habe die drei Brücken ( bridge0,,, ) erstellt, weil ich dachte bridge1, bridge2es gäbe vielleicht Hoffnung, die Brücke irgendwie „privat“ zu machen.

So wie es jetzt ist, kann ich von jedem Container aus einen Ping zu jeder Schnittstelle auf Host A, B oder C senden. Von einem Container zum anderen kann ich jedoch keinen Ping senden. Ich nehme an, dass dies daran liegt, dass sie sich im selben Subnetz befinden und die Brücke verwirren.

Frage

Wie kann ich Schnittstellen auf einem Host logisch trennen, sodass sie nur mit den von mir gewünschten Schnittstellen interagieren können?

Antwort1

Ich konnte diesen Fehler beheben, indem ich von vorne begann und dann meine Schnittstellen nach Subnetz trennte.

Um das Diagramm in meiner Frage als Beispiel zu verwenden, habe ich die IP-Adresse für Container2 so geändert, dass sie im Subnetz 10.0.0.0/24 liegt, also beispielsweise 10.0.1.100. Ich habe die Adresse für Container1 so geändert, dass sie im Subnetz 192.168.30/24 liegt.

Außerdem habe ich die IP-Adressen aus enp35s0und entfernt enp9s0, da ich diese für unnötig hielt, da die Bridges in meinem Beispiel nur auf OSI-Layer 2 operieren sollen.

verwandte Informationen