Linux – ISC DHCP

por | 13 junio, 2017

¿Qué es ISC DHCP?

Internet Software Consortium. Es un paquete que incluye el servidor y el cliente llamado dhclient. Por tanto dhclient es el  Internet Software Consortium DHCP Client.

Es el que instalan la mayoría de las distribuciones Linux, Originalmente escrito por Ted Lemon, al cual lo mantuvo hasta la Release 3.0. desde 2004 es principalmente mantenido por en el ISC.
Web:      https://www.isc.org/sw/dhcp
Download: https://www.isc.org/downloadables/12

Nota: en algunas distros es llamada como dhcp3-client (para la version 3) simplemente.

 

ISC DHCP INSTALACION

Una vez descargadas las fuentes (también se encuentra paquetaizado en la mayoría de las distribuciones) hacemos:

./configure

Con esto tendremos los Makefiles correctos para compilar. Observamos que tenemos un Makefile en el directorio raiz y otros en distindos subdirectorios, según que queramos instalar todo o parte del paquete. Así si sólo queremos instalar el cliente nos ponemos en el directorio /client y hacemos desde allí el make y el make install correspondiente.

Para instalar todo:

make
make install
Para desinstalar:

make uninstall

DHCLIENT

Cuando arranca dhclient lee el archivo dhclient.conf, obteniendo una lista de interfaces que están configurados en el sistema.
Este archivo de cobnfiguracion puede estar en:

/etc/dhclient.conf
/usr/local/etc/dhclient.conf

Para que dhclient haga el seguimiento de los alquileres de IP tras los reinicios del sistema o del servidor, dhclient gestiona una lista de los alquileres que han sido asignados en el archivo dhclient.leases el cual puede estar ubicado en:
/var/state/dhcp/dhclient.leases
/var/lib/dhclient/dhclient.leases
/var/db/dhclient.leases

según la versión y la distribución.

En el inicio, después de leer dhclient.conf, dhclient lee al archivo dhclient.leases para rcordar qué alquileres fueron dados antes.
Cuando un nuevo alquier de IP es asignado, lo añade al final del archivo dhclient.leases. Cada cierto tiempo (para evita un agrandamiento excesivo del archivo) dhclient crea un nuevo archivo dhclient.leases reescribiebdo la base de datos. Entonces renombra el archivo anterior como
dhclient.leases~ hasta la próxima reescritura.

Los antiguos alguileres de Ip se mantienen guardados para el caso de que el servidor DHCP no está disponible cuando dhclient sea invocado, generalmente durante el arranque inicial del sistema. En ese cado dhclient prueba las IPs que no han vencido primero, y si son válidas se usarán hasta que venza al plazo o el servidor DHCP está disponible.

Cuando dhclient se invoca des de línea de comando sin indicarle un interfaz específico intentará configurar todos los interfaces eludiendo los interfaces no broadcast si es posible. Asimismo es posible indicarle los interfacer a configurar desde el archivo de configuración. Si en cualquier caso se especifican interfaces, sólo ellos serán configurados por dhclient.

DHCLIENT OPCIONES EN LINEA DE COMANDO
-cf config-file  Permite indicarle un archivo de configuración específico.
-4   Usar IP V4 (por defecto).
-6   Usar IP V6.
-p port   Puerto UDP (por defecto el 68).

-d   dhclient trabajará en modo foreground hasta que configure los interfaces
y entonces volverá a modo background indicados(aunque salga del ejecutable).
La opción -d fuerza a dhcliente a trabajar en modo foreground.

-e VAR=value  Cuando se ejecuta dhclient-script, el demonio dhclient crea su propio entorno
para configurar los interfaces. la opción -e permite definir variables de
entorno extras y sus valores.
-q   Incluido por compatibilidad hacia atrás, incica modo silencioso.
-1   Intenta sólo una vez configurar los interfaces. Si falla, sale.
-r
-x
-lf lease-file
pf pid-file   Permite indicar un path específico para el archivo dhclient.pid.
-cf config-file
sf script-file   Permite especificar un path para dhclient-script
-s  server  Servidor al que enviar los mensages antes de adquirir la IP, para debugging sólo
-g relay  Para testing, envía el campo giaddr a la Ip especificada por relay.
-n   No configura ningún interfaz. Normalmente usado con -w.
-nw   Se convierte en un demonioin mediatamente en lugar de esperar a que se haya
adquirido una dirección IP

