RPKI SelfLab
EN ES PT
Código abierto · Docker o VM · English, Español, Português

Un laboratorio práctico de ROA, ROV y ASPA, que corre en su computadora

Routers BGP reales, tres validadores RPKI, una CA y un registro simulado, todo en contenedores. Una historia guiada muestra qué detecta la validación de origen, qué se le escapa y qué agrega el ASPA.

El panel web del laboratorio: la guía a la izquierda, la topología en vivo en el medio, los veredictos de los observadores abajo, una pestaña por observador

Qué tiene adentro

Todo es software real, no una simulación. Tres observadores reciben los mismos anuncios y objetos RPKI, cada uno combinando un router y un validador a su manera, así que se pueden comparar tres implementaciones en cada paso.

  • Routers BIRD y OpenBGPD: el origen, dos proveedores, tres observadores que validan, un atacante y un peer.
  • Validadores Routinator y FORT, que alimentan a sus observadores por RTR versión 2, la que transporta el ASPA, y rpki-client, que corre en el propio host de observer2 y le entrega a OpenBGPD un archivo para incluir, a la manera de OpenBSD.
  • Krill como CA del titular, donde se crean las ROAs y el objeto ASPA.
  • Un registro simulado (RIR/NIR), con ancla de confianza y repositorio propios. La delegación de la CA y la publicación usan los mismos intercambios de XML que un registro real (RFC 8183, 6492 y 8181). El laboratorio enseña el modelo delegado: usted corre su propia CA, el registro la certifica y, como muchas veces hacen los RIR y NIR, también ofrece el repositorio donde publicar.
  • Un panel web con la topología en vivo, la guía, las terminales de los routers y las interfaces web, en pestañas.
  • Corre en Linux, macOS y Windows (WSL 2) con Docker, o como máquina virtual lista. No necesita Internet una vez instalado.
La topología del laboratorio: el registro arriba; Routinator y FORT por encima de observer1 y observer3; entre ellos, observer2, que valida en su propio host; los dos proveedores y el AS666; y, abajo, el origen, su CA y el peer

La historia, en nueve pasos

La guía es una sola historia: tres ataques, y qué verificación detiene a cada uno. El AS64500 es multihomed y prefiere al Proveedor B; hacia el Proveedor A, su respaldo, antepone su ASN dos veces. Tres observadores reciben su prefijo por los dos proveedores. Las capturas de abajo son el panel en cada paso.

Paso 1

Una base limpia

Los tres observadores reciben 203.0.113.0/24 por los dos proveedores y eligen el camino más corto, por el Proveedor B. Nadie valida nada todavía: las piezas de RPKI existen, pero ningún router habla con un validador.

Paso 1: topología y veredictos, sin validación
Paso 2

El secuestro ingenuo gana

El AS666 anuncia el prefijo del origen como propio. Su camino, 666, tiene un salto contra dos y cuatro, y nada más distingue las rutas. Los enlaces del atacante se ponen naranjas: los observadores están usando su ruta.

Sin validación, BGP no tiene forma de distinguir un secuestro de la ruta verdadera.

Paso 2: el secuestro es la mejor ruta en los observadores
Paso 3

Entra el ROV, marcando lo que parece mal

El origen crea sus ROAs en Krill, y los observadores despliegan la validación de origen en su primera forma, la segura: las rutas inválidas solo se marcan y se degradan. El secuestro pasa a Invalid con local_pref 10, y el camino del Proveedor B vuelve a ser el seleccionado.

Desplegar ROV requiere tres piezas en cualquier router: una sesión RTR, una prueba en cada ruta y una acción sobre el resultado.

Paso 3: el secuestro queda marcado como ROV Invalid
Paso 4

El camino falsificado

Ahora el AS666 anuncia 666 64500, escribiendo el origen real al final del camino. El ROV solo verifica el último AS, así que dice Valid, y la ruta falsificada gana el desempate con la del Proveedor B.

La validación de origen no puede distinguir dos caminos cuando el origen es el mismo.

Paso 4: el camino falsificado es ROV Valid
Paso 5

Entra el ASPA, también marcando primero

