Jugando con Babel

De Hacklab La Paz - r00thouse
Revisión del 16:11 25 nov 2015 de Looper (discusión | contribs.) (Link a babel-1.6.3)

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

Babel Strike Mapa real.png

  • 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.

Aunque en los repositorios se encuentra la versión 1.6.1, se ha utilizado la última versión (compilada con Buildroot), disponible en este enlace: [1]

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'

Resultados