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:
Descripción
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.
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.
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.
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.
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.
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.
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:
Asigne al archivo ejecutable el nombre /etc/dhcp/eventhook.
Establezca el propietario del archivo en root.
Establezca los permisos en 755 (rwxr-xr-x ).
Escriba la secuencia o programa que debe llevar a cabo una serie de acciones en respuesta a alguno de los eventos documentados. Sun puede agregar nuevos eventos, de modo que el programa debe hacer caso omiso de los eventos no reconocidos o que no requieren acción. Por ejemplo, el programa o secuencia puede escribir un archivo de registro cuando el evento es RELEASE, y no hacer caso de los demás eventos.
El programa o secuencia no debe ser interactivo. Antes de llamar a la secuencia de eventos, stdin, stdout y stderr se conectan a /dev/null. Para ver la salida de errores, deberá redirigirla a un archivo.
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.
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.
#!/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