P1 · Tu red
Cada equipo diseña un sistema autónomo: una oficina, una DMZ y un núcleo con caminos alternativos. Esta red es la que conectarán a las demás en P2. Se usa lo visto en las semanas 3 a 5. Entrega en la semana 6.
Lo que reciben
- Un número de equipo
X(de 1 a 60), su AS65000 + X, y dos bloques:- Direcciones privadas:
10.X.0.0/16. - Direcciones “públicas” de Qhapaq Ñan:
100.(64 + X).0.0/16.
- Direcciones privadas:
- Una topología de Containerlab,
as/topo.clab.yml, con cuatro routers en anillo más una diagonal (r1–r4), un switch de oficina con cuatro hosts y un servidor en la DMZ,srv. También hay un host externo de prueba,ext, conectado ar4.
r2
/ \
/ \
oficina --- r1 ---------- r3 --- srv (DMZ)
\ diagonal /
\ /
r4 --- ext
La topología ya está fijada: estas son las interfaces de cada nodo.
| Nodo | Interfaces |
|---|---|
r1 |
eth1 a r2, eth2 a r3 (la diagonal), eth3 a r4, eth4 trunk a sw |
r2 |
eth1 a r1, eth2 a r3 |
r3 |
eth1 a r2, eth2 a r1 (la diagonal), eth3 a r4, eth4 a srv |
r4 |
eth1 a r3, eth2 a r1, eth3 a ext |
sw |
eth1 a h1, eth2 a h2, eth3 a h3, eth4 a h4, eth5 trunk a r1 |
h1–h4, srv |
eth1 |
eth0 es la red de gestión que pone Containerlab. No es parte de su red: no la usen ni la
metan en OSPF.
El enlace hacia afuera viene dado, y es la única excepción a sus bloques: r4:eth3 tiene
100.64.0.1/24 y ext tiene 100.64.0.2/24. Ningún equipo usa 100.64.0.0/16. ext manda por
r4 todo lo que vaya a 100.64.0.0/10 y a 10.0.0.0/8, como un vecino descuidado o malintencionado.
Por eso, que no se llegue a la oficina desde afuera depende de ustedes.
Lo que deben hacer
- Plan de direcciones. Documentar en
as/plan.mdtodas las subredes, justificando su tamaño. - VLANs. Separar la oficina en la VLAN 10 (personal:
h1yh2) y la VLAN 20 (invitados:h3yh4). Las dos llegan ar1por un trunk. Invitados no puede iniciar conexiones hacia personal; personal sí puede iniciarlas hacia invitados. - OSPF. Todos los routers en el área 0. Costos elegidos para que el tráfico entre
r1yr3use la diagonal mientras exista. - NAT. La oficina sale con una dirección pública de
r4. El servidor de la DMZ usa una dirección pública propia, sin NAT. - Resistencia. Con Hello de 1 s y Dead de 3 s, la red debe seguir funcionando si cae cualquier enlace del núcleo.
Reglas que revisan las pruebas
Direcciones
- Todas las direcciones están dentro de los bloques del equipo, salvo el enlace
r4–ext. Las subredes no se solapan. - La oficina usa direcciones privadas y
srv, una pública. - Cada subred aparece en
as/plan.mden notación CIDR, tal como está configurada.
VLANs
- Los hosts no etiquetan nada: su dirección va en
eth1, y ar1sus frames le llegan por el trunk con la VLAN de cada uno. - Las VLANs están separadas en la capa de enlace: un invitado que se ponga una dirección de personal igual no llega a personal.
- Invitados no inicia conexiones hacia personal, ni con TCP ni con UDP ni con ICMP. Personal sí las inicia hacia invitados, y las respuestas vuelven.
OSPF
- Hay adyacencia en
Fullen los cinco enlaces del núcleo, con Hello de 1 s y Dead de 3 s, todo en el área 0. - OSPF habla solo por los enlaces del núcleo. En las demás interfaces, o no corre, o es
passive-interface. - OSPF no reparte la red de gestión. Solo aprende rutas de sus bloques, de
100.64.0.0/24y la ruta por defecto. tracerouteder1a cualquier dirección der3, y der3a cualquiera der1, tiene un solo salto: el de la diagonal. La tabla de routing no muestra otro camino, ni siquiera empatado. Si se cae la diagonal, usa el anillo. Cuando vuelve, vuelve a ella.
Conectividad y NAT
- Todos los hosts alcanzan al servidor de la DMZ y a
ext, con TCP, UDP e ICMP. srvve a cada host de la oficina con su dirección real: dentro del AS no se traduce.extve toda la oficina con una sola dirección pública der4, de su bloque, que no es la del enlace100.64.0.1. Ningún paquete de la oficina llega aextcon origen privado.extve asrvcon su dirección propia, ysrvve aextcon la suya.- Desde afuera se alcanza el servidor de la DMZ, pero no un host de la oficina, ni por su dirección privada ni a través de la dirección pública de
r4. r1,r2yr3alcanzan esa dirección pública der4: tiene que estar en OSPF. P2 la va a necesitar.
Fallas
- Al cortar cualquier enlace del núcleo, la conectividad vuelve en menos de 10 s.
- Se corta de dos formas: bajando la interfaz en un extremo y haciendo que el enlace deje de pasar paquetes sin que las interfaces lo noten. En el segundo caso, solo el Dead detecta la falla. Con los temporizadores normales de OSPF, la red tardaría unos 40 s.
Archivos
| Archivo | Qué hace | ¿Lo modifican? |
|---|---|---|
as/r*/frr.conf |
Configuración de FRRouting de cada router | Sí |
as/<nodo>/setup.sh |
Lo que cada nodo hace al arrancar: VLANs, nftables, direcciones de los hosts | Sí |
as/plan.md |
Plan de direcciones y decisiones | Sí |
as/equipo.env |
Número de equipo | Sí |
as/topo.clab.yml, as/arranque.sh |
La topología y lo que prepara cada nodo | No |
Makefile, p1_public_test.py |
Levantan la red y la prueban | No |
La carpeta as/ debe quedar lista para volver a levantarse desde cero: nada se configura a
mano sin dejarlo escrito. Cada nodo monta as/ completa en /as, y no ve nada más. Si sus
archivos dependen de algo fuera de as/, no van a funcionar en el hackathon de P2.
Cada setup.sh corre con sh (BusyBox, no bash) y se detiene en el primer comando que falla. Las
direcciones de los routers pueden ir en frr.conf o en setup.sh; las de los hosts, en setup.sh.
Agreguen sus pruebas en archivos test_*.py, en esta misma carpeta: make test las corre. Corren
después de las públicas, con la red todavía arriba.
Cómo se corren las pruebas
Dentro del contenedor del curso (env/run.sh), desde esta carpeta:
make # revisa la sintaxis de setup.sh y el número de equipo
make test # levanta la red, corre todo y la destruye, también si algo falla o con Ctrl+C
make clean # destruye la red y borra lo generado
Las pruebas leen las direcciones de los nodos, no las suponen: cada equipo elige las suyas. Tampoco
exigen una forma de hacer las cosas. Por ejemplo, r1 puede usar subinterfaces o un bridge.
Solo miran lo que pasa en la red. make test demora unos dos minutos, y las pruebas tienen márgenes
amplios. Si una se queda esperando, falla sola.
La revisión corre además pruebas privadas con otros casos de falla y de tráfico.
Trabajar a mano
make topo-up # levanta la red con lo que hay en as/
make vtysh N=r1 # vtysh en r1
make sh N=h1 # una shell en h1
docker exec clab-p1-red-r1 tcpdump -ni eth4 -e # capturar en un nodo
make topo-down
Lo que cambien a mano se pierde al bajar la red. as/ se monta solo para lectura, así que write memory termina en Read-only file system: es a propósito. Pasen lo que funcionó a as/r*/frr.conf
o a setup.sh, y vuelvan a levantar la red.
Para correr en la red de un nodo las herramientas de este contenedor, como en P0, usen nsenter:
H1=$(docker inspect -f '{{.State.Pid}}' clab-p1-red-h1)
nsenter -n -t $H1 ping -c 1 100.64.0.2
Si una prueba falla
- Una adyacencia no sube. Revisen con
show ip ospf interfaceel área, la máscara y los temporizadores en los dos extremos. Tienen que coincidir. - La prueba de la diagonal encuentra dos interfaces, o una que no es la diagonal. Una dirección de
r3en otro enlace también se alcanza por el anillo, y los dos caminos pueden empatar. Calculen con Dijkstra el costo de cada camino y comparen conshow ip route. - Funciona a mano y falla en las pruebas. Busquen lo que configuraron a mano y no quedó en
as/. extve otra dirección. Una regla de NAT sin origen traduce también lo que no debe, ymasqueradeusa la dirección de la interfaz de salida.- La oficina no recibe respuestas de afuera. Las respuestas también pasan por la cadena
forwardder4. Con nftables, escriban primero la regla que aceptact state established,related. La formact state != established,relatedno hace lo que parece: compruébenlo connft list ruleset. - Con una falla, algo sigue sin llegar a los 10 s. Busquen rutas estáticas por el enlace cortado: una estática le gana a OSPF aunque el enlace ya no sirva.
setup.shfalla. Las pruebas muestran su salida. También está en/tmp/setup.log, dentro del nodo.