Guía de administración del sistema: servicios IP

Secuencias de eventos de cliente DHCP

El cliente DHCP de Oracle Solaris se puede configurar para que ejecute un programa o secuencia que lleve a cabo cualquier acción adecuada para el sistema cliente. El programa o secuencia, que se denomina, secuencia de eventos, se ejecuta automáticamente cuando tienen lugar determinados eventos de permiso de DHCP. La secuencia de eventos se puede utilizar para ejeuctar otros comandos, programas o secuencias en respuesta a eventos de permiso específicos. Para utilizar esta función deberá proporcionar su propia secuencia.

dhcpagent utiliza las siguientes palabras clave para referirse a eventos de permisos de DHCP:

Palabra clave de evento

Descripción

BOUND y BOUND6

La interfaz está configurada para DHCP. El cliente recibe el mensaje de confirmación (DHCPv4 ACK) o (DHCPv6 Reply ) del servidor DHCP en el que se concede la solicitud de permiso para una dirección IP. Se llama a la secuencia de eventos inmediatamente después de la configuración satisfactoria de la interfaz.

EXTEND y EXTEND6

El cliente ha realizado correctamente una concesión. Se llama a la secuencia de eventos inmediatamente después de que el cliente recibe el mensaje de confirmación del servidor DHCP por la solicitud de renovación.

EXPIRE y EXPIRE6

El permiso caduca cuando se agota su tiempo. Para DHCPv4, la secuencia de eventos se llama inmediatamente después de que la dirección permitida se elimina de la interfaz y se marca esta como desconectada. Para DHCPv6, la secuencia de eventos se llama justo antes de que las últimas direcciones permitidas se eliminen de la interfaz.

DROP y DROP6

El cliente usa la concesión para eliminar la interfaz desde el control DHCP. Se llama a la secuencia de eventos inmediatamente antes de la interfaz se retire del control de DHCP.

RELEASE y RELEASE6

El cliente deja de usar la dirección IP. Se llama a la secuencia de eventos inmediatamente antes de que el cliente libere la dirección en la interfaz y envíe el paquete DHCPv4 RELEASE o DHCPv6 Release al servidor DHCP.

INFORM e INFORM6

Una interfaz obtiene información de configuración nueva o actualizada de un servidor DHCP a través del mensaje DHCPv4 INFORM o DHCPv6 Information-Request. Estos eventos tienen lugar cuando el cliente DHCP solo obtiene parámetros de configuración del servidor, pero no obtiene un permiso de dirección IP.

LOSS6

Durante la caducidad del permiso, cuando aún quedan uno o más permisos válidos, se llama a la secuencia de eventos justo antes de eliminar las direcciones caducadas. Las direcciones que se van a eliminar se marcan con el indicador IFF_DEPRECATED.

Con cada uno de estos eventos, dhcpagent llama al comando siguiente:


/etc/dhcp/eventhook interface event

donde interfaz es la interfaz que utiliza DHCP y evento es una de las palabras clave de evento descritas anteriormente. Por ejemplo, cuando la interfaz ce0 se configura por primera vez para DHCP, dhcpagent llama a la secuencia de eventos de la siguiente forma:


/etc/dhcp/eventhook ce0 BOUND

Para utilizar la función de secuencia de eventos, haga lo siguiente:

La secuencia de eventos hereda su entorno de programa de dhcpagent, y se ejecuta con privilegios de root. Si es necesario, la secuencia puede utilizar la utilidad dhcpinfo para obtener más información acerca de la interfaz. Para más información consulte la página de comando man dhcpinfo(1).

El daemon dhcpagent espera la salida de la secuencia de eventos para todos los eventos. Si la secuencia de eventos no sale transcurridos 55 segundos, dhcpagent envía una señal SIGTERM al proceso de la secuencia. Si el proceso sigue sin salir pasados otros tres segundos, el daemon envía una señal SIGKILL para cerrar el proceso.

En la página de comando man dhcpagent(1M) se muestra un ejemplo de secuencia de eventos.

El Ejemplo 16–3 muestra la forma de utilizar una secuencia de eventos DHCP para mantener actualizado el contenido del archivo /etc/resolv.conf. Cuando tienen lugar los eventos BOUND y EXTEND, la secuencia sustituye los nombres del servidor de dominios y del servidor de nombres. Cuando tienen lugar los eventos EXPIRE, DROP y RELEASE, la secuencia elimina del archivo los nombres del servidor de dominios y del servidor de nombres.


Nota –

La secuencia de ejemplo supone que DHCP es el origen de autoridad del servidor de dominios y del servidor de nombres. También supone que todas las interfaces bajo control de DHCP devuelven información coherente y actualizada. Es posible que estas hipótesis no reflejen las condiciones reales de su sistema.



Ejemplo 16–3 Secuencia de eventos para actualizar el archivo /etc/resolv.conf

#!/bin/ksh -p

PATH=/bin:/sbin export PATH
umask 0222

# Refresh the domain and name servers on /etc/resolv.conf

insert ()
{
	dnsservers=`dhcpinfo -i $1 DNSserv`
	if [ -n "$dnsservers" ]; then
		# remove the old domain and name servers
		if [ -f /etc/resolv.conf ]; then
			rm -f /tmp/resolv.conf.$$
			sed -e '/^domain/d' -e '/^nameserver/d' \
			    /etc/resolv.conf > /tmp/resolv.conf.$$
		fi

		# add the new domain
		dnsdomain=`dhcpinfo -i $1 DNSdmain`
		if [ -n "$dnsdomain" ]; then
			echo "domain $dnsdomain" >> /tmp/resolv.conf.$$
		fi

		# add new name servers
		for name in $dnsservers; do
			echo nameserver $name >> /tmp/resolv.conf.$$
		done
		mv -f /tmp/resolv.conf.$$ /etc/resolv.conf
	fi
}

# Remove the domain and name servers from /etc/resolv.conf

remove ()
{
	if [ -f /etc/resolv.conf ]; then
		rm -f /tmp/resolv.conf.$$
		sed -e '/^domain/d' -e '/^nameserver/d' \
		    /etc/resolv.conf > /tmp/resolv.conf.$$
		mv -f /tmp/resolv.conf.$$ /etc/resolv.conf
	fi
}

case $2 in
BOUND | EXTEND)
	insert $1
	exit 0
	;;
EXPIRE | DROP | RELEASE)
	remove
	exit 0
	;;
*)
	exit 0
	;;
esac