Introducción
Una de las posibilidades que nos ofrece Linux es la de poder actuar como enrutador, es decir, decidir la ruta de los paquetes que reciba por cualquiera de sus interfaces de red. En este documento veremos un ejemplo de configuración básica fácilmente generalizable.
Arquitectura de red
Supongamos el siguiente caso: disponemos de un servidor Linux ejecutándose sobre una máquina con dos tarjetas de red (servidor.es), que deseamos que actúe como router uniendo dos redes según el siguiente esquema:
Deberemos permitir que la máquina 5.0.0.1 acceda a la red 192.168.133.0 a través de servidor.es, pasando por el router dedicado; asimismo, deberemos permitir que los paquetes provenientes tanto de la red 192.168.133.0 como de la 192.168.0.0 puedan acceder a la red 5.0.0.0.
Compilando el núcleo
El primer paso consiste en compilar el núcleo usando las opciones adecuadas. La explicación del proceso queda fuera de los objetivos del presente documento y se aconseja que se consulte el HOWTO correspondiente en caso de duda. En este apartado nos dedicaremos tan solo a indicar cuales deben ser las opciones que deberemos marcar para permitir a Linux actuar como Router.
Tras realizar un make menuconfig (o config, o xconfig...), en un núcleo 2.4.X, deberemos acceder al apartado Networking Options, y seleccionar la siguiente opción
IP: Advanced Router: Esta es la opción que va a permitir al sistema enrutar los paquetes. Para que funcione, deberemos introducir el siguiente comando:
echo '1' > /proc/sys/net/ipv4/ip_forward
Para que en un sistema Debian esto se haga automáticamente en el arranque, deberemos modificar a yes el valor de la opción ip_forward del fichero /etc/network/options.
Como resultado de esta selección, aparecerán nuevas opciones, entre las que elegiremos las que más nos convengan, consultando su ayuda correspondiente. Sería buena idea seleccionar IP: use TOS value as routing key para poder enrutar según el tipo de servicio (puerto) del paquete, y IP: verbose route monitoring para poder ver los errores a través del demonio del sistema klogd. Es conveniente consultar el resto de subapartados de advanced router para poder escoger aquellos que se adapten a nuestras necesidades.
Tras seleccionar las opciones compilamos el núcleo de la forma habitual.
Configurando las interfaces de red
Tal como hemos descrito en la arquitectura de red anterior, servidor.es dispone de dos tarjetas de red (dos interfaces Ethernet, que en un sistema linux son denominados eth0 y eth1). Deberemos configurar estos interfaces dotándoles de una dirección IP, una máscara de red, etc, pero de forma estática, consiguiendo de esta forma que cada vez que se arranque el equipo la configuración permanezca. Para ello deberemos modificar el contenido de algunos ficheros, cuya ubicación y sintaxis será distinta dependiendo de la distribución que estemos utilizando. En este documento explicaremos la ubicación y sintaxis de dichos archivos para sistemas Debian y RedHat.
Los primeros archivos que podemos modificar son /etc/hosts y /etc/networks, teniendo ambos la misma forma en las dos distribuciones comentadas. En el archivo hosts especificamos los nombres de las máquinas (puede ser interesante poner nombres de máquinas que vayamos a incluir en nuestra tabla de rutas, para que al mostrar su contenido no se tenga que utilizar ningún servicio dns y sea más rápido). En cada línea especificamos la ip de una determinada máquina y uno o más nombres para esa máquina separados por tabuladores. El archivo networks tiene la misma estructura, pero en este caso definimos nombres para redes, no para máquinas concretas.
Debian:
La configuración de las interfaces de red la encontramos en /etc/network/interfaces. Para cada interfaz podemos indicar su dirección IP, su máscara de red, así como su dirección de red y de broadcast. Opcionalmente podemos especificar algún router por defecto. En nuestro caso particular el archivo debería tener el siguiente contenido:
#El interfaz loopback
auto lo
iface lo inet loopback
address 127.0.0.1
netmask 255.0.0.0
network 127.0.0.0
broadcast 127.255.255.255
#Tarjetas Ethernet
auto eth0
iface eth0 inet static
address 192.168.0.2
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.1
auto eth1
iface eth1 inet static
address 5.0.0.2
netmask 255.255.255.0
network 5.0.0.0
broadcast 5.0.0.255
gateway 5.0.0.1
Red Hat:
En un sistema Red Hat la configuración de las tarjetas de red puede ser un poco más enrevesado, porque la información no se encuentran centralizada en un solo archivo como en el caso de Debian. Concretamente deberemos tener un archivo /etc/sysconfig/network-scripts/ifcfg-xxx (donde xxx sería el nombre de la interfaz) por cada una de las interfaces. Por ejemplo, en el caso de eth0, y siguiendo con nuestro ejemplo, en servidor.es tendríamos que tener el siguiente archivo /etc/sysconfig/network-scripts/ifcfg-eth0:
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.0.2
NETMASK=255.255.255.0
ONBOOT=yes
Debemos tener en cuenta que dentro del directorio /etc/sysconfig/network-scripts podremos tener tantos archivos de estos como deseemos (uno por cada interfaz), pero para que el script de arranque correspondiente active la interfaz deberemos incluir la línea de ONBOOT indicada.
El gateway por defecto debemos indicarlo en el archivo /etc/sysconfig/network.
Configurando las rutas

