Jugando con Babel
Jugando con Babel
por Luis Mita y colaboradores
La primera impresión seria de Babel no es buena: la documentación no te ayudará a entender desde un principio qué cosa es lo que dice ser, y los ejemplos en Internet son escasos y muy escuetos.
Entonces, para entender a Babel, toca experimentar.
Escenario de pruebas
- En una casa tenemos una antena con router OpenWrt, donde está conectado un servidor.
- A la mitad de la calle tenemos otra antena con router OpenWrt
- En el edificio de la otra cuadra tenemos otra antena con router OpenWrt, y otro servidor.
- Luego, en la avenida, tenemos otra antena con router OpenWrt. Modo Ad-Hoc y AP abierto (para clientes)
Todas estas antenas con router ejecutan Babel y están conectadas entre sí en modo Ad-Hoc.
Objetivos
- Que un router (mesh) alcance a otro router (mesh)
- Que un router (mesh) alcance a una máquina detrás de un router (mesh)
- Que una máquina detrás de un router (mesh) alcance a otro router (mesh)
- Que una máquina detrás de un router (mesh) alcance a otra máquina detrás de un router (mesh)
- Que los bloques de IPs sean distintos para nodos mesh y para Clientes Ocasionales (de red Wi-Fi abierta)
- Que desde una red Wi-Fi abierta (AP), se pueda alcanzar a todos los demás
- Que desde la red, se pueda alcanzar a los aparatos conectados a una red Wi-Fi abierta (AP)
- Implica eliminar NAT
- Que desde cualquier red Wi-Fi abierta (AP), se pueda alcanzar a los aparatos conectados a otra red Wi-Fi abierta (AP) circulando por la red mesh
- Implica eliminar NAT
Datos técnicos
- Ninguno de los servidores conoce Babel ni entenderá nada que no sea una red típica y normal.
- El radio de la antena/router de la avenida trabaja doble: mantiene una mesh y a la vez crea un AP para clientes.
- Usamos dos bloques IP diferentes para los dispositivos: 10.0.0.0/8 para nodos mesh y 172.16.0.0/12 para clientes ocasionales del AP libre.
- La red mesh es una red conectada por nodos fijos (no nodos-parásito): no tiene por qué haber DHCP en la mesh.
- El bloque de IPs para clientes ocasionales es enrutable y públicamente alcanzable (no-NAT).
- Este es un ejemplo para entender el funcionamiento del protocolo. Aunque no incluimos IPv6, el protocolo lo soporta.
Configurando todo
Nodo Cero (Casa)
- La red de la casa consta de 10.1.0.0/24.
- Esta antena/router es 10.1.0.1 y anunciará 10.1.0.0/24 en la mesh: cualquier nodo que desee llegar a una máquina dentro del rango, deberá llegar a este router primero.
- En la red de este router, existe un servidor en 10.1.0.22
/etc/config/babeld
package babeld
config general
option 'random_id' 'true'
option 'ipv6_subtrees' 'true'
config interface
option 'ifname' 'wlroute' #interfaz (preferiblemente virtual) donde Babel actúa
config filter
# [sólo] Recibir anuncios de rutas de nodos que estén en la mesh (10.0.0.0/8)
# En la red mesh de verdad, esto se debería restringir al bloque de IPs para el dep. La Paz
option 'type' 'in'
option 'ip' '10.0.0.0/8'
option 'action' 'allow'
# Regla similar para IPv6
config filter
# Anunciar la ruta de la red que yo represento en la mesh.
# Este es el principal parámetro a configurar
# En la red mesh de verdad, la asignación de red debería ser más pequeña (/27, /28)
option 'type' 'redistribute'
option 'local' 'true'
option 'ip' '10.1.0.1/24'
# Regla similar para IPv6
config filter
# Habilitar la redistribución de anuncios de rangos de IP en el sig. segmento
# Rango IP: similar al del primer filtro
# (sin esto, sólo se validará rutas a las IP de los demás nodos/router (/32) y no así a las redes detrás de ellos)
option 'type' 'redistribute'
option 'ip' '10.0.0.0/8'
config filter
# Ignorar rutas obtenidas de supuestos "nodos" que no participen en la mesh
option 'type' 'in'
option 'action' 'deny'
config filter
# No anunciar direcciones adicionales fuera de lo configurado.
# MUY IMPORTANTE
option 'type' 'redistribute'
option 'local' 'true'
option 'action' 'deny'
config filter
# Por defecto
option 'type' 'redistribute'
option 'action' 'deny'
/etc/config/wireless
config wifi-iface
option device 'radio0'
option encryption 'none'
option ssid 'hello'
option mode 'adhoc'
option network 'wlroute'
/etc/config/network
config interface 'wlroute'
option proto 'static'
option ipaddr '10.1.0.1'
option netmask '255.255.255.0'
Nodo calle
- La red del aparato consta de 10.1.1.0/24.
- Esta antena/router es 10.1.1.1 y anunciará 10.1.1.0/24 en la mesh: cualquier nodo que desee llegar a una máquina dentro del rango, deberá llegar a este router primero.
/etc/config/babeld
(similar al anterior, modificando red a anunciar)
/etc/config/network
(similar al anterior, modificando red a anunciar)
/etc/config/wireless
(similar al anterior)
Nodo edificio
- La red del aparato consta de 10.1.2.0/24.
- Esta antena/router es 10.1.2.1 y anunciará 10.1.2.0/24 en la mesh: cualquier nodo que desee llegar a una máquina dentro del rango, deberá llegar a este router primero.
- En la red de este router, existe un servidor en 10.1.2.12
/etc/config/babeld
(similar al anterior, modificando red a anunciar)
/etc/config/network
(similar al anterior, modificando red a anunciar)
/etc/config/wireless
(similar al anterior)
Nodo avenida
- La red del aparato consta de 10.1.5.0/24.
- Esta antena/router es 10.1.5.1 y anunciará 10.1.5.0/24 en la mesh: cualquier nodo que desee llegar a una máquina dentro del rango, deberá llegar a este router primero.
- Esta antena/router da servicio AP Wi-Fi abierta a clientes ocasionales. El router es 172.16.200.1 y anunciará 172.16.200.0/24 en la mesh.
- Se aceptarán anuncios de rutas de la red mesh (como es estándar), pero no así anuncios de supuestos "nodos" en la red Wi-Fi abierta.
/etc/config/babeld
#(...)
config filter
# Anunciar la ruta de la red que yo represento en la mesh.
# En la red mesh de verdad, la asignación de red debería ser más pequeña (/27, /28)
option 'type' 'redistribute'
option 'local' 'true'
option 'ip' '10.1.5.1/24'
# Regla similar para IPv6
config filter
# Anunciar la ruta de la red para Clientes Ocasionales que yo represento en la mesh.
# En la red mesh de verdad, la asignación de red debería ser más pequeña (/24, /25)
option 'type' 'redistribute'
option 'local' 'true'
option 'ip' '172.16.200.0/24'
# Regla similar para IPv6
config filter
# Habilitar la redistribución de anuncios de rangos de IP en el sig. segmento
option 'type' 'redistribute'
option 'ip' '172.16.0.0/12'
#(...)
/etc/config/wireless
config wifi-iface
option device 'radio0'
option encryption 'none'
option ssid 'hello'
option mode 'adhoc'
option network 'wlroute'
config wifi-iface
option device 'radio0'
option mode 'ap'
option encryption 'none'
option ssid 'hello-open'
option network 'wlclts'
/etc/config/network
config interface 'wlroute'
option proto 'static'
option ipaddr '10.1.5.1'
option netmask '255.255.255.0'
config interface 'wlclts'
option proto 'static'
option ipaddr '172.16.200.1'
option netmask '255.255.255.0'