Guide d'administration système : services IP

Scripts d'événement client DHCP

Vous pouvez configurer le client DHCP Oracle Solaris de façon à l'utiliser comme un programme ou un script exécutable en vue d'effectuer toute actions nécessaire sur le système client. Le programme ou le script, appelé script d'événement, est exécuté automatiquement dès que certains événements liés au bail DHCP se produisent. Vous pouvez vous servir du script d'événement pour exécuter d'autres commandes, programmes ou scripts en réponse à des événements de bail spécifiques. Pour ce faire, vous devez fournir votre propre script d'événement.

Les mots-clés d'événement suivants sont utilisés par dhcpagent pour signifier des événements de bail DHCP :

Mot-clé d'événement

Description

BOUND et BOUND6

L'interface est configurée pour DHCP. Le client reçoit l'accusé de réception (DHCPv4 ACK) ou (DHCPv6 Reply ) du serveur DHCP, qui lui accorde la demande de bail pour une adresse IP. Le script d'événement est appelé immédiatement après la configuration de l'interface.

EXTEND et EXTEND6

Le client prolonge le bail de la ligne spécialisée. Le script d'événement est appelé dès que le client reçoit l'accusé de réception du serveur DHCP ayant trait à la demande de renouvellement.

EXPIRE et EXPIRE6

Le bail expire à la date butoir fixée. Pour DHCPv4, le script d'événement est appelé avant la suppression de l'adresse louée de l'interface et l'interface est signalée comme arrêtée. Pour DHCPv6, le script d'événement est appelé avant la suppression des dernières adresses louées de l'interface.

DROP et DROP6

Le client abandonne la ligne spécialisée pour retirer l'interface du contrôle de DHCP. Le script d'événement est appelé juste avant que l'interface n'échappe au contrôle de DHCP.

RELEASE et RELEASE6

Le client libère l'adresse IP. Le script d'événement est appelé juste avant que le client ne libère l'adresse sur l'interface et n'envoie le paquet DHCPv4 RELEASE ou DHCPv6 Release au serveur DHCP.

INFORM et INFORM6

Une interface se procure des données de configuration nouvelles ou mises à jour à partir d'un serveur DHCP par l'intermédiaire du paquet DHCPv4 INFORM ou du message DHCPv6 Information-Request. Ces événements se produisent si le client DHCP obtient uniquement les paramètres de configuration du serveur, mais pas le bail d'une adresse IP.

LOSS6

Pendant la phase d'expiration, lorsqu'il reste un ou plusieurs baux valides, le script d'événement est appelé juste avant la suppression des adresses expirées. Les adresses effacées sont signalées par l'indicateur IFF_DEPRECATED.

Pour chacun de ces événements, dhcpagent exécute la commande suivante :


/etc/dhcp/eventhook interface event

interface représente l'interface faisant appel à DHCP et événement correspond à un des mots-clés d'événement décrits précédemment. Par exemple, la première fois que vous configurez l'interface ce0 pour DHCP, dhcpagent appelle le script d'événement de la façon suivante :


/etc/dhcp/eventhook ce0 BOUND

Pour utiliser la fonction de script d'événement, vous devez effectuer les opérations suivantes :

Le script d'événement hérite son environnement de programme de dhcpagent et s'exécute avec les privilèges root. Il peut faire appel à l'utilitaire dhcpinfo pour obtenir des informations supplémentaires au sujet de l'interface, si cela est nécessaire. Pour plus d'informations, reportez-vous à la page de manuel dhcpinfo(1).

Le démon dhcpagent attend que le script d'événement prenne fin pour tous les événements. Si le script d'événement ne se termine au bout de 55 secondes, dhcpagent envoie un signal SIGTERM au processus du script. Si le processus ne se termine par au bout de trois secondes supplémentaires, le démon envoie un signal SIGKILL pour interrompre le processus.

Vous trouverez un exemple de script d'événement dans la page de manuel dhcpagent(1M).

L'Exemple 16–3 illustre l'utilisation d'un script d'événement DHCP pour maintenir le contenu du fichier /etc/resolv.conf à jour. Lorsque les événements BOUND et EXTEND se produisent, le script remplace les noms du serveur de domaine et du serveur de noms. Lorsque les événements EXPIRE, DROP et RELEASE se produisent, le script supprime les noms du serveur de domaine et du serveur de noms du fichier.


Remarque –

Le script proposé en exemple considère que DHCP est la source qui fait autorité pour les noms du serveur de domaine et le serveur de noms. Il suppose également que toutes les interfaces sous le contrôle de DHCP renvoient des informations cohérentes et à jour. Il est possible que ces conditions ne soient pas réunies sur votre système.



Exemple 16–3 Script d'événement pour la mise à jour du fichier /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