-w   Hace que dhcliente no salga cuando no encuentra los intrerfaces a configurar.
Util con interfaces hot-swappable por ejemplo.

-v   Muestra por pantalla los mensajes de secuencia. En la versión 3 se mostraban
por defecto pero enla 4 no.

–version  Muestra la versión de dhclient.
ifc0 [ifcn ]  Uno o más interfaces a configurar.
Ejemplos:

# dhclient -cp /etc/dhclient.conf

 

DHCLIENT CONFIGURACION CON DHCLIENT.CONF
dhclient usa un archivo de configuración el cual es leido cuando dhclient es invocado. El archivo se encuentra en el siguiente path por defecto:
/usr/local/etc/dhclient.conf
o tambien en
/usr/local/etc/dhclient.conf

OPCIONES DE DHCLIENT.CONF

*  TEMPORIZADORES

timeout time

Tiempo debe pasar hasta que el cliente decide que el servidor DHCP no está disponible. Una vez transcurrido ese tiempo, dhclient intentará configurar los interfaces usando los alquileres no caducados guardados en el archivo dhclient.leases. Si tampoco puede hacerlo restaurará el protocolo después del tiempo definido por retry. 60 segundos por defecto.

retry time

Determina el tiempo de espera antes de intentar otra vez contactar con el servidor DHCP tras haber sido declarado como no disponible. Por defecto 5 minutos.

select-timeout time

En algunos casos hay entornos en los que hay más de un servidor DHCP asignando direcciones. Este parámetro define el tiempo desde que el cliente envía su primer discovery hasta que envía el siguiente suponiendo que haya recibido antes al menos una oferta de algún servidor. Si no se han recibido ninguna oferta en el tiempo indicado por este parámetro, el cluente acepta la primera oferta que llega. Por defecto 0 segundos, es decir, el cliente aceptará la primera oferta que llegue.

reboot time

El cliente cuando se reinicia intenta adquirir su antigua dirección (estado INIT-REBOOT). Este parámetro define el tiempo que debe esperar en cliente antes de intentar reactivar su antigua dirección IP (antes de intentar descubrir nuevas direcciones). Por defecto este valor es de 10 segundos.     default [ option declaration ] ;
backoff-cutoff time

El cliente usa un algoritmo exponencial backoff para algunos procesos aleatorios, de modo que si muchos cleintyes tratan de configurarse al mismo tiempo no se hagan las solicitudes sincronizadamente. El valor de backoff-cutoff determina la cantidad de tiempo máxima que se permite un cliente volverse desactivada. El valor real se evaluará al azar entre 1/2 a 1 1/2 veces el período de tiempo especificado. El valor por defecto es de dos minutos.
initial-interval time

Es la cantidad de tiempo entre el primer y segundo intento de alcanzar al servidor. Cada vez que se envía un mensaje, el intervalo entre mensajes se incrementa el doble del intervalo actual multiplicado por un número aleatorio entre 0 y 1. Si es mayor que el tiempo de backoff-cutoff, se configura a ese valor. Por defecto es 10 segundos.
*  REQUERIMIENTOS DE ALQUILER Y PETICIONES

* parámetro request

[ also ] request [ [ option-space . ] option ] [, … ];

Los datos que pueden ser específicamente pedidos por el cliente se denominan DHCP Options.

Con las declaración request permite que el cliente pida al servidor DHCP estos valores para las opciones correspondientes. Por defecto se pide la máscara de red, la dirección de broadcast,  time-offset, routers, nombre de dominio, servidores de dominio y nombre de host. Si se indica el parámetro request sin opciones simplemente no se piden estos parámetros y pueden ser sobreescritos en el cliente. En muchos casos es interesante simplemente añadir una opción a las lista previa; para ello usamos ’also request’ con las opciones adicionales.

