Me he encontrado alguna vez con que algún equipo de proyectos nos ha pedido el usuario root para hacer pruebas de aplicación para un proyecto piloto y resulta que al rebotar el servidor la aplicación no funcionaba porque no se podía conectar a según que IPs y puertos. El motivo era que habían dado de alta rutas dinámicas en el servidor y no las habían guardado como persistentes.
En RedHat, las rutas persistentes se almacenan en el fichero /etc/sysconfig/network-scripts/route-XXX, donde XXX se refiere al nombre de la interfaz.
Para comprobar que todas las rutas que están dadas de alta en el servidor están almacenadas en el fichero de rutas persistentes, hice el siguiente script:
- Comprobamos las rutas que existen en el servidor actualmente:
[root@CentOS6tst ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
[root@CentOS6tst ~]#
- Para hacer una prueba, añado una ruta nueva dinámicamente:
[root@CentOS6tst ~]# route add -net 192.151.16.0 netmask 255.255.255.0 gateway 192.168.1.1
[root@CentOS6tst ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.151.16.0 192.168.1.1 255.255.255.0 UG 0 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
[root@CentOS6tst ~]#
- Ejecuto el script que comentaba para saber si falta alguna ruta en el fichero de rutas persistentes:
[root@CentOS6tst ~]# ./check_rutas_dinamicas.sh
CentOS6tst 192.151.16.0 192.168.1.1 255.255.255.0 eth0
[root@CentOS6tst ~]#
Lo que devuelve es la ruta que falta (IP, Gateway, máscara e interfaz de red).
Código fuente del script
#!/bin/sh
#D.M.P. – Este script comprueba las rutas dinamicas dadas de alta pero que no estan configuradas como persistentes
#Devuelve la IP, Gateway, mascara e interface de la ruta que no existe
route -n |awk ‘{print $1″ «$2» «$3» «$8}’ |grep -v Kernel |grep -v Destination |while read RUTAS
do
LINEA=(echo $RUTAS)
IP=${LINEA[1]}
GATEWAY=${LINEA[2]}
MASCARA=${LINEA[3]}
INTERFACE=${LINEA[4]}
FICHERORUTAS=/etc/sysconfig/network-scripts/route-$INTERFACE
#El default no se revisa en el fichero /etc/sysconfig/network-script/route-INTERFACE
if [ $IP == «0.0.0.0» ] || [ $GATEWAY == «0.0.0.0» ]
then
continue
fi
EXISTERUTA=$(grep $IP $FICHERORUTAS |wc -l)
if [ «$EXISTERUTA» -eq «0» ]
then
#La ruta no existe
echo $(hostname) $IP $GATEWAY $MASCARA $INTERFACE
fi
done
#Ahora vamos a verificar si existe alguna ruta en el default gateway que tenemos configurado
DGATEWAY=$(grep -v «#» /etc/sysconfig/network |grep GATEWAY |awk -F «=» ‘{print $2}’)
EXISTEDG=$(route -n |grep $DGATEWAY |wc -l)
if [ «$EXISTEDG» -eq «0» ]
then
#No hay ninguna ruta dada de alta con el default gateway configurado en /etc/sysconfig/network
echo «$(hostname) – El default gateway configurado en /etc/sysconfig/network es $DGATEWAY, pero no hay ninguna ruta configurada con el mismo»
fi
Obviamente, si tienes configurado DHCP, no utilices este script.