Ping zu/von KVM QEMU VM, die in einem anderen Netzwerk-Namespace ausgeführt wird

Ping zu/von KVM QEMU VM, die in einem anderen Netzwerk-Namespace ausgeführt wird

Ich kann von einer KVM QEMU-VM, die in einem separaten Netzwerk-Namespace ausgeführt wird, keinen Ping zum Standard-Netzwerk-Namespace senden.

Hier ist mein Setup:

ip netns add test-ns

# Creating veth
ip link add if-in-ns type veth peer name if-notin-ns
# Default namespace
ip link addr add 10.21.0.10/24 dev if-notin-ns
ip link set dev if-notin-ns up
# Test-ns namespace
ip link set dev if-in-ns netns test-ns
ip netns exec test-ns ip addr add 10.21.0.20/24 dev if-in-ns
ip netns exec test-ns ip link set dev if-in-ns up

# Creating a tap device in the namespace
ip netns exec test-ns ip tuntap add tap0 mode tap
ip netns exec test-ns ip addr add 10.0.2.2/24 dev tap0
ip netns exec test-ns ip link set dev tap0 up

# Create route to 10.0.2.0/24 if default namespace:
ip route add 10.0.2.0/24 dev if-notin-ns

# Run VM
ip netns exec test-ns qemu-system-x86_64 -drive file=img.qcow2,format=qcow2,media=disk -accel kvm -cpu host -m 2G -netdev tap,id=vm0,ifname=tap0,script=no,downscript=no -device virtio-net-pci,netdev=vm0,mac=52:54:77:6a:cc:02

Und das sind die Ergebnisse:

# In default namespace:
ping 10.21.0.20 # Works
ping 10.0.2.2 # Works
ping 10.0.2.3 # Doesn't work

# In test-ns namespace:
ping 10.21.0.10 # Works
ping 10.0.2.3 # Works

# Inside the image:
ping 10.0.2.2 # Works
ping 10.21.0.20 # Works
ping 10.21.0.10 # Doesn't work

So kann die VM dev anpingenwenn-in-nsund Entwicklerwenn-in-nskann seinen Peer anpingenwenn-nicht-in-ns. Ich dachte, das bedeutet, dass die VM in der Lage sein sollte, den Entwickler anzupingenwenn-nicht-in-nsauch, aber es geht nicht. Was verstehe ich falsch?

Bearbeiten: Kommentar zur Antwort von Salim Aljayousi:

Der Namespace test-ns verfügt bereits über eine Route, um den Standard-Namespace über den dev zu erreichen.wenn-in-ns:

ip netns exec test-ns ip route
10.0.2.0/24 dev tap0 proto kernel scope link src 10.0.2.2 
10.21.0.0/24 dev if-in-ns proto kernel scope link src 10.21.0.20

Wenn ich dieses entferne und das von Ihnen vorgeschlagene hinzufüge:

ip netns exec ns ip route del 10.21.0.0/24 dev if-in-ns
ip netns exec ns ip route add 10.21.0.0/24 dev tap0

Dann erhalte ich innerhalb der VM:

ping 10.21.0.10
From 10.0.2.2 icmp_seq=1 Redirect Host(New nexthop: 10.21.0.10) ```

Antwort1

Sie können eine Route im Test-NS-Namespace hinzufügen, um den Standard-Namespace über die Tap-Schnittstelle zu erreichen

ip netns exec test-ns ip route add 10.21.0.0/24 dev tap0

Dies sollte es der VM ermöglichen, Geräte im Standard-Namespace anzupingen.

Beachten Sie, dass Sie möglicherweise auch die IP-Weiterleitung auf dem Hostsystem aktivieren müssen, um die Weiterleitung von Paketen zwischen Namespaces zu ermöglichen.

sysctl -w net.ipv4.ip_forward=1

verwandte Informationen