* parámetro require

[ also ] require [ [ option-space . ] option ] [, … ];

require lista opciones que se deben recibir obligatoriamente para que una oferta DHCP sea aceptada.
* parámetro send

send { [ option declaration ]
[, … option declaration ]}
La declaración send permite al cliente enviar al servidor información específica. No se deberían incluir aquí opciones por defecto. El uso evidente de este parámetro es poder diferenciar entre clientes o clases de clientes.

*  MANEJO DE IP V6

(no incluyo nada de esto)
*  DNS DINAMICO

(no incluyo nada de esto)

*  MODIFICADORES DE OPCION

* parametro default

default [ option declaration ]

La declaración default permite especificas opciones para ser usadas cuando no son suministradas por el servidor.

* parametro supersede

supersede [ option declaration ]

La declaración supersede permite usar al cliente siempre las opciones declaradas localmenmte bajo supersede en lugar de las proporcionadas por el servidor.

* parametro prepend

prepend [ option declaration ]
La declaración prepend permite especificar valores suministrados por nosotros hasta el momento en que son suministrados por el servidor. prepend se puede usar sólo para opciones que admiten más de un servidor.

* parametro append

append [ option declaration ]

La declaración append permite especificar valores que se deberían usar primero siendo suministrador por el servidor. append se puede usar sólo para opciones que admiten más de un servidor.

*  DECRARACIONES DE ALQUILER
lease { lease-declaration [ … lease-declaration ] }

Para redes donde no hay servidor DHCP o BOOTP es posible definir valores fijos cuando el alquiles no funciona. Esto es lo que permite hacer la declaración lease.

La declaración lease también se usa en el archivo dhclient.leases para grabar los alquileres recibidos antes.

Una declaración lease consiste en la palabra lease seguida de un conjunto de declaraciones encerradas entre llaves. Las siguientes declaraciones lease son posibles:

bootp

bootp indica que se utilizará protocolo bootp antes que DHCP.
interface «string»

Se usa para indicar el interface en el que el alquiler es válido. Si predefininos los arrendamientos con lease, el interfaz también se debería especificar, aunque esto no es necesario.
fixed-address ip-address

fixed-address se usa para fijar una IP y se requiere para todas las declaraciones lease.
filename «string»

Especifica el nombre del archivo boot a usar. No se usa por el script de configuración standar pero se incluye por compatibilidad.
server-name «string»

Especifica el nombre del servidor boot para usarlo. Tambien se usa en el script standar de configuracion del cliente.
option option-declaration

Especifica el valor de una opción facilitada por el servidor o, en caso de arrendamientos declarados previamente en dhclient.conf, el valor que el usuario desea que use el script de configuración del cliente si se utiliza el arrendamiento predefinido.
script «script-name»

Permite especificar el path del archivo de script de configuración del cliente dhcp. Este script se usa por el cliente fijar cada configuración inicial de los interfaces antes de pedor la dirección IP. para chequear la dirección una vez ha sido ofertada y para la configuración final del interface una vez que alquiler ha sido adquirido. Si no se adquiere alquiler, el script se usa para testear los alquileres predefinidos, si existen, y también el llamado una vez si no hay un alquiler válido que pueda ser identificado. (ver man dhclient-script)
vendor option space «name»

Se usa para especificar qué espacio de opciones se deben usar para decodificar las vendor-encapsulate-options si alguna se recibe. El dhcp-vendor-identifier se puede usar para solicitar al servidor opciones especiales de un vendedor.
medium «media setup»

Se usa en sistemas donde el interfaz de red no puede determinar automáticamente el tipo de red al que se conecta.
renew date

Define el tiempo en el que el cliente dhcp debería seguir intentando contactar con el servidor para renovar el alquiler que está usando.

rebind date

