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 Tap-Typ überbrücken, in einer Brücke namens brm. Jetzt geben Sie brm und vm2 IP-Adressen (10.0.0.1 bzw. 10.0.0.2) und aktivieren die IPv4-Weiterleitung mit
echo 1 > /proc/sys/net/ipv4/ip_forward
Bringen Sie alle Schnittstellen hoch und fügen Sie eine Route hinzu, die den Kernel anweist, wie er die IP-Adressen 10.0.0.0/24 erreicht. 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 sprechen.
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 der ip Befehl.
Dies ist eine korrekte Befehlsfolge für die Verwendung von Schnittstellen vom Typ veth :
Erstellen Sie zuerst alle erforderlichen Schnittstellen,
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 wir haben tapm und vm1 aufgerufen, was notwendig ist, um sie in die Bridge brm aufzunehmen. Versklaven Sie nun die Schnittstellen tapm und vm1 an die Bridge brm,
ip link set tapm master brm
ip link set vm1 master brm
Geben Sie nun Adressen an die Brücke und an die verbleibende Veth-Schnittstelle vm2,
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 hoch,
ip link set brm up
ip link set vm2 up
Es ist nicht notwendig, die Route explizit dem Subnetz 10.0.0.0/24 hinzuzufügen, sie wird automatisch generiert, Sie können dies mit ip route show überprüfen . Dies 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, d.h. 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 kind ist ein Netzwerk-Namespace , was in Linux-Containern (LXC) verwendet wird. Eine namens nnsm starten Sie wie folgt
ip netns add nnsm
dann übertragen wir vm2 darauf,
ip link set vm2 netns nnsm
Wir statten den neuen Netzwerk-Namensraum mit einem lo-Interface aus (absolut 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 , andernfalls entsprechend ändern), starten Sie eine Shell im neuen Netzwerk-Namensraum,
ip netns exec nnsm xterm &
und wenn Sie jetzt beginnen, das neue xterm einzugeben, werden Sie feststellen, dass Sie sich in einer separaten virtuellen Maschine mit der IP-Adresse 10.0.0.2 befinden, aber Sie können das Internet erreichen. Dies hat den Vorteil, dass der neue Netzwerk-Namespace einen eigenen Stack hat, was bedeutet, dass Sie darin beispielsweise ein VPN starten können, während der Rest Ihres PCs nicht ist auf dem VPN. Dies ist die Vorrichtung, auf der LXCs basieren.
BEARBEITEN:
Ich habe einen Fehler gemacht, indem ich die vm2-Schnittstelle heruntergefahren habe und ihre Adresse gelöscht habe. Daher müssen Sie diese Befehle innerhalb von xterm 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.
Der ip
Befehle können auch vor dem xterm mit
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