Por último debemos especificar las rutas que deseamos utilizar. Para ello podemos utilizar el comando route. La explicación de su funcionamiento queda fuera de los objetivos de este documento, pero podremos encontrar gran cantidad de información sobre su uso en las propias páginas de man..
Supongamos que tenemos servidor.es usando Debian, y sus interfaces de red están configurados tal como se ha descrito en el punto anterior. Tras arrancar la máquina y ejecutar route podremos ver que las rutas hacia las redes 192.168.0.0 y 5.0.0.0, así como hacia las máquinas 192.168.0.1 y 5.0.0.1 ya están definidas (el script de inicio sacó esta información de los archivos de configuración). Tan solo nos faltaría por asegurar una ruta a la red 192.168.133.0 a través del router situado en 192.168.0.1. Para usar una máquina como gateway, deberemos crear una ruta hacia dicha máquina. En este caso lo podemos hacer de la siguiente forma:
route add 192.168.0.1 eth0
Ahora ya podremos especificar la ruta que necesitamos:
route add -net 192.168.133.0 netmask 255.255.255.0 gw 192.168.0.1 dev eth0
Sin embargo, si solo utilizamos route deberíamos repetir todo el proceso cada vez que arranquemos el sistema. Es por ello que debemos especificar las rutas estáticamente para que sean establecidas en cada arranque. De nuevo, y dependiendo de la distribución, la configuración de las rutas tendrá una ubicación u otra. En Red Hat debemos incluirlas en el fichero /etc/sysconfig/static-routes, el cual tiene la siguiente sintaxis:
net
netmask [netmask] gw
por ejemplo: eth0 net 192.168.133.0 netmask 255.255.255.0 gw 192.168.0.1
En Debian podremos utilizar la opción up comando dentro del archivo /etc/network/interfaces (man interfaces). En ese caso, y siguiendo con nuestro ejemplo, el archivo quedaría de la siguiente forma:
#El interfaz loopback
auto lo
iface lo inet loopback
address 127.0.0.1
netmask 255.0.0.0
network 127.0.0.0
broadcast 127.255.255.255
#Tarjetas Ethernet
auto eth0
iface eth0 inet static
address 192.168.0.2
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.1
up route add 192.168.0.1 eth0 || true
up route add -net 192.168.133.0 netmask 255.255.255.0 gw 192.168.0.1 dev eth0 || true
auto eth1
iface eth1 inet static
address 5.0.0.2
netmask 255.255.255.0
network 5.0.0.0
broadcast 5.0.0.255
gateway 5.0.0.1
(Si un comando up no se ejecuta correctamente no se ejecutarán tampoco los siguientes. Para evitar esto podemos incluir '|| true' al final de cada uno de estos comandos).
Otra opción, tanto en un sistema como en otro es incluir los comandos route dentro de algún script de inicio.
COMENTAR NO CUESTA NADA, MUCHAS GRACIAS...
Fuente original: http://www.alu.ua.es/p/psp4/Documentacion/Noviembre_2001/linux_router.html