Bueno, parece que el OSPF no funciona del todo bien en el dd-wrt v23 SP1. Por lo que he visto, es un problema con la autentificación, que viene activada por defecto. Buscando un poco he encontrado el problema. Este es el fichero de configuración de bird que nos deja el dd-wrt cuando activamos OSPF:
router id 10.34.46.131;
protocol kernel { learn; persist; scan time 10; import all; export all; }
protocol device { scan time 10; }
protocol direct { interface "*";}
protocol ospf WRT54G_ospf {
area 0 {
interface "vlan1" { cost 1; authentication simple; password "xxxx"; };
interface "br0" { cost 1; authentication simple; password "xxxx"; };
};
}
Sin entrar en muchas explicaciones, el caso es que está mal ;-). No, sin coña, la autentificación por password no funciona y cuando un ap está en modo cliente, los nombres de los interfaces no son esos...así que hay que cambiarlo y dejarlo así:
router id 10.34.46.131;
protocol kernel { learn; persist; scan time 10; import all; export all; }
protocol device { scan time 10; }
protocol direct { interface "*";}
protocol ospf WRT54G_ospf {
area 0 {
interface "*" { cost 1; authentication none; };
};
}
Para conseguir que esto funcione tras los reinicios de los aps, haremos lo siguiente:
nvram set bird_ospf="router id IP_DE_TU_AP;
protocol kernel { learn; persist; scan time 10; import all; export all; }
protocol device { scan time 10; }
protocol direct { interface \"*\";}
protocol ospf WRT54G_ospf {
area 0 {
interface \"*\" { cost 1; authentication none; };
};
}"
Muy importante: escapar las comillas
Ahora hay que añadir una cosilla a la variable rc_startup de la nvram, que se ejecuta cada vez que se enciende el ap. Naturalmente, si ya tenías algo en el rc_startup, acuérdate de añadirlo al principio.
nvram set rc_startup="killall bird;sleep 5;nvram get bird_ospf > /tmp/bird/bird.conf;/usr/sbin/bird -c /tmp/bird/bird.conf;"
Importante: el sleep 5, ya que si no el bird no llega a rearrancar.
Por último, reiniciamos:
nvram commit&&reboot