====== 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.