.png)
Ich versuche, virtuelle Schnittstellen (Typ MACVLAN) so zu erstellen, dass die gesamte Kommunikation zwischen den Schnittstellen vom Host aus an das ewige Standard-Gateway gesendet wird. Es gibt zahlreiche Beschreibungen des „privaten“ Modus, wie zum Beispiel:Hier
Privat: Filtern Sie alle eingehenden Pakete, sodass kein an eine Schnittstelle gebundenes MAC-VLAN miteinander kommunizieren kann (löschen Sie alle über die Schnittstelle eingehenden Pakete, deren Quell-MAC-Adresse mit einer der MAC-VLAN-Schnittstellen übereinstimmt).
Ich habe ein paar Schnittstellen konfiguriert und es sieht so aus, als ob der „private“ Modus nicht wie angekündigt funktioniert. Mache ich etwas falsch? Der Host ist Ubuntu 18.04 Bionic Release.
Die Pakete werden innerhalb des Hosts umgeschaltet und der Befehl „mode private“ wird ignoriert. Es ist einfach, dies mit nur 4 Befehlen zu reproduzieren. Für jede Hilfe wäre ich dankbar.
root@ubnt-bkp:/home/super# uname -a
Linux ubnt-bkp 4.15.0-96-generic #97-Ubuntu SMP Wed Apr 1 03:25:46 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
root@ubnt-bkp:/home/super# ip link add link ens160 address 38:94:ed:99:99:1A ens160.3 type macvlan mode private
root@ubnt-bkp:/home/super# ip link set ens160.3 up
root@ubnt-bkp:/home/super# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 08:4f:a9:99:99:02 brd ff:ff:ff:ff:ff:ff
...
...
18: ens160.3@ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP **mode** **DEFAULT** group default qlen 1000
link/ether 38:94:ed:99:99:1a brd ff:ff:ff:ff:ff:ff
Befehle zum Reproduzieren des Problems
root@ubnt-bkp:/home/super# ip link add link ens160 address 38:94:ed:99:99:1B ens160.5 type macvlan mode private
root@ubnt-bkp:/home/super# ip link set ens160.5 up
root@ubnt-bkp:/home/super# dhclient ens160.5
root@ubnt-bkp:/home/super# ip link add link ens160 address 38:94:ed:99:99:1C ens160.6 type macvlan mode private
root@ubnt-bkp:/home/super# ip link set ens160.6 up
root@ubnt-bkp:/home/super# dhclient ens160.6
ping
Verwenden Sie dann -I
die Option:
root@ubnt-bkp:/home/super#ping -I <IP address of ens160.5> <IP address of ens160.6>
(ersetzen Sie ens160
es bei einem Reproduktionsversuch durch den Namen Ihrer Ethernet-Schnittstelle, z. B. eth0)
Antwort1
Die Befehle, die Sie zum Erstellen der MACVLAN-Schnittstellen verwenden, sind korrekt.
Die Verwendung von hilft Ihnen jedoch ping -I
nicht dabei, dies zu überprüfen. Wenn sich Quell- und Zielschnittstellen auf demselben Host befinden (und im selben Namespace, wie in Ihrem Fall), ping
ist dies immer erfolgreich.
Wie testen Sie das dann? Indem Sie Ihre MACVLAN-Schnittstellen in verschiedene, nicht standardmäßige Namespaces platzieren. Führen Sie es dann ping
aus dem Namespace aus.
ens160
Nehmen wir an, dass Sie mit Ihrer physischen Schnittstelle ( ) mit der IP-Adresse beginnen 192.0.2.2/24
. Nehmen wir außerdem an, dass die Gateway-Adresse Ihres Routers lautet 192.0.2.1
.
Jetzt:
# Create namespace named "ns5"
ip netns add ns5
# Create the macvlan interface as usual
ip link add link ens160 address 38:94:ed:99:99:1B ens160.5 type macvlan mode private
# Move the just-created macvlan interface into the "ns5" namespace
ip link set ens160.5 netns ns5
# Set the link up. Observe the "ip netns exec ns5" prefix.
ip netns exec ns5 ip link set ens160.5 up
# Set the IP address for the macvaln interface. Observe the "ip netns exec ns5" prefix.
ip netns exec ns5 ip address add dev ens160.5 192.0.2.205/24
# Repeat above for another macvlan interface, this one in another namespace
# called "ns6"
ip netns add ns6
ip link add link ens160 address 38:94:ed:99:99:1C ens160.6 type macvlan mode private
ip link set ens160.6 netns ns6
ip netns exec ns6 ip link set ens160.6 up
ip netns exec ns6 ip address add dev ens160.6 192.0.2.206/24
Ab diesem Zeitpunkt können beide MacVTap-Schnittstellen das Gateway erfolgreich anpingen:
ip netns exec ns5 ping 192.0.2.1
ip netns exec ns6 ping 192.0.2.1
Wenn Sie Zugriff auf das Gateway-Gerät haben, sollten Sie bestätigen können, dass die ARP-Einträge für 192.0.2.205 und 192.0.2.6 die MAC-Adressen der Macvlan-Schnittstellen anzeigen.
Da sich die Macvlan-Schnittstellen jedoch im private
-Modus befinden, schlagen die folgenden Befehle beide fehl:
# Try to reach ens160.6 from ens160.5
ip netns exec ns5 ping 192.0.2.206
# Try to reach ens160.5 from ens160.6
ip netns exec ns6 ping 192.0.2.205
Wiederholen Sie das Experiment mit bridge
anstelle von private
. Sie werden feststellen, dass die letzten beiden Ping-Befehle erfolgreich sind.