Define el tiempo en el cual el cliente dhcp debería seguir intentando contactando con el servidor para renovar su alquiler.
expire date

Define el tiempo en el cual el cliente dhcp debe parar de usar un alquiler si no ha sido posible contactar con el servidor para renovarlo.
Estas tres últimas declaraciones se configuran automáticamente cuando se adquiere el alquiler por dhcp, pero deben ser también configurado alquileres predeficidos.

El formato de date es el siguente:

<weekday> <year>/<month>/<day> <hour>:<minute>:<second>
weekday es un número entre cero (comienza en Sunday) y seis.
*  DECRARACIONES DE ALIAS

alias {  declarations … }

Algunos clientes dhcp ejecutando «TCP/IP roaming protocols» pueden requerir que, además de adquirir un arrendameinto vía DHCP, sus interfaces tambien son configurados con un IP alias predefinidos de modo que pueden tener una IP permanente incluso durante el roamming.

*   OTRAS DECLARACIONES
reject cidr-ip-address [, … cidr-ip-address ] ;

Causa que el cliente dhcp rechace ofertas desde el sevidor dhcp. cidr-ip-address puede ser direcciones hosts o de red.

Ejemplo:     reject 192.168.0.0/16, 10.0.0.5;
interface «name» { declarations …  }

Permite hacer declaraciones espacíficas para un interface específico. Estor interfaces deben existir.
pseudo «name» «real-name» { declarations …  }

Permite declarar pseudo interfaces y tener el cliente dhcp adquiriendo una configuración para ese interface.
media «media setup» [ , «media setup», … ];
Define uno o más confoguraciones de medios medios físicos los cuales serán intentados para adquirir una IP. Dhcp lo intentará cíclicamente con todos los medos indicados en la lista.

Ejemplos de dhcp:

timeout 60;
retry 60;
reboot 10;
select-timeout 5;
initial-interval 2;
reject 192.33.137.209;

interface «ep0» {
send host-name «andare.fugue.com»;
send dhcp-client-identifier 1:0:a0:24:ab:fb:9c;
send dhcp-lease-time 3600;
supersede domain-name «fugue.com rc.vix.com home.vix.com»;
prepend domain-name-servers 127.0.0.1;
request subnet-mask, broadcast-address, time-offset, routers,
domain-name, domain-name-servers, host-name;
require subnet-mask, domain-name-servers;
script «CLIENTBINDIR/dhclient-script»;
media «media 10baseT/UTP», «media 10base2/BNC»;
}

alias {
interface «ep0»;
fixed-address 192.5.5.213;
option subnet-mask 255.255.255.255;
}

SERVIDOR DHCPD

dhcpd es el servidor dhcp del ISC (Internet  Systems Consortium).

Los archivos implicados en el funcionamiento de este demonio son:

/usr/sbin/dhcpd
/etc/dhcpd.conf
/var/state/dhcp/dhcpd.leases
/var/run/dhcpd.pid
dhcpd implementa Dynamic Host Configuration Protocol (DHCP) e Internet Bootstrap Protocol (BOOTP).
OPCIONES EN LINEA DE COMANDOS
—————————–

-p Especifica el puerto, por defecto el 67
-f  Ejecuta dhcpd como un proceso foreground
-d Permite generar el log al descriptor
-cf Permite especificar un archivo de configuración
-pf Permite especificar el archvo pid
-lf Permite especficar un archivo lease específico.
-t Hace que se lea sólo el archivo de configuración para test pero no ejecuta ningina operación de red.
-T Igual que -t pero para testear el archivo lease.
-tf Permite especificar un fichero en el cual

-play

he  -tf  and  -play options allow you to specify a file into which the
entire startup state of the server and all  the  transactions  it  pro-
cesses  are  either  logged or played back from.  This can be useful in
submitting bug reports – if you are getting a core dump every so often,
you  can start the server with the -tf option and then, when the server
dumps core, the trace file will contain all the transactions  that  led
up  to it dumping core, so that the problem can be easily debugged with
-play.

