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
echo 1 > /proc/sys/net/ipv4/ip_forward
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,
ip link add dev vm1 type veth peer name vm2
ip link set dev vm1 up
ip tuntap add tapm mode tap
ip link set dev tapm up
ip link add brm type bridge
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,
ip link set tapm master brm
ip link set vm1 master brm
Geben Sie nun der Bridge und der verbleibenden veth-Schnittstelle vm2 Adressen.
ip addr add 10.0.0.1/24 dev brm
ip addr add 10.0.0.2/24 dev vm2
Bringen Sie jetzt vm2 und brm auf,
ip link set brm up
ip link set vm2 up
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
ping -c1 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.035 m
--- 10.0.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.035/0.035/0.035/0.000 ms
Sie können es auch rückwärts machen, dh von vm2 zurück zu brm:
ping -I 10.0.0.2 -c1 10.0.0.1
PING 10.0.0.1 (10.0.0.1) from 10.0.0.2 : 56(84) bytes of data.
64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=0.045 ms
--- 10.0.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.045/0.045/0.045/0.000 ms
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
ip netns add nnsm
dann übertragen wir vm2 darauf,
ip link set vm2 netns nnsm
wir statten den neuen Netzwerknamensraum mit einer lo-Schnittstelle aus (unbedingt notwendig),
ip netns exec nnsm ip link set dev lo up
Wir erlauben NATting in der Hauptmaschine,
iptables -t nat -A POSTROUTING -o brm -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
(Wenn Sie über eth0 mit dem Internet verbunden sind , ändern Sie dies ansonsten entsprechend), starten Sie eine Shell im neuen Netzwerk-Namespace.
ip netns exec nnsm xterm &
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:
ip addr add 10.0.0.2/24 dev vm2
ip link set dev vm2 up
ip route add default via 10.0.0.1
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
echo "nameserver 8.8.4.4" >> /etc/resolv.conf
und jetzt können Sie innerhalb von xterm navigieren.
Die ipBefehle können auch vor dem xterm mit ausgeführt werden
ip -netns nnsm addr add 10.0.0.2/24 dev vm2
ip -netns nnsm link set dev vm2 up
ip -netns nnsm route add default via 10.0.0.1
br0selbst auf?