
No puedo hacer ping al espacio de nombres de red predeterminado desde una máquina virtual KVM QEMU que se ejecuta en un espacio de nombres de red separado.
He aquí mi arreglo:
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
Y estos son los resultados:
# 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
Entonces la VM puede hacer ping al desarrolladorsi-en-nsy desarrolladorsi-en-nspuede hacer ping a su parsi-no-ns. Pensé que esto significa que la VM debería poder hacer ping al desarrollador.si-no-nstambién, pero no puede. ¿Qué estoy entendiendo mal?
Editar: comentario a la respuesta de Salim Aljayousi:
El espacio de nombres test-ns ya tiene una ruta para llegar al espacio de nombres predeterminado a través del desarrolladorsi-en-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
Si elimino ese y agrego el que sugieres:
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
Luego dentro de la VM obtengo:
ping 10.21.0.10
From 10.0.2.2 icmp_seq=1 Redirect Host(New nexthop: 10.21.0.10) ```
Respuesta1
puede agregar una ruta en el espacio de nombres test-ns para llegar al espacio de nombres predeterminado a través de la interfaz táctil
ip netns exec test-ns ip route add 10.21.0.0/24 dev tap0
Esto debería permitir que la VM haga ping a los dispositivos en el espacio de nombres predeterminado.
Tenga en cuenta que es posible que también necesite habilitar el reenvío de IP en el sistema host para permitir que los paquetes se reenvíen entre espacios de nombres.
sysctl -w net.ipv4.ip_forward=1