The -play option must be specified with an alternate lease file,  using
the  -lf switch, so that the DHCP server doesn’t wipe out your existing
lease file with its test data.  The DHCP server will refuse to  operate
in playback mode unless you specify an alternate lease file.
————————-
OPCIONES DE DHCPD.CONF
————————-

El archivo consta básicamente de una lista de estamentos que pueden ser de dos categorías: parámetros y declaraciones.

Los parámetros indican cómo hacer algo, si hacer algo o qué parámetros proveer al cliente.
Las declaraciones se usan para describir la topología de la red, describir clientes, proveer direccionres que pueden ser asignados a cliente o aplicar un grupo de parámetros a un grupo de declaraciones.

Normalmente en el archivo de configuración tendremos al principio una serie de opciones globales y después declaraciones de tipo subnet, group, etc. Tanto en las opciones globales como en las declaracioes encontraremos parámetros para definir el comportamiento deseado.

Las declaraciones sobre la topología de red son: shared-network Y subnet.
range permita asignar direcciones dinámicamente dentro de una subred (subnet)
host permite asignar direcciiones a clientes específicos
group èrmite asignar parámetros a un grupo de declaraciones.
class
pool

*   pool
———-

La declaracion pool especifica un pool de direcciones que serán tratadas de manera diferente a otro pool de direcciones incluso en el mismo segmento de red. Ejemplo:

subnet 10.0.0.0 netmask 255.255.255.0 {
option routers 10.0.0.254;

# Unknown clients get this pool.
pool {
option domain-name-servers bogus.example.com;
max-lease-time 300;
range 10.0.0.200 10.0.0.253;
allow unknown-clients;
}

# Known clients get this pool.
pool {
option domain-name-servers ns1.example.com, ns2.example.com;
max-lease-time 28800;
range 10.0.0.5 10.0.0.199;
deny unknown-clients;
}
}

*   class
———-
Los clientes pueden ser separados dentro de clases y tratados diferencialmente dependiendo de la clase en que estén. Esta separación puede ser una condición cualquiera o que cuadre con un estamento dentro de la clase.
Ejemplo:

class «ras-clients» {
match if substring (option dhcp-client-identifier, 1, 3) = «RAS»;
}

Note  that  whether  you  use matching expressions or add statements (or both) to
classify clients, you must always write a class declaration for  any  class  that
you  use.    If there will be no match statement and no in-scope statements for a
class, the declaration should look like this:

class «ras-clients» {
}
– Limitar los clientes dentro de la clase:

También es posible especificar un número máximo de clientes en la clase que pueden tomar alquiler. Para ello usamos la palabra clave lease limit. Ejemplo:
class «limited-1» {
lease limit 4;
}

– clases spawning

Una clase spawning es aquella que automáticamente produce subclases basandose en lo que el cliente envía. La razón de la existencia del spawning es crear alquileres limitados a la clase al vuelo. Por ejemplo:
class «customer» {
spawn with option agent.circuit-id;
lease limit 4;
}

*   subclass
————–

Tambien es posible definir subclases. Una subclase es una clase con el mismo nombre que la clase regular pero con un una subcondición específica de concordancia el cual es gestionado para una mayor rapidez. Las subclases se justifican por rapidez. Entre cinco clases y una clase con cinco subclases equivalentes, éstda úlima será más rápida.

Ejemplo:

class «allocation-class-1» {
match pick-first-value (option dhcp-client-identifier, hardware);
}

class «allocation-class-2» {
match pick-first-value (option dhcp-client-identifier, hardware);
}

subclass «allocation-class-1» 1:8:0:2b:4c:39:ad;
subclass «allocation-class-2» 1:8:0:2b:a9:cc:e3;
subclass «allocation-class-1» 1:0:0:c4:aa:29:44;

subnet 10.0.0.0 netmask 255.255.255.0 {
pool {
allow members of «allocation-class-1»;
range 10.0.0.11 10.0.0.50;
}
pool {
allow members of «allocation-class-2»;
range 10.0.0.51 10.0.0.100;
}
}

