Para que veth funcione, un extremo del túnel debe ser puenteado con otra interfaz. Como desea mantener todo esto virtual, puede conectar el extremo vm1 del túnel (vm2 es el otro extremo del túnel) con una interfaz virtual de tipo tap, en un puente llamado brm. Ahora le da direcciones IP a brm y vm2 (10.0.0.1 y 10.0.0.2, respectivamente), habilite el reenvío de IPv4 mediante
echo 1 > /proc/sys/net/ipv4/ip_forward
active todas las interfaces y agregue una ruta que indique al núcleo cómo llegar a las direcciones IP 10.0.0.0/24. Eso es todo.
Si desea crear más pares, repita los pasos a continuación con diferentes subredes, por ejemplo, 10.0.1.0/24, 10.0.2.0/24, etc. Dado que habilitó el reenvío de IPv4 y agregó las rutas apropiadas a la tabla de enrutamiento del núcleo, podrán comunicarse entre sí de inmediato.
Además, recuerde que la mayoría de los comandos que está utilizando (brctl, ifconfig, ...) son obsoletos: la suite iproute2 tiene comandos para hacer todo esto, vea a continuación mi uso del comando ip .
Esta es una secuencia correcta de comandos para el uso de interfaces de tipo veth :
primero cree todas las interfaces requeridas,
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
Tenga en cuenta que no mencionamos brm y vm2 porque tenemos que asignarles direcciones IP, pero mencionamos tapm y vm1, lo cual es necesario para incluirlos en el puente brm. Ahora esclavice las interfaces tapm y vm1 al bridge brm,
ip link set tapm master brm
ip link set vm1 master brm
ahora dé direcciones al puente y a la interfaz veth restante vm2,
ip addr add 10.0.0.1/24 dev brm
ip addr add 10.0.0.2/24 dev vm2
ahora trae vm2 y brm up,
ip link set brm up
ip link set vm2 up
No es necesario agregar la ruta a la subred 10.0.0.0/24 explícitamente, se genera automáticamente, puede verificar con ip route show . Esto resulta en
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
También puede hacerlo al revés, es decir , desde vm2 de regreso a 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
La aplicación más útil de las NIC del tipo veth es un espacio de nombres de red , que es lo que se usa en los contenedores de Linux (LXC). Empiezas uno llamado nnsm de la siguiente manera
ip netns add nnsm
luego le transferimos vm2,
ip link set vm2 netns nnsm
Dotamos el nuevo espacio de nombres de red con una interfaz lo (absolutamente necesaria),
ip netns exec nnsm ip link set dev lo up
permitimos NATting en la máquina principal,
iptables -t nat -A POSTROUTING -o brm -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
(si está conectado a Internet a través de eth0 , de lo contrario cambie en consecuencia), inicie un shell en el nuevo espacio de nombres de red,
ip netns exec nnsm xterm &
y ahora, si comienza a escribir en el nuevo xterm, encontrará que está en una máquina virtual separada con la dirección IP 10.0.0.2, pero puede acceder a Internet. La ventaja de esto es que el nuevo espacio de nombres de red tiene su propia pila, lo que significa que, por ejemplo, puede iniciar una VPN mientras el resto de su PC no está en la VPN. Este es el artilugio en el que se basan los LXC.
EDITAR:
Cometí un error, trayendo la interfaz vm2 lo baja y borra su dirección. Por lo tanto, debe agregar estos comandos, desde dentro de xterm:
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
y ahora puedes navegar desde xterm.
Los ip
comandos también se pueden hacer antes de xterm con
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
br0
sí?