20110507

DHCPD: Ruteo estático sin clase. DHCPD: Classless Static Routing

Como todo sysadmin que se precie persigo la máxima de trabajar lo menos posible. Esto no es que me pase todo el día con la mano en el suspensorio, sino que intento simplificar/automatizar el funcionamiento de los sistemas y la red tanto como puedo. El DHCP es uno de esos servicios que te facilitan esta tarea y no se me ocurre ningún motivo para no utilizarlo.

La cosa es que como en cualquier red con un tamaño relativamente grande, los clientes DHCP necesitan acceder a múltiples destinos de red que no pueden ser alcanzados desde la puerta de enlace o gateway por defecto, por lo que aquí es donde empieza el post de hoy.
Añadir la puerta de enlace y alguna regla de ruteo a la configuración DHCP es algo sencillo y muy documentado. El problema se presenta cuando necesitas utilizar enrutamiento estático sin clase. 
Supongamos que la default gateway es la dirección 192.168.1.1 y que tenemos otra gateway para llegar a otros servicios, la 192.168.1.2. Ahora supongamos que queremos que llegar a la dirección 192.168.50.25 desde esta segunda gateway y configurar eso en nuestro servidor DHCP. Eso sería tan fácil como añadir las líneas:
option static-routes 192.168.50.25 192.168.1.2;
option routers 192.168.1.1;

dentro de la sección que nos interese.
El problema se presenta si lo que buscamos es llegar por ejemplo a la red 192.168.20.0/24 a través de una gateway que no sea la default. No podemos añadir una línea option static-routes como la anterior por cada una de las direcciones de la red de dicha red ya que el mantenimiento sería un coñazo y entraría en conflicto con la máxima ya mencionada.
La solución a esto es añadir la siguiente configuración en nuestro archivo /etc/dhcpd.conf:
## Classless Static Routing definitions
   # Para los SO que cumplen la RFC3442
    option rfc_routes code 121 = array of integer 8;
    # Para los SO que NO cumplen la RFC3442 (M$)
    option no_rfc_routes code 249 = array of integer 8;

## Classless Static Routing
 # Para los SO que cumplen la RFC3442
 option rfc_routes 32,     0,  0,  0,  0,     192,168,  1,  1,
                   32,   192,168, 50, 25,     192,168,  1,  2,
                   24,   192,168, 20,         192,168,  1,  2;
 # Para los SO que NO cumplen la RFC3442 (M$)
 option no_rfc_routes 32,     0,  0,  0,  0,     192,168,  1,  1,
                      32,   192,168, 50, 25,     192,168,  1,  2,
                      24,   192,168, 20,         192,168,  1,  2;

Bastaría con reiniciar el servicio DHCPd y recargar la configuración de red de nuestra máquina obteniendo el resultado esperado.

IMHO every sysadmin should try to work as less as possible. It doesn't mean wasting your time doing nothing but trying to save time everytime you can. To achieve this objetive is usually a good practice to use automated tasks and proccess, and this is the main reason I use DHCP.
To configure this service is quite simple, but sometimes you'll bump into more complex networks as in my case.
With DHCP you'll be able to configure your clients' default gateway and some basic routing rules like in the following case. Suppose you have two gateways, one as the default and other as a gateway to other host.
local network: 192.168.1.0/24
default gateway: 192.168.1.1
secondary gateway: 192.168.1.2
remove host: 192.168.50.25

So your DHCP configuration in your /etc/dhcpd.conf file will include the following lines:
option static-routes 192.168.50.25 192.168.1.2;
option routers 192.168.1.1;

into the section you need.
But if your needs are more complex the DHCP config is too. Suppose now you have the same network but also you have to configure your DHCP clients to route the packets to the 192.168.20.0/24 network via the 192.168.1.2 gateway.
local network: 192.168.1.0/24
default gateway: 192.168.1.1
secondary gateway: 192.168.1.2
remove host: 192.168.50.25
remote network: 192.168.20.0/24

So your DHCP configuration in your /etc/dhcpd.conf file will include the following lines:
## Classless Static Routing definitions
   # Para los SO que cumplen la RFC3442
    option rfc_routes code 121 = array of integer 8;
    # Para los SO que NO cumplen la RFC3442 (M$)
    option no_rfc_routes code 249 = array of integer 8;

## Classless Static Routing
 # Para los SO que cumplen la RFC3442
 option rfc_routes 32,     0,  0,  0,  0,     192,168,  1,  1,
                   32,   192,168, 50, 25,     192,168,  1,  2,
                   24,   192,168, 20,         192,168,  1,  2;
 # Para los SO que NO cumplen la RFC3442 (M$)
 option no_rfc_routes 32,     0,  0,  0,  0,     192,168,  1,  1,
                      32,   192,168, 50, 25,     192,168,  1,  2,
                      24,   192,168, 20,         192,168,  1,  2;

Now you only have to restart your DHCP server and reload your DHCP clients network configuration to get the expected result.
Enjoy it!
PS. I know, I know. My English is not good enought but, the more you help me, the more I learn.

No hay comentarios: