Todos los administradores de sistemas (sysadmins) GNU/Linux sabemos que para configurar la tabla de ruteo del sistema se utiliza el comando ip route. Aunque, la herramienta ip manipula la tabla de ruteo, configuración de dispositivos, políticas y túneles de forma dinámica. Es decir, al reiniciar el sistema los cambios se pierden. Por este motivo, cada distribución GNU/Linux utiliza su propio formato de archivo de configuración de red, para que los cambios persistan. De esta forma es posible que las interfaces, tablas de ruteo, etc. se configuren automáticamente cada vez que se inicia Linux.

Los sistemas basados en Red Hat/CentOS guardan la configuración de red en diferentes archivos. El archivo /etc/hosts guarda nombres de host esáticos (que no pueden ser resueltos por otros medios, por ejemplo DNS). El archivo /etc/resolv.conf guarda las direcciones IP de los servidores DNS. El archivo /etc/sysconfig/network almacena información del host y rutas (por ejemplo: default gateway) para todas las interfaces. Finalmente, las interfaces de red se configuran en diferentes archivos dentro del directorio /etc/sysconfig/network-scripts/. Por ejemplo, la configuración de red de la interfaz eth0 se guarda en el archivo /etc/sysconfig/network-scripts/ifcfg-eth0. El formato de estos archivos es auto-explicativo, aunque la documentación oficial se encuentra disponible en la guía de implementación: Chapter 13. Network Interfaces, 13.2. Interface Configuration Files.

El ruteo de paquetes es el principal motivo de existencia del protocolo IP, tal como lo expresa claramente su sigla: Internet Protocol. Las rutas permiten interconectar redes que de otra forma estaría aisladas. Se denomina ruteo (routing) al proceso de reenviar paquetes entre redes conectadas. Esto permite conectar hosts que se encuentran en redes separadas.

El proceso de ruteo (procesamiento e intercambio de datagramas) es realizado en cada host por el protocolo IP. Generalmente cada host está conectado a una única red, exceptuando los routers. Los routers son dispositivos especiales que están conectados a dos o más redes y cuyo propósito es interconectar las mismas. ¿Cómo funciona el ruteo? Simple. Supongamos que soy un host conectado a una red determinada: si deseo enviar un paquete a un host en la misma red, me conecto directamente y se lo envío; si en cambio deseo enviar un paquete a un host en otra red, debo enviarle el paquete al host a través del cual me encuentro interconectado a la misma, el cual funciona como router. De la misma forma en la que funciona el correo convencional: si deseo enviar una carta a alguien en mi ciudad, se la envío personalmente; si en cambio necesito enviar una carta a alguien fuera de la ciudad, se la envío al correo (quien se encargará de enviar la carta al destinatario de alguna forma).

En el caso de contar con un servidor conectado a dos o más redes con diferentes puertas de enlace (gateways), tal como se observa en la figura, será necesario configurar rutas estáticas en el mismo (salvo que se esté utilizando algún protocolo de ruteo, como por ejemplo RIP).

Para ver el contenido de la tabla de ruteo (listar rutas) es posible utilizar cualquiera de los siguientes comandos:

route
ip route
netstat -r

Lógicamente es posible utilizar el comando ip route para agregar rutas:

# ip route help
Usage: ip route { list | flush } SELECTOR
       ip route get ADDRESS [ from ADDRESS iif STRING ]
                            [ oif STRING ]  [ tos TOS ]
       ip route { add | del | change | append | replace | monitor } ROUTE
SELECTOR := [ root PREFIX ] [ match PREFIX ] [ exact PREFIX ]
            [ table TABLE_ID ] [ proto RTPROTO ]
            [ type TYPE ] [ scope SCOPE ]
ROUTE := NODE_SPEC [ INFO_SPEC ]
NODE_SPEC := [ TYPE ] PREFIX [ tos TOS ]
             [ table TABLE_ID ] [ proto RTPROTO ]
             [ scope SCOPE ] [ metric METRIC ]
INFO_SPEC := NH OPTIONS FLAGS [ nexthop NH ]...
NH := [ via ADDRESS ] [ dev STRING ] [ weight NUMBER ] NHFLAGS
OPTIONS := FLAGS [ mtu NUMBER ] [ advmss NUMBER ]
           [ rtt TIME ] [ rttvar TIME ] [reordering NUMBER ]
           [ window NUMBER] [ cwnd NUMBER ] [ initcwnd NUMBER ]
           [ ssthresh NUMBER ] [ realms REALM ] [ src ADDRESS ]
           [ rto_min TIME ] [ hoplimit NUMBER ] [ initrwnd NUMBER ]
TYPE := [ unicast | local | broadcast | multicast | throw |
          unreachable | prohibit | blackhole | nat ]
TABLE_ID := [ local | main | default | all | NUMBER ]
SCOPE := [ host | link | global | NUMBER ]
FLAGS := [ equalize ]
MP_ALGO := { rr | drr | random | wrandom }
NHFLAGS := [ onlink | pervasive ]
RTPROTO := [ kernel | boot | static | NUMBER ]
TIME := NUMBER[s|ms]
# man ip

Aunque si se desea que las rutas estáticas sean persistentes será necesario guardarlas en un archivo.

En Red Hat/CentOS las rutas estáticas persistentes para cada interfaz se configuran en archivos /etc/sysconfig/network-scripts/route-interfaz. Por ejemplo, las rutas estáticas para la interfaz eth0 se guardan en el archivo /etc/sysconfig/network-scripts/route-eth0. Estos archivos soportan dos formatos: comandos IP, o directivas network/netmask.

Por ejemplo, supongamos que se desean configurar las rutas estáticas a las redes 192.168.156.0/24 a través de la puerta de enlace 192.168.156.1 y 10.100.12.0/23 a través de la puerta de enlace 10.100.12.1, en la interfaz eth2.

Utilizando comandos IP, crear el archivo /etc/sysconfig/network-scripts/route-eth2 con el siguiente contenido:

192.168.156.0/24 via 192.168.156.1 dev eth2
10.100.12.0/23 via 10.100.12.1 dev eth2

Utilizando directivas network/netmask, crear el archivo /etc/sysconfig/network-scripts/route-eth2 con el siguiente contenido:

ADDRESS0=192.168.156.0
NETMASK0=255.255.255.0
GATEWAY0=192.168.156.1

ADDRESS1=10.100.12.0
NETMASK1=255.255.254.0
GATEWAY1=10.100.12.1

Si fuera necesario agregar más rutas estáticas, repetir las directivas siguiendo la secuencia numérica 2, 3, 5, y asi sucesivamente.

Para mayor información sobre rutas estáticas en CentOS remitirse a la guía oficial: 14.4. Configuring Static Routes.


Tal vez pueda interesarte


Compartí este artículo