El origen publica un objeto ASPA que lista solo al Proveedor A, y los observadores despliegan la verificación ASPA. El camino falsificado pasa a Invalid: el salto 64500→666 nunca fue autorizado. Pero también el camino legítimo del Proveedor B, y los observadores recurren al respaldo.

Un objeto ASPA tiene que listar a todos los proveedores. Olvidar uno desvía el tráfico del propio origen.

Paso 5: el camino falsificado y el del Proveedor B son ASPA Invalid
Paso 6

Se olvidó de un proveedor

Agregar al Proveedor B al objeto lo resuelve: los dos caminos legítimos vuelven a ser Valid y se selecciona al Proveedor B, mientras el falsificado sigue degradado. El arreglo llega a los routers solo con republicar y revalidar.

Paso 6: los dos caminos legítimos vuelven a ser ASPA Valid
Paso 7

El peer filtra

Un peer legítimo le pasa al Proveedor A las rutas del origen que aprendió en el peering privado. No se falsifica nada: 64501 64499 64500 es Valid para el ROV e Invalid para el ASPA, porque el 64499 no es uno de los proveedores del origen.

En una fuga nadie miente sobre el origen; lo que está mal es por dónde pasó la ruta. El ROV no lo ve, el ASPA sí.

Paso 7: el camino filtrado es ROV Valid y ASPA Invalid
Paso 8

Desplegando de verdad: descartar

Las dos verificaciones pasan de marcar a descartar, como se configura un router de producción. Las rutas falsificada y filtrada desaparecen. Pero el camino propio del Proveedor A sigue sin aparecer: el Proveedor A sigue anunciando la fuga en su lugar, y ninguna política en los observadores puede cambiar eso.

Marcar solo ayuda mientras exista una alternativa válida. Lo que protege la red es descartar.

Paso 8: rutas inválidas descartadas
Paso 9

Ordenar la casa

El peer corrige su política de exportación y el camino propio del Proveedor A vuelve. Los observadores quedan completamente desplegados, con ROV y ASPA descartando.

Paso 9: la fuga terminó y los dos caminos legítimos volvieron

Qué detectó qué

AtaqueAS_PATHROVASPA
Secuestro ingenuo666lo detectanada que verificar
Camino falsificado666 64500engañadolo detecta
Fuga de ruta64501 64499 64500no la vela detecta

Hecho para aprender, y para enseñar

Pensado para cursos prácticos de RPKI, y útil para quien quiera estudiar por su cuenta.

Guía en tres idiomas

Español, portugués e inglés. Cada bloque de comandos dice dónde se ejecuta y abre la terminal correcta.

Desafíos

Algunos pasos ocultan la solución detrás de pistas y un cronómetro; "Verificar mi laboratorio" mira el estado real del lab.

Puntos de control

Se marcan solos cuando el lab llega a cada paso, y cualquier comando de paso vuelve a encaminar el lab.

La preparación también

Cree la CA en Krill y haga los dos lados de la delegación con el registro simulado.

Sus propias configuraciones

Una carpeta work/ para escribir su propia configuración de ROV y ASPA y cargarla en los routers.

Ejercicios extra

Upstream frente a downstream (y dónde BIRD y OpenBGPD no coinciden), maxLength, una mirada por dentro de RTR y rpki-client servido por RTR.

Un desafío de la guía, con pistas, cronómetro y Verificar mi laboratorio
El panel del registro simulado

Cómo empezar

  1. Instale Docker con Compose v2 (Docker Desktop, OrbStack o Docker Engine en Linux). En Windows, use WSL 2 y trabaje dentro de la terminal de Ubuntu.
  2. Descargue el laboratorio:
    git clone https://github.com/moreiras/rpki-selflab.git
    cd rpki-selflab
    o descargue el código fuente de la versión más reciente.
  3. Levante el laboratorio y abra http://localhost:8080:
    ./scripts/lab.sh up

¿Prefiere no instalar Docker?

Cada versión trae también una máquina virtual con todo adentro (amd64 y arm64), con su propio escritorio, navegador y terminal. Detalles en vm/README.es.md.

La guía completa también se puede leer en GitHub: guide/GUIDE.es.md.