Table of Contents
Práctica Simular una red completa con namespaces
Versión: V_26_11
En una sola máquina virtual se crearán dos hosts y un router Linux aislados. Se configurarán interfaces virtuales, dos redes IPv4, gateways, rutas y reenvío IPv4 hasta conseguir comunicación entre redes distintas.
Regla de trabajo: realiza esta práctica únicamente en una VM de laboratorio. Los enlaces de la práctica son virtuales y no modifican la tarjeta física. Crea una instantánea antes de empezar.
1. Objetivos
Crear espacios de nombres de red con ip netns.
Conectar namespaces mediante pares de interfaces veth.
Configurar dos redes IPv4, rutas y gateways.
Activar el reenvío IPv4 dentro del router.
Diagnosticar un fallo de enrutamiento controlado.
2. Topología y direccionamiento
| Elemento | Interfaz y dirección | Función |
|---|---|---|
| hostA | eth0: 10.10.1.10/24\ GW: 10.10.1.1 | Host de LAN A |
| router | r1a: 10.10.1.1/24\ r1b: 10.10.2.1/24 | Une las dos LAN |
| hostB | eth0: 10.10.2.10/24\ GW: 10.10.2.1 | Host de LAN B |
Un par veth equivale a un cable Ethernet virtual: lo que entra por un extremo aparece por el otro. Cada namespace tiene interfaces, tabla de rutas y vecinos ARP propios. No se usa NAT, DNS ni acceso a Internet.
3. Comprobaciones previas
ip -V sudo ip netns list # Solo si se quiere capturar tráfico y el comando no existe: sudo apt update && sudo apt install -y tcpdump
ip netns list no debería mostrar inicialmente hostA, router ni hostB. tcpdump es opcional: sirve para observar paquetes, no para hacer funcionar la práctica.
4. Crear los namespaces
sudo ip netns add hostA sudo ip netns add router sudo ip netns add hostB sudo ip netns list
Cada orden ip netns add crea una pila de red aislada. Todavía no hay tarjetas conectadas entre ellas.
5. Crear los cables virtuales
sudo ip link add ha-veth type veth peer name r1a-veth sudo ip link set ha-veth netns hostA sudo ip link set r1a-veth netns router sudo ip link add hb-veth type veth peer name r1b-veth sudo ip link set hb-veth netns hostB sudo ip link set r1b-veth netns router
type veth peer name crea dos extremos enlazados. ip link set … netns mueve cada extremo al host o router correspondiente. El primer par conecta hostA con router; el segundo conecta router con hostB.
6. Renombrar y activar interfaces
sudo ip -n hostA link set ha-veth name eth0 sudo ip -n hostB link set hb-veth name eth0 sudo ip -n router link set r1a-veth name r1a sudo ip -n router link set r1b-veth name r1b sudo ip -n hostA link set lo up sudo ip -n hostA link set eth0 up sudo ip -n router link set lo up sudo ip -n router link set r1a up sudo ip -n router link set r1b up sudo ip -n hostB link set lo up sudo ip -n hostB link set eth0 up
-n NAMESPACE ejecuta la orden dentro del namespace indicado. lo y todos los extremos veth deben quedar en estado UP.
7. Configurar direcciones IPv4
sudo ip -n hostA address add 10.10.1.10/24 dev eth0 sudo ip -n router address add 10.10.1.1/24 dev r1a sudo ip -n router address add 10.10.2.1/24 dev r1b sudo ip -n hostB address add 10.10.2.10/24 dev eth0 sudo ip -n hostA -br address sudo ip -n router -br address sudo ip -n hostB -br address
Se han creado dos LAN: 10.10.1.0/24 y 10.10.2.0/24. Las direcciones terminadas en .1 pertenecen al router y serán los gateways.
8. Añadir gateways y activar el router
sudo ip -n hostA route add default via 10.10.1.1 sudo ip -n hostB route add default via 10.10.2.1 sudo ip netns exec router sysctl -w net.ipv4.ip_forward=1 sudo ip -n hostA route show sudo ip -n router route show sudo ip -n hostB route show
La ruta por defecto indica dónde entregar los destinos que no pertenecen a la LAN local. Tener dos direcciones en el router no basta: ip_forward=1 habilita el reenvío entre sus dos interfaces. Debe activarse dentro de router, no en la VM anfitriona.
9. Verificar el recorrido
sudo ip netns exec hostA ping -c 3 10.10.1.1 sudo ip netns exec hostB ping -c 3 10.10.2.1 sudo ip netns exec hostA ping -c 3 10.10.2.10 sudo ip -n hostA route get 10.10.2.10
El primer y segundo ping prueban cada LAN. El tercero debe llegar de hostA a hostB a través del router. route get debe indicar 10.10.1.1 como siguiente salto por eth0.
Para observar los paquetes, abra otra terminal:
sudo ip netns exec router tcpdump -ni r1a icmp # En la otra terminal: sudo ip netns exec hostA ping -c 3 10.10.2.10
En r1a se verán paquetes ICMP de 10.10.1.10 a 10.10.2.10. Repita la captura sobre r1b para comprobar que salen por la otra LAN. Termine con Ctrl+C.
10. Fallo controlado
sudo ip netns exec router sysctl -w net.ipv4.ip_forward=0 sudo ip netns exec hostA ping -c 3 10.10.2.10 sudo ip netns exec hostA ping -c 3 10.10.1.1 sudo ip netns exec router sysctl -w net.ipv4.ip_forward=1 sudo ip netns exec hostA ping -c 3 10.10.2.10
Con ip_forward=0 falla el ping a hostB, pero responde el ping al gateway 10.10.1.1. Esto demuestra que las interfaces y las direcciones están bien: falta autorización del router para reenviar tráfico. Al restaurar el valor 1, el ping remoto debe volver a funcionar.
11. Limpieza
sudo ip netns del hostA sudo ip netns del router sudo ip netns del hostB sudo ip netns list
Al borrar un namespace se eliminan sus interfaces veth, rutas y direcciones. No hay que eliminar cada enlace por separado.
12. Entrega
Captura de los tres namespaces creados.
Captura de las dos interfaces IPv4 del router.
Ping correcto de hostA a hostB.
Salida de route get 10.10.2.10 desde hostA.
