Professional Documents
Culture Documents
DHCP (Dynamic Host Configuration Protocol) son las siglas que identifican a un protocolo empleado para que
los hosts (clientes) en una red puedan obtener su configuración de forma dinámica a través de un servidor del
protocolo. Los datos así obtenidos pueden ser: la dirección IP, la máscara de red, la dirección de broadcast, las
características del DNS, entre otros. El servicio DHCP permite acelerar y facilitar la configuración de muchos
hosts en una red evitando en gran medida los posibles errores humanos.
Con una función similar a la del DHCP, pero con algunas restricciones, existe el BOOTP o Internet Bootstrap
Protocol, el cual permite también la asignación de la configuración de red en forma dinámica pero a partir de su
definición estática para cada cliente en una base de datos en el servidor. Esta información a diferencia de como
se hace usualmente con DHCP no puede ser renovada.
Básicamente el servicio DHCP/BOOTP funciona de la siguiente forma. Existe un programa servidor en un host
de la red que escucha las solicitudes de los clientes y que en su configuración almacena tablas de posibles
direcciones IP a otorgar además del resto de la información. Cuando un cliente requiere del servicio envía una
solicitud en forma de broadcast a través de la red. Todos los servidores alcanzados por la solicitud responden al
cliente con sus respectivas propuestas, este acepta una de ellas haciéndoselo saber al servidor elegido, el cual le
otorga la información requerida. Esta información se mantiene asociada al cliente mientras este no desactive su
interfaz de red (posiblemente porque se apague la máquina) o no expire el plazo del ``contrato'' (lease time). El
plazo del ``contrato'' o renta es el tiempo en que un cliente DHCP mantiene como propios los datos que le otorgó
un servidor. Este se negocia como parte del protocolo entre el cliente y el servidor. Una vez vencido el plazo del
contrato el servidor puede renovar la información del cliente, fundamentalmente su dirección IP, y asignarle otra
nueva o extender el plazo, manteniendo la misma información. El cliente puede solicitar también la renovación o
liberación de sus datos.
Figura: Representación simplificada del protocolo DHCP
A continuación se listan los principales mensajes que se intercambian como parte del protocolo DHCP y para
que se emplea cada uno:
Un servidor de DHCP puede identificar a cada cliente a través de dos formas fundamentales:
Aunque la idea central del servicio DHCP es la dinamicidad de las direcciones IP asignadas no se excluye la
posibilidad de utilizar direcciones fijas para algunos hosts que por sus características lo requieran, ejemplo de
ello son las máquinas proveedoras de disímiles servicios como el correo electrónico o el DNS. Este tipo de host
utilizaría las ventajas del servicio para obtener el resto de los datos que se pueden proveer mediante DHCP.
En Linux la implementación del servidor de DHCP y de BOOTP la mantiene la ISC (Internet Software
Consortium). Esta se empaqueta en la distribución Red Hat bajo el nombre dhcp. Existen además otros dos
paquetes asociados a este servicio que implementan la parte cliente: pump y dhcpcd.
En las secciones siguientes se explicará como adecuar una estación de trabajo para que obtenga su configuración
de red a través de DHCP y como instalar y configurar un servidor de DHCP.
Subsecciones
Como puede apreciarse el fichero sólo consta de un conjunto de asignaciones a variables que expresan la
configuración total de la interfaz correspondiente. En este caso para una interfaz de red estática se le asigna a
BOOTPROTO el valor static. Para el caso de que se fuera a emplear DHCP sería dhcp y para BOOTP, bootp. En
ambos casos los valores de IPADDR, NETMASK y GATEWAY serían ignorados, ya que estos se toman a partir del
servidor de los protocolos.
Una vez modificada la configuración se debe reiniciar la interfaz de red. Esto se puede hacer de múltiples
formas. A continuación se muestran dos de ellas suponiendo que se trabaja sobre la interfaz eth0:
1-.
Ejecutando el script /etc/rc.d/init.d/network6.1. Ejemplo:
# service network reload
2-.
Utilizando los comandos ifup e ifdown. Ejemplo:
# ifdown eth0
# ifup eth0
Luego se puede observar el resultado ejecutando el comando ifconfig pasándole como argumento el nombre de
la interfaz.
Para configurar las interfaces de red también se pueden utilizar algunas herramientas que se encargan
transparentemente de modificar los ficheros antes mencionados y en algunos casos de reiniciar la interfaz de red
alterada. Ejemplo de ellas son: netconfig (interfaz texto), netcfg (interfaz gráfica) y netconf (interfaz texto y
gráfica en dependencia del entorno de trabajo).
Como se mencionó anteriormente existen dos clientes de DHCP/BOOTP para Red Hat: pump y dhcpcd. Se
explicará pump que es el utilizado por defecto en el caso de Red Hat 7.1. Aunque puede ser invocado
manualmente, pump es un daemon que normalmente se inicia automáticamente si existe alguna interfaz
configurada para usar DHCP o BOOTP.
-i <device>
: para especificar la interfaz de red referenciada.
-k
: termina el daemon y deshabilita todas las interfaces asociadas
-r
: libera la interfaz
-R
: fuerza la renovación de la información contratada
-s
: muestra el estado de las interfaces
-l <time>
: especifica en horas el tiempo solicitado por el cliente dado el cual expira el contrato de su información
Ejemplos:
# pump -i eth0 -l 72
# pump -s
Device eth0
IP: 192.168.100.50
Netmask: 255.255.255.0
Broadcast: 192.168.100.255
Network: 192.168.100.0
Boot server 192.168.100.2
Next server 0.0.0.0
Gateway: 0.0.0.0
Renewal time: Fri Apr 6 02:50:05 2001
Expiration time: Fri Apr 6 11:50:05 2001
# pump -r
Configuración del servidor de DHCP
El servidor de DHCP es el daemon dhcpd el cual una vez instalado y configurado se puede manipular con el
script del mismo nombre en el directorio /etc/rc.d/init.d. Ejemplos:
La configuración del servicio se hace a través del fichero /etc/dhcpd.conf. En este se designan
fundamentalemente los rangos de direcciones IP a otorgar de acuerdo a las subredes definidas, así como el resto
de los campos que se asignan a través del servicio a los clientes. Una vez iniciado, dhcpd lee este fichero y
almacena en memoria una lista de las direcciones disponibles en cada subred. Cuando un cliente solicita
mediante el protocolo DHCP una dirección, el servidor le hace una propuesta incluyendo en ella el tiempo del
contrato, si el cliente acepta entonces se establecerá el contrato que expirará una vez alcanzado el tiempo
indicado por el administrador en la configuración, y que por defecto es de un día.
Antes de que el contrato expire el cliente tratará de renovarlo para continuar usando la dirección otorgada. Una
vez expire el contrato el cliente no podrá usar más esta información.
Con el objetivo de recordar los contratos establecidos, siempre que reinicie el sistema o se renueve el servicio,
dhcpd almacena estos en forma de base de datos en un fichero nombrado dhcpd.leases y que se guarda en el
directorio /var/lib/dhcp. Siempre que dhcpd vaya a establecer un contrato con un cliente almacena una
entrada en este fichero y se asegura de que esta información sea realmente transferida (flush) al fichero. Esto
permite que aunque el sistema aborte por un motivo u otro, siempre que reinicie dhcpd podrá recordar los
contratos establecidos previamente, lo cual hará después de leer su fichero de configuración.
El fichero de contratos tiene un formato de texto ASCII y contiene todas las declaraciones de los contratos
efectuados. Siempre que un contrato se establezca, se renueve o expire se genera una nueva entrada al final del
fichero. Por tanto si aparece más de una entrada para un mismo contrato se asume como válida la que se
encuentre más cercana al final del fichero. Cuando se instala dhcpd normalmente no existe la base de datos de
contratos, sin embargo esta es imprescindible para que el servicio inicie adecuadamente. Por ello se debe crear el
fichero vacío de esta forma (o de otra):
# touch /var/lib/dhcp/dhcpd.leases
Para prevenir que el fichero de contratos crezca indefinidamente, cada cierto tiempo todos los contratos
conocidos son trasladados hacia otro con el nombre dhcpd.leases~, y entonces se comienzan a almacenar los
nuevos contratos en el fichero principal. Si durante este proceso el sistema y/o el servicio abortan puede que no
se llegue a generar el nuevo fichero principal, en cuyo caso se requerirá de crearlo manualmente para que el
servicio pueda reiniciar correctamente.
• starts <fecha>;
• ends <fecha>;
Especifican las fechas de comienzo y final del contrato. Estas fechas poseen el siguiente formato:
W YYYY/MM/DD HH:MM:SS
Donde:
o W - es el día de la semana. Sólo se utiliza para que la fecha sea más comprensible para los
humanos. Se especifica con números entre 0 y 6 donde el 0 se corresponde con el domingo.
o YYYY/MM/DD - es la fecha formada por el año, que se expresa con cuatro dígitos, el mes, que oscila
entre 1 y 12, y el día que lo hace entre 1 y 31.
o HH:MM:SS - representa el tiempo formado por la hora que se moverá en el rango de 0 a 23, y los
minutos y segundos, que lo harán de 0 a 59.
Las fechas se especifican a partir del uso horario de Greenwich (GMT : Greenwich Mean Time) y no del
tiempo local. Para obtener la hora de Greenwich se puede ejecutar $ date -u.
Ejemplos:
• uid <identificador>;
Es otro parámetro que permite identificar al cliente.
Ejemplo:
uid "hada+fn.fwf:m0-r45j9wfn4-2554k5";
client-hostname "deltha.disaic.cu";
hostname "gandalf";
• abandoned;
Esta sentencia se emplea para indicar que una dirección está siendo mal usada debido a que el cliente que
la poseía la abandonó o que el servidor al tratar de reasignar dicha dirección descubrió que estaba siendo
utilizada por un cliente no autorizado. Las direcciones abandonadas son reasignadas cuando ya no
quedan direcciones libres disponibles.
y los parámetros:
[option] <nombre del parámetro> [valores];
Los parámetros que comienzan con la palabra reservada ``option'' describen aquellos datos que brinda el
servidor al cliente como parte del protocolo, y los que no, describen las características del servidor de DHCP.
A continuación se describen las sentencias declarativas:
• shared-network : permite agrupar un conjunto de subredes que compartan la misma red física. El único
atributo de esta sentencia es un nombre que sólo se utiliza para las trazas del servicio.
Sintaxis:
• shared-network <nombre> {
• [parámetros]
• [declaraciones]
• }
• subnet : permite agrupar las características globales que van a tener los clientes de una misma subred.
Sintaxis:
• subnet <dirección de red> netmask <máscara de red> {
• [parámetros]
• [declaraciones]
• }
• range : permite definir un rango de direcciones IP a otorgar a clientes pertenecientes a una subred. Toda
declaración tipo subnet debe tener asociada una declaración range en la cual se especifique las
direcciones IP mínima y máxima. Si se especifica el atributo dynamic-bootp se indica que estas
direcciones se pueden asignar también a clientes BOOTP. Cuando se especifica una sola dirección IP se
omite la dirección máxima.
Sintaxis:
• range [dynamic-bootp] <dirección IP mínima> [dirección IP máxima]
• host : permite describir aquellos hosts que tengan una dirección fija. Todos los clientes que usan
BOOTP deben tener asociada una sentencia host. Un cliente se corresponde con una declaración host si
la opción dhcp-client-identifier indicada en la declaración posee el valor del identificador que
brinda el cliente a través del protocolo. De no ser así entonces se emplearía la dirección MAC del cliente
especificada a través de el atributo hardware.
Sintaxis:
•
• host <hostname> {
• [parámetros]
• [declaraciones]
• }
• group : permite agrupar a otras declaraciones para aplicarles varios parámetros comunes. Puede ser
utilizada para agrupar hosts, subredes, redes compartidas y otros grupos.
Sintaxis:
• group {
• [parámetros]
• [declaraciones]
• }
Entre los parámetros que se le pueden otorgar a un cliente a través del protocolo y que van precedidos por la
palabra ``option'', se encuentran:
• option domain-name <domain name>;
Indica el nombre del dominio que empleará el cliente.
• option domain-name-servers <ip address> [, <ip address> ... ];
Indica los servidores de nombres de dominio a emplear por el cliente.
• option host-name <hostname>;
Indica el nombre que empleará el host cliente.
• option subnet-mask <ip address>;
Indica la máscara de red que se le asignará al cliente.
• option routers <ip address> [, <ip address> ... ];
Indica las direcciones IP de los routers (gateway) que empleará el cliente.
• option broadcast-address <ip address>;
Indica la dirección de broadcast que utilizará el cliente.
• option dhcp-client-identifier <string>;
Indica el identificador que puede emplear el cliente como alternativa a su dirección MAC.
Ejemplo:
authoritative;
option domain-name "disaic.cu";
option domain-name-servers 192.168.100.2, 192.168.200.3;
shared-network disaic {
server-name clio;
default-lease-time 604800; # 7 días
min-lease-time 86400; # 1 día
max-lease-time 864000; # 10 días
option subnet-mask 255.255.255.0;
option routers 192.168.100.1;
Gracias a que el espacio de nombres de dominio tiene estructura arbórea sólo es necesario por parte del servidor
de nombres conocer un punto de este árbol: los nombres y los números IP de los servidores de nombre del
dominio raíz (servidores raíces).
De esta forma cualquier servidor de nombres para resolver un nombre determinado (o realizar otro tipo de
consulta) sólo necesitará conocer algún servidor raíz y consultarlo. Este referirá la dirección del servidor del
subdominio correspondiente (dominio de primer nivel), el cual a su vez puede referir a otro servidor y así
sucesivamente se va completando el proceso de resolución que puede concluir exitosamente o no.
Figura: Proceso de resolución del nombre www.chips.ibm.com
La figura muestra el proceso de resolución del nombre www.chips.ibm.com. En esta se aprecia como el
servidor de nombres interrogado consulta a su vez a todos los servidores autorizados para cada uno de los
dominios que contienen al nombre de dominio en cuestión.
Existen servidores de nombres que sólo realizan cachè. Estos no son autoritarios de ninguna zona. Lo único que
hacen es guardar en su cachè las respuestas que le dan otros servidores cada vez que son consultados.
Los servidores de nombres no deben almacenar en sus cachès la información a la que acceden por un tiempo
indefinido, pues entonces sería imposible la actualización de esta una vez sea cambiada en los servidores
autorizados para ello. Es por eso que a cada dato de un dominio se le asocia por parte de su administrador un
tiempo de vida o TTL (Time To Live), dado el cual cualquier servidor que lo tenga almacenado en su cachè debe
volver a interrogar al servidor autorizado de la zona a la que pertenece el dato.
Para decidir el tiempo de vida de cada dato en un dominio hay que establecer que importa más: la consistencia o
el rendimiento. Un TTL pequeño permitirá que la información sea consistente casi siempre, pues los datos
expirarán rápidamente obligando a descargarlos del cachè y a obtener los nuevos valores de los servidores
autorizados. En cambio producirá un mayor número de consultas a través de la red y esto empeorará el
rendimiento del servidor y extenderá a su vez el tiempo promedio de resolución. La situación inversa, un TTL
grande, mejorará el desenvolvimiento de los servidores y acortará el tiempo del proceso de resolución, pero
puede provocar que la información se mantenga inconsistente durante mucho tiempo.
Como dato curioso se puede decir que el servidor del dominio raíz operado por la ISC (Internet Software
Consortium), f.root-servers.net responde más de 272 millones de consultas por día. De hecho es el servidor de
DNS más cosultado en Internet. Opera a través de dos procesadores Compaq ES40 AlphaServer a 4500MHz y
con 8GB de RAM. El software empleado es el ISC BIND 8.2.3.
A cada nombre de dominio en el DNS se le pueden asociar varias informaciones. Para los nombres de dominio
asociados a un host, la principal información es su número IP, pero también se le pueden hacer corresponder
varios alias, indicar una descripción de la máquina (procesador y sistema operativo), etc. Para todos los nombres
de dominio, estén o no asociados a un host, se puede especificar el redireccionamiento del correo dirigido a estos
hacia un determinado sistema conocido como Mail Exchanger.
Todos estos tipos de datos se conocen como Resource Records (RR) y se asocian a los nombres de dominios.
Los records se dividen en clases. Cada clase representa un tipo de red o software. Actualmente hay clases para
internets (cualquier red basada en TCP/IP), redes basadas en el protocolo Chaosnet y redes que usan el programa
Hesiod. De ellas la más popular y de hecho la única que usaremos en nuestros contextos, es la clase internet.
Los records también pueden ser de varios tipos en correspondencia con la información que almacenan, tal y
como se ejemplificó anteriormente.
Si se utilizan tablas de hosts (fichero /etc/hosts en Linux) la traducción de direcciones a nombres es trivial
pero, de acuerdo a como hemos visto que se estructura el DNS hasta el momento, dicha traducción se vuelve
imposible debido a que es necesario explorar todo el espacio de nombres para encontrar un número IP
determinado y su nombre equivalente. Es por ello que se le adiciona una parte especial al espacio de nombres de
dominio. En esta parte conocida como dominio in-addr.arpa se utilizan las direcciones en lugar de los nombres
para identificar los dominios. Las direcciones o números IP se expresan en el formato de cuatro números entre 0
y 255 separados por puntos. En la figura se representa la forma de este dominio especial donde se encuentran
todas las posibles direcciones IP y sus equivalentes en nombres. En este caso se ejemplifica con un host
hipotético de nombre www.linux.disaic.cu con dirección IP 30.60.120.240.
Rápidamente se pueden apreciar una diferencia fundamental entre el espacio de nombres de dominios y el
dominio especial arpa, pues en arpa los nombres de dominio completos se expresan de forma invertida a como
se hace en las direcciones IP. Para el caso hipotético anterior el nombre de dominio arpa del host sería
240.120.60.30.arpa.in-addr. Debido a esto se puede apreciar que aunque ambas estructuras son jerárquicas las
direcciones IP siempre son más específicas de izquierda a derecha, mientras que los nombres de dominio lo son
de derecha a izquierda (ver figura ).
Hacer que el primer número de las direcciones IP aparezca primero en la jerarquía permite la delegación de la
autoridad de los dominios arpa. Por ejemplo el dominio 60.30.in-addr.arpa contendría toda la información
acerca de los hosts cuyas direcciones IP comiencen con 30.60 y en consencuencia este podría ser delegado al
administrador de la red 30.60. Si fuera al revés, o sea que el dominio 60.30.in-addr.arpa contuviera a las
direcciones que terminen en 60.30 no sería posible la delegación de la administración de este dominio.