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.