Rutas

Esta va a modo de recordatorio. Si, porque a veces escribo también para mi.

Hoy un compañero me preguntaba si alguna vez había hecho algún script en linux para alternar automáticamente en caso de falla distintos proveedores de Internet… Y casualmente, hace un par de años escribí un script así para solucionar un problema en mi trabajo.

La idea es la siguiente. Elijo dos ips que funcionen siempre. (En mi caso elegí los DNS de Google: 8.8.8.8 y 8.8.4.4). Luego a cada uno le doy una ruta distinta.

Ejemplo:

#Agrego una ruta para 8.8.8.8 a través de 192.168.1.100 en la eth0
route add -host 8.8.8.8 gw 192.168.1.100
#Agrego una ruta para 8.8.4.4 a través de 192.168.2.100
route add -host 8.8.4.4 gw 192.168.2.100
Agrego rutas estáticas

Ahora tengo una forma de comprobar por cual conexión hay internet. Si hago ping a 8.8.8.8 me devolverá respuesta un ISP, si hago ping al 8.8.4.4 me responderá el segundo ISP. Comprobando esto, elijo por cual quiero salir primero y después necesito que mi programa chequee por dónde salir.

De más está decir que cada placa de red debe tener una ip en el rango que está su gateway (Obvio)

Acá el script en perl.

	use Net::Ping;
	$hostA="8.8.8.8";
	$hostB="8.8.4.4"
	$p = Net::Ping->new();
		if ($p->ping($hostA)){
			system("route add default gw 192.168.1.100 eth0");	
			print "Cambiando a puerta de Enlace 1";
		}else{
			if($p->ping($hostB)){
				system("route add default gw 192.168.2.100 eth1");			
				print "Todo Ok. Saliendo por GW 2";
			}else{
				system("route add default gw 192.168.1.100 eth0");	
				print "Cambiando a puerta de Enlace 1";
			}
		}
	$p->close();
balance.pl

Si deja de responder ping el hostA cambiamos la conexión a internet por donde sale el hostB. Cuando vuelve, volvemos todo a la normalidad.

Ojalá les sirva.