Ich möchte drei virtuelle Netzwerkschnittstellen ( veth
) einrichten, die miteinander kommunizieren können. Zur Simulation eines Clusters mit drei Knoten wird jedes Programm an eine veth
Schnittstelle gebunden. Ich würde es gerne ohne LXC machen, wenn möglich.
Ich habe versucht mit:
- Erstellt drei
veth
Paare:sudo ip link add type veth
- Erstellt eine Brücke
sudo brctl addbr br0
- Einer von jedem Paar zur Brücke hinzugefügt:
sudo brctl addif br0 veth1
sudo brctl addif br0 veth3
sudo brctl addif br0 veth5
- Konfiguriert die Schnittstellen:
sudo ifconfig veth0 10.0.0.201 netmask 255.255.255.0 up
sudo ifconfig veth2 10.0.0.202 netmask 255.255.255.0 up
sudo ifconfig veth4 10.0.0.203 netmask 255.255.255.0 up
Dann habe ich überprüft, ob funktioniert mit: ping -I veth0 10.0.0.202
aber es funktioniert nicht :(
Die I hinzugefügt IP - Adressen an die veth1
, veth3
, veth5
undbr0
Schnittstellen im 10.0.1.x / 24 - Bereich. Aber das hilft nicht.
Irgendwelche Ideen? oder eine Anleitung, alles, was ich in der Verwendung mit LXC finde. Oder versuche ich etwas, was nicht möglich ist?
linux
networking
Reinder
quelle
quelle
br0
selbst auf?Antworten:
Damit veth funktioniert, muss ein Ende des Tunnels mit einer anderen Schnittstelle überbrückt werden. Da Sie dies alles virtuell halten möchten, können Sie das vm1-Ende des Tunnels (vm2 ist das andere Ende des Tunnels) mit einer virtuellen Schnittstelle vom Typ tap in einer Brücke mit dem Namen brm überbrücken. Geben Sie nun IP-Adressen an brm und an vm2 (10.0.0.1 bzw. 10.0.0.2) und aktivieren Sie die IPv4-Weiterleitung mit
Rufen Sie alle Schnittstellen auf und fügen Sie eine Route hinzu, die den Kernel anweist, wie IP-Adressen 10.0.0.0/24 erreicht werden sollen. Das ist alles.
Wenn Sie weitere Paare erstellen möchten, wiederholen Sie die folgenden Schritte mit verschiedenen Subnetzen, z. B. 10.0.1.0/24, 10.0.2.0/24 usw. Da Sie die IPv4-Weiterleitung aktiviert und der Kernel-Routing-Tabelle entsprechende Routen hinzugefügt haben, können sie sofort miteinander kommunizieren.
Denken Sie auch daran, dass die meisten der von Ihnen verwendeten Befehle (brctl, ifconfig, ...) veraltet sind: Die iproute2- Suite verfügt über Befehle, um all dies zu tun, siehe unten meine Verwendung des Befehls ip .
Dies ist eine korrekte Befehlsfolge für die Verwendung von Schnittstellen vom Typ veth :
erst alle benötigten Schnittstellen anlegen,
Beachten Sie, dass wir brm und vm2 nicht aufgerufen haben, weil wir ihnen IP-Adressen zuweisen müssen, aber tapm und vm1, die erforderlich sind, um sie in die bridge brm aufzunehmen. Versklaven Sie nun die Schnittstellen tapm und vm1 mit der Bridge brm,
Geben Sie nun der Bridge und der verbleibenden veth-Schnittstelle vm2 Adressen.
Bringen Sie jetzt vm2 und brm auf,
Es ist nicht erforderlich, die Route explizit zum Subnetz 10.0.0.0/24 hinzuzufügen. Sie wird automatisch generiert. Sie können dies mit ip route show überprüfen . Das führt zu
Sie können es auch rückwärts machen, dh von vm2 zurück zu brm:
Die nützlichste Anwendung von NICs der veth- Art ist ein Netzwerk-Namespace , der in Linux-Containern (LXC) verwendet wird. Sie starten eine mit dem Namen nnsm wie folgt
dann übertragen wir vm2 darauf,
wir statten den neuen Netzwerknamensraum mit einer lo-Schnittstelle aus (unbedingt notwendig),
Wir erlauben NATting in der Hauptmaschine,
(Wenn Sie über eth0 mit dem Internet verbunden sind , ändern Sie dies ansonsten entsprechend), starten Sie eine Shell im neuen Netzwerk-Namespace.
Wenn Sie jetzt mit der Eingabe des neuen xterm beginnen, werden Sie feststellen, dass Sie sich in einer separaten virtuellen Maschine mit der IP-Adresse 10.0.0.2 befinden, aber Sie können auf das Internet zugreifen. Dies hat den Vorteil, dass der neue Netzwerk-Namespace über einen eigenen Stack verfügt. Dies bedeutet, dass Sie beispielsweise ein VPN darin starten können, während sich der Rest Ihres PCs nicht im VPN befindet. Dies ist die Erfindung, auf der LXCs basieren.
BEARBEITEN:
Ich habe einen Fehler gemacht, indem ich die vm2-Schnittstelle heruntergefahren und ihre Adresse gelöscht habe. Daher müssen Sie diese Befehle aus dem xterm heraus hinzufügen:
und jetzt können Sie innerhalb von xterm navigieren.
Die
ip
Befehle können auch vor dem xterm mit ausgeführt werdenquelle
Hier ist ein 5-Node-Bridge-Setup, das funktioniert. Sie sollten ifconfig verwenden können, um den NodeX-Schnittstellen Adressen zuzuweisen
und aufzuräumen
quelle