Distributed Network 42 con OpenWrt (Parte 2)

En Distributed Network 42 con OpenWrt (Parte 1) se configuro un túnel OpenVPN punto a punto contra alguno de los miembros de dn42, ahora hay que establecer una sesión Border Gateway Protocol (BGP) a través del túnel para intercambiar rutas (peering).


Entre los paquetes disponibles en OpenWRT puedes encontrar dos demonios de routing que soportan BGP.
  • Bird: Usado por varios Internet Exchange Points (IXPs) por su gran escalabilidad pero, por lo menos a simple vista, bastante complicado de configurar.
  • Quagga: Según parece tiene algunos problemas de escalabilidad pero, al nivel que lo vamos a usar, no nos debería de preocupar.

Configuración de Quagga
Al igual que en Distributed Network 42 con OpenWrt (Parte 1) se usa OpenWrt versión Attitude Adjustment y la configuración se realiza por linea de comandos, puedes conectar mediante Telnet o SSH dependiendo de como hayas configurado el firmware.

Una vez hayas accedido, actualiza la lista de paquetes disponibles e instala los necesarios para poder sincronizar las rutas con el Kernel y establecer una sesión BGP.
opkg update
opkg install quagga-zebra quagga-bgpd
Opcionalmente puedes instalar también quagga-vtysh. Después habrá que iniciar el servicio quagga y habilitarlo para que arranque automáticamente en cada inicio del sistema.
/etc/init.d/quagga start
/etc/init.d/quagga enable
Para configurar el BGP conecta mediante Telnet al puerto bgpd (2605 TCP), la contraseña por defecto es: zebra. OpenWrt no trae instalado ningún cliente Telnet así que instala uno o usa Netcat, viene incluido en BusyBox.
nc localhost bgpd

Hello, this is Quagga (version 0.99.21).
Copyright 1996-2005 Kunihiro Ishiguro, et al.


User Access Verification

Password: zebra

router> enable
router#
Como ves, tras acceder se ha puesto enable con lo que se entra al modo privilegiado desde el que se puede pasar al modo configuración poniendo configure terminal. Para salir, tanto del modo configuración como definitivamente, usa exit.

Antes de continuar, comprueba que tienes todos los datos necesarios para poder realizar la configuración, tendrían que ser similares a los siguientes.
Valor (ejemplo)Descripción
6xxxxSistema autónomo (AS) local
7xxxxSistema autónomo (AS) remoto
172.23.xx.x/24Red dn42 local
172.23.xx.xIP red dn42 local
172.22.xxx.xxIP red dn42 remota
Empieza por configurar las prefix-list, con las que se indican las redes que se desea permitir y las que desea denegar. No es obligatorio, pero si recomendable usar descripciones.
ip prefix-list dn42-in description - dn42 import filter
ip prefix-list dn42-in seq 10 deny 10.8.0.0/16 ge 17
ip prefix-list dn42-in seq 11 deny 10.12.0.0/16 ge 17
ip prefix-list dn42-in seq 12 deny 10.64.0.0/11 ge 12
ip prefix-list dn42-in seq 13 deny 10.101.0.0/21 ge 22
ip prefix-list dn42-in seq 14 deny 10.103.252.0/22 ge 23
ip prefix-list dn42-in seq 15 deny 10.243.0.0/16 ge 17
ip prefix-list dn42-in seq 16 permit 10.0.0.0/8 ge 11 le 29
ip prefix-list dn42-in seq 17 permit 10.225.1.93/32
ip prefix-list dn42-in seq 25 deny 172.22.141.128/25 ge 26
ip prefix-list dn42-in seq 26 deny 172.22.166.0/24 ge 25
ip prefix-list dn42-in seq 27 deny 172.22.184.0/24 ge 25
ip prefix-list dn42-in seq 28 deny 172.22.187.0/24 ge 25
ip prefix-list dn42-in seq 29 deny 172.22.239.0/24 ge 25
ip prefix-list dn42-in seq 30 deny 172.23.184.0/23 ge 24
ip prefix-list dn42-in seq 31 deny 172.23.194.0/23 ge 24
ip prefix-list dn42-in seq 32 permit 172.22.0.0/15 ge 22 le 28
ip prefix-list dn42-in seq 33 permit 172.22.0.53/32
ip prefix-list dn42-in seq 50 deny 172.31.2.0/24 ge 25
ip prefix-list dn42-in seq 51 permit 172.31.0.0/16 ge 23 le 29
ip prefix-list dn42-in seq 52 permit 172.31.102.1/32
ip prefix-list dn42-in seq 75 permit 46.4.248.192/27
ip prefix-list dn42-in seq 100 deny 0.0.0.0/0 le 32
Para ofrecer transito es recomendable tener una conexión con un mínimo de 10Mbps simétricos, tanto en bajada como en subida. Si no es el caso crea un route-map como el siguiente.
route-map dn42-out permit 10
    description - dn42 export filter
    set as-path prepend 6xxxx 6xxxx
Por ultimo configura tu sistema autónomo. Sustituye los valores siguiendo la tabla de arriba y aplica la prefix-list y el route-map creados anteriormente.
router bgp 6xxxx
    bgp router-id 172.23.xx.x
    network 172.23.xx.x/24
    neighbor dn42 peer-group
    neighbor dn42 soft-reconfiguration inbound
    neighbor dn42 prefix-list dn42-in in
    neighbor dn42 route-map dn42-out out
    neighbor 172.22.xxx.xx remote-as 7xxxx
    neighbor 172.22.xxx.xx peer-group dn42
    neighbor 172.22.xxx.xx description - dn42 nixnodes peer
Puedes comprobar el estado de la sesión BGP con show ip bgp summary. Para ver las rutas que conoces por BGP usa show ip bgp y si quieres ver las rutas que anuncias a un "vecino" concreto show ip bgp neighbor 172.22.xxx.xx advertised-routes. Todo muy similar a Cisco IOS.
show ip bgp summary
BGP router identifier 172.23.xx.x, local AS number 6xxxx
RIB entries 508, using 36 KiB of memory
Peers 1, using 2524 bytes of memory

Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
172.22.xxx.xx   4 7xxxx   24082   19758        0    0    0 01w1d03h      250

Total number of neighbors 1
Con esto finaliza la segunda parte. En Distributed Network 42 con OpenWrt (Parte 3) se continua integrándolo todo en los ficheros de configuración estándar de OpenWrt y añadiendo resolución para el dominio .dn42.