Las subclases pueden ser declaradas con o sin ámbito.
subclass «allocation-class-2» 1:08:00:2b:a1:11:31 {
option root-path «samsara:/var/diskless/alphapc»;
filename «/tftpboot/netbsd.alphapc-diskless»;
}
en este ejemplo se usa la subclase como una manera de controlar básicamente la asignación para un cliente que necesita unos parámetros de configuración.

* Actualizaciones dinámicas dns (DYNAMIC DNS UPDATES)
El servidor dhcp tiene la capacidad de actualizar dinámicamente al Sistema de Nombres de Dominio. Podemos definir cómo queremos que sea actualizado el sistema DNS. Estar actualizaciones se basa en el standard RFC 2136 así que cualquier servidor dns que lo soporte debería aceptar las actualizaciones desde el servidor. Existen actualmente dos sistemas implementados:
– ad-hoc
– interin
El comando para seleccionar el modo es:

ddns-update-style

No se discute los mecanismos de actualización ddns.

PARÁMETROS:

* Listas de permisos (keyword permit y deny)

Si un pool tiene una lista permit sólo los clientes que cuadran con la entrada especificada serán elegibles para asignarles direcciones. Si un pool tiene una lista deny sólo los clientes que no cuadran con ninguna entrada en la lista deny serán elegibles para asignarles direcciones.

(ver ejemplo de pool antes)
*   Subnets

Permite indicar los rangos en los cuales el servidor va a dar servicio. Dentro de cada subred se puden asignar uno o mas rangos con la palabra range. Ejemplos:

subnet 239.252.197.0 netmask 255.255.255.0 {

}
subnet 239.252.197.0 netmask 255.255.255.0 {
range 239.252.197.10 239.252.197.107;
range 239.252.197.113 239.252.197.250;
}
*   Lease Lengths

Los alquireres dhcp pueden ser asignamos desde 0 hasta infinitos segundos. Se pueden especificar dos lease lengths, la default lease length la cual se adignará si el cliente no pide una lease length específica, y un máximo lease length. Ejemplos:
subnet 239.252.197.0 netmask 255.255.255.0 {
range 239.252.197.10 239.252.197.107;
default-lease-time 600;
max-lease-time 7200;
}

* Soporte BOOTP

Cada cliente BOOTP debe ser específicament declarado en el archivo dhcpd.conf. Una manera básica de hacer esto es que la declaración incluya la dirección MAC del cliente y la IP asignada para ese cliente. Si el cliente necesita leer un archivo de imagen desde el servidor (mecanismo tftp) tambien se puede especificar el nombre de archivo. Ejemplo:
host haagen {
hardware ethernet 08:00:2b:4c:59:23;
fixed-address 239.252.197.9;
filename «/tftpboot/haagen.boot»;
}
* Options

dhcp provee un mecamismo por el cual el servidor provee al cliente información a cerca de cómo configurar sus interfaces de red y también de cómo el cliente puede acceder a varios servicios de red, como DNS, routers, etc. Estas opciones pueden ser especificadas por subredes y/ por cliente. En el caso de que estén deficidas de las dos maneras, la declaraciój por cliente tiene preferencia. Ejemplo:
subnet 239.252.197.0 netmask 255.255.255.0 {
range 239.252.197.10 239.252.197.250;
default-lease-time 600 max-lease-time 7200;
option subnet-mask 255.255.255.0;
option broadcast-address 239.252.197.255;
option routers 239.252.197.1;
option domain-name-servers 239.252.197.2, 239.252.197.3;
option domain-name «isc.org»;
}
* OMAPI

OMAPI es un API para manipular objetos externos que provee algunos cambios de confuguració mientras se ejecuta el servidor sin tener que pararlo, modificando su base de datos y reiniciándolo. Los clientes OMAPI se conectan al servidor mediante tcp/ip, se autentifican y entonces pueden pueden examinar su estado y hacer cambios en él.

(ver man dhcpctl y man de omapi)

 

 

 

 

 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *