Jugando con Babel

De Hacklab La Paz - r00thouse
Revisión del 15:53 22 oct 2015 de Looper (discusión | contribs.) (Inicial)
(difs.) ← Revisión anterior | Revisión actual (difs.) | Revisión siguiente → (difs.)

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.

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