P2 · Qhapaq Ñan
Su sistema autónomo se conecta al resto del mundo con BGP. Primero contra un mundo simulado que corre en su laptop y después, en el hackathon, contra los demás equipos. Se usa lo visto en las semanas 6 y 7. Entrega en la semana 9.
Lo que reciben
mundo/: una topología con los vecinos de su AS, de números privados: dos proveedores, un peer y dos clientes. También incluye un host externo,afuera, y un AS,pirata, que más adelante anuncia prefijos que no le corresponden.as/vecinos.env: quién es cada vecino.as/vty.sh:vtyshpara usar desde unsetup.shsin pisarse con la carga defrr.conf.as/politicas.md: la plantilla de su informe.
Copien su carpeta as/ de P1 sobre la de este enunciado, sin borrar esos tres archivos.
afuera
|
.------ troncal ------.------ pirata
| | |
pa peer pb
proveedor A | proveedor B
| | |
c1 ---- r4 | r2 ---- c2
cliente 1 \ | / cliente 2
'---- su AS -----'
Cada vecino va siempre en el mismo router y la misma interfaz, en los dos mundos:
Rol en vecinos.env |
Interfaz | En el mundo simulado |
|---|---|---|
PROVEEDOR_A |
r4:eth4 |
pa, AS 64801 |
CLIENTE_1 |
r4:eth5 |
c1, AS 64811 |
PROVEEDOR_B |
r2:eth3 |
pb, AS 64802 |
PEER |
r2:eth4 |
peer, AS 64803 |
CLIENTE_2 |
r2:eth5 |
c2, AS 64812 |
El resto de su red no cambia: los mismos nodos y las mismas interfaces de P1. La única diferencia es
que ext ya no existe. r4:eth3 sigue ahí, pero no hay nada enchufado. Los enlaces con los
vecinos usan direcciones de 100.64.0.0/16, que no son de ningún equipo.
Lo que deben hacer
- Sesiones. Abrir eBGP con cada vecino desde
r2yr4, e iBGP entre sus routers. - Anuncio. Anunciar solo el agregado
100.(64 + X).0.0/16, nunca las direcciones privadas. - Importación. Preferir rutas de clientes, luego de peers y por último de proveedores, con
local-preference. - Exportación. Las rutas de clientes y las propias, a todos. Las de peers y proveedores, solo a clientes. Usen comunidades de BGP para marcar el origen.
- Ingeniería de tráfico. Salir por el proveedor A mientras exista, y usar el proveedor B solo como respaldo.
- Defensa. Aceptar de cada cliente solo sus prefijos, con
prefix-list. Rechazar los prefijos propios cuando vengan de afuera. - Borde. Ahora la oficina puede salir por
r2o porr4, según qué proveedor esté vivo. Hagan que nunca salga con su dirección privada y que nadie de afuera entre a ella, por ninguna interfaz hacia afuera. El NAT y el filtro de P1 solo cuidanr4:eth3, así que no alcanzan. Pueden poner NAT y filtro en cada router de borde, o un solo NAT más adentro y filtros en el borde: expliquen su decisión en el informe. - Informe. En
as/politicas.md, explicar cada política en términos de quién paga a quién.
Tres cosas de P1 que van a estorbar
- La ruta por defecto hacia
ext. Quítenla, y también su anuncio en OSPF. Si queda, los routers sin iBGP igual llegan a todas partes porr4, y no se dan cuenta de lo que les falta. - Una dirección para
r2. Si su NAT queda también enr2, necesita una dirección pública propia, en OSPF, igual que la der4. La respuesta a un paquete que salió por un lado puede entrar por el otro. - Una ruta hacia el agregado. BGP solo anuncia un prefijo que está en la tabla. Ningún router de P1 tiene el
/16completo: creen una ruta aNull0. No le gana a nada de OSPF, porque las de su red son más específicas.
as/vecinos.env
Es lo único que cambia el día del hackathon, y lo escribe el docente. Por eso todo lo que depende del vecino debe salir de ese
archivo y no puede estar escrito en frr.conf: su dirección en el enlace, la del vecino, su AS y los prefijos de un cliente.
PROVEEDOR_A_DIR=100.64.71.2/30 # su dirección en el enlace, con su máscara
PROVEEDOR_A_VECINO=100.64.71.1 # la del vecino
PROVEEDOR_A_AS=64801 # el AS del vecino
CLIENTE_1_PREFIJOS="198.18.16.0/22 198.18.40.0/24" # solo en clientes: lo que puede anunciarles
- Un rol sin vecino queda con sus valores vacíos, y su interfaz no existe. No todos los equipos tendrán los cinco.
- En el hackathon, un proveedor recibe en
_PREFIJOSel bloque de su cliente y también los de los clientes de su cliente. frr.confse monta de solo lectura. La forma natural es dejar enfrr.conflo que no cambia (losroute-map, las comunidades, iBGP) y quer2/setup.shyr4/setup.shlean/as/vecinos.envy abran las sesiones. Corren con BusyBoxsh, después de que el nodo tiene sus interfaces:
. /as/vecinos.env
if [ -n "$PROVEEDOR_A_VECINO" ]; then
sh /as/vty.sh -c 'configure terminal' -c 'interface eth4' -c "ip address $PROVEEDOR_A_DIR" -c exit \
-c 'router bgp 65017' -c "neighbor $PROVEEDOR_A_VECINO remote-as $PROVEEDOR_A_AS"
fi
Usen as/vty.sh, no vtysh directo. Cuando setup.sh corre, FRRouting todavía puede estar cargando frr.conf. Dos cargas a la vez
terminan en could not lock running DS, a veces solo en una laptop lenta.
Hasta el hackathon no le cambien los valores: son los del mundo simulado.
Reglas que revisan las pruebas
Sesiones
- Todas las sesiones quedan en
Established, solo enr2yr4hacia afuera, y el AS alcanza a todos los prefijos del mundo. - Malla completa o reflector de rutas: cada router tiene sesiones iBGP, y todas arriba. Los cuatro aprenden el mundo por BGP, no por OSPF. Ningún router tiene ruta por defecto.
- El hold time de las sesiones eBGP es de 10 s o menos. Con el valor normal, un enlace que deja de pasar paquetes demoraría 3 minutos en notarse.
- Si cae un enlace del núcleo, el AS no pierde el mundo: iBGP no puede depender de un enlace en particular.
Lo que sale
- Cada vecino recibe su agregado, tal cual: ni direcciones privadas, ni otro largo, ni las direcciones de los enlaces.
- Un proveedor no recibe rutas aprendidas del otro proveedor ni del peer. El peer tampoco recibe las de los proveedores. Solo reciben las propias y las de clientes.
- Los clientes reciben todo y tienen tránsito: llegan a
afuera, y desdeafuerase llega a ellos. - En
r1, que solo oye iBGP, las rutas de clientes, peer y proveedores llegan con comunidades distintas.
Lo que se elige
- La
local-preferenceva cliente, peer y proveedor, en los cuatro routers. - Con la misma ruta disponible desde un cliente y desde un proveedor, gana el cliente, aunque su
AS_PATHsea el más largo. Sin el cliente gana el peer; sin el peer, un proveedor. - Se sale por A en los cuatro routers, aunque el camino por B sea más corto, y aunque
r2tenga a B al lado.
Lo que entra
- Si un cliente anuncia un prefijo ajeno, uno del otro cliente, o uno más específico que lo autorizado, no entra a su tabla.
- Si alguien anuncia sus prefijos propios, de cualquier largo, públicos o privados, no entran, venga de quien venga.
Fallas
- Si cae el proveedor A, el tráfico sale por B y vuelve a A cuando se recupera. Se corta de las dos formas de P1: bajando la interfaz y sin que las interfaces lo noten.
- Un host de afuera alcanza a su servidor de la DMZ durante todo eso, salvo una interrupción breve: menos de 20 s entre dos ping que llegan.
Borde
- La oficina llega a todos los vecinos y a
afueracon una dirección de su bloque público, en TCP y UDP, con A arriba y con A caído. Ningún vecino ve un paquete con origen privado. - Cada vecino le manda paquetes a la oficina, como
exten P1. A ningún host de la oficina le llegan, ni porr4ni porr2. - Desde cada vecino se alcanza la DMZ, sin traducir.
P1 sigue valiendo
- Las direcciones están en sus bloques, salvo las de los enlaces con vecinos. El plan menciona toda subred, incluidas las nuevas, salvo esas. Sigue OSPF en Full, dentro del AS no se traduce, e invitados no llega a personal.
Integración
make testcorre una segunda tanda: copiaas/ymundo/a otra carpeta, con otras direcciones y otros AS envecinos.env, otros prefijos parac1y sin cliente 2. Las sesiones deben subir y todo debe seguir funcionando sin tocar nada más.
Hackathon de la semana 9
Traigan su carpeta as/. El docente la integra con la de los demás equipos en una sola
topología. Para esto, su configuración no puede depender de nada fuera de as/, y sus
vecinos reales se asignan el día del hackathon en as/vecinos.env.
En el hackathon, al otro lado de cada sesión hay otro equipo, y las sesiones suben solas al levantar la red, si su as/ lee bien el archivo. Dejen también
timers connect bajo en cada sesión eBGP (por ejemplo, 5 s): por omisión, tras una caída, BGP puede demorar 2 minutos en volver a intentarlo.
Archivos
| Archivo | Qué hace | ¿Lo modifican? |
|---|---|---|
as/ de P1 |
Su red, ahora con BGP | Sí |
as/politicas.md |
Justificación de las políticas | Sí |
as/vecinos.env |
Quién es cada vecino | Lo cambia el docente, el día del hackathon |
as/vty.sh |
vtysh para usar desde setup.sh |
No |
mundo/ |
El mundo simulado | No |
Makefile, p2_public_test.py |
Levantan todo y lo prueban | No |
hackathon/ |
Lo que usa el docente para integrar las carpetas | No |
as/topo.clab.yml de P1 ya no se usa: esta entrega usa mundo/topo.clab.yml.
Cómo se corren las pruebas
Dentro del contenedor del curso (env/run.sh), desde esta carpeta:
make # revisa la sintaxis, el número de equipo y que estén los archivos
make test # corre las dos tandas, cada una con la red desde cero, y la destruye también si algo falla o con Ctrl+C
make clean # destruye la red y borra lo generado
make test demora unos cuatro minutos. Las pruebas miran lo que pasa en la red, y no exigen una forma de hacer las cosas. Tienen márgenes
amplios, y si una se queda esperando, falla sola. Agreguen sus pruebas en archivos test_*.py: corren en la primera tanda, con la red arriba.
La revisión corre además pruebas privadas con otros casos de falla y de tráfico.
Trabajar a mano
make topo-up # levanta su AS en el mundo con lo que hay en as/
make vtysh N=r4 # vtysh en r4; también sirve con N=pa, N=c1...
make sh N=h1 # una shell en un nodo
make topo-down
Para ver lo que le llega a un vecino: make vtysh N=pa, y dentro, show bgp ipv4 unicast neighbors 100.64.71.2 received-routes.
Si una prueba falla
- La sesión queda en
ActiveoConnect. Revisenshow bgp neighbors. La dirección del enlace debe salir devecinos.env, y el AS también.as/r4/setup.shguarda su salida en/tmp/setup.log. could not lock running DSen la salida desetup.sh. Usensh /as/vty.sh, novtyshdirecto.r1tiene la ruta enshow bgppero sin>, o no la instala. El next hop de iBGP debe ser alcanzable:next-hop-self, o los enlaces con vecinos en OSPF.- Con A caído, se pierde todo por unos minutos. Revisen el hold time, que es lo único que nota un corte silencioso.
- Tras reparar A, el tráfico sigue por B demasiado. Es el tiempo entre intentos de abrir la sesión: revisen
timers connect. - Un proveedor recibe rutas de B o del peer. Lo que entró en otro router llega por iBGP: revisen que las comunidades se conserven y que el filtro de salida las mire.
- Corrigen una
prefix-lista mano y no pasa nada. Lo ya recibido no se vuelve a evaluar:clear bgp ipv4 unicast <vecino> soft in. - Con A caído,
afuerave una dirección privada, o nadie responde. Es el NAT: porr2no se está traduciendo. - Con NAT más adentro, una adyacencia de OSPF se cae o queda en
Init, a veces sí y a veces no. Una regla de NAT con un origen muy amplio también traduce los Hello del propio router, si su dirección cae en ese rango. Traduzcan solo las subredes de la oficina. - Funciona en la primera tanda y falla en la segunda. Algo de un vecino quedó escrito fuera de
vecinos.env, osetup.shtoca una interfaz de un rol vacío.