Ce chapitre décrit les relations entre les commandes DHCP et les fichiers DHCP. Il n'explique pas, cependant, comment utiliser les commandes.
Ce chapitre contient les informations suivantes :
Le tableau suivant présente les commandes prévues pour gérer le protocole DHCP sur votre réseau.
Tableau 18–1 Commandes utilisées dans DHCP
Les commandes dhcpconfig, dhtadm et pntadm sont optimisées pour les scripts. La commande pntadm est notamment utile pour créer un grand nombre d'entrées d'adresses IP dans une table de réseau DHCP. L'exemple de script suivant utilise la commande pntadm en mode de traitement par lots pour générer des adresses IP.
#! /usr/bin/ksh # # This script utilizes the pntadm batch facility to add client entries # to a DHCP network table. It assumes that the user has the rights to # run pntadm to add entries to DHCP network tables. # # Based on the nsswitch setting, query the netmasks table for a netmask. # Accepts one argument, a dotted IP address. # get_netmask() { MTMP=`getent netmasks ${1} | awk '{ print $2 }'` if [ ! -z "${MTMP}" ] then print - ${MTMP} fi } # # Based on the network specification, determine whether or not network is # subnetted or supernetted. # Given a dotted IP network number, convert it to the default class # network.(used to detect subnetting). Requires one argument, the # network number. (e.g. 10.0.0.0) Echos the default network and default # mask for success, null if error. # get_default_class() { NN01=${1%%.*} tmp=${1#*.} NN02=${tmp%%.*} tmp=${tmp#*.} NN03=${tmp%%.*} tmp=${tmp#*.} NN04=${tmp%%.*} RETNET="" RETMASK="" typeset -i16 ONE=10#${1%%.*} typeset -i10 X=$((${ONE}&16#f0)) if [ ${X} -eq 224 ] then # Multicast typeset -i10 TMP=$((${ONE}&16#f0)) RETNET="${TMP}.0.0.0" RETMASK="240.0.0.0" fi typeset -i10 X=$((${ONE}&16#80)) if [ -z "${RETNET}" -a ${X} -eq 0 ] then # Class A RETNET="${NN01}.0.0.0" RETMASK="255.0.0.0" fi typeset -i10 X=$((${ONE}&16#c0)) if [ -z "${RETNET}" -a ${X} -eq 128 ] then # Class B RETNET="${NN01}.${NN02}.0.0" RETMASK="255.255.0.0" fi typeset -i10 X=$((${ONE}&16#e0)) if [ -z "${RETNET}" -a ${X} -eq 192 ] then # Class C RETNET="${NN01}.${NN02}.${NN03}.0" RETMASK="255.255.255.0" fi print - ${RETNET} ${RETMASK} unset NNO1 NNO2 NNO3 NNO4 RETNET RETMASK X ONE } # # Given a dotted form of an IP address, convert it to its hex equivalent. # convert_dotted_to_hex() { typeset -i10 one=${1%%.*} typeset -i16 one=${one} typeset -Z2 one=${one} tmp=${1#*.} typeset -i10 two=${tmp%%.*} typeset -i16 two=${two} typeset -Z2 two=${two} tmp=${tmp#*.} typeset -i10 three=${tmp%%.*} typeset -i16 three=${three} typeset -Z2 three=${three} tmp=${tmp#*.} typeset -i10 four=${tmp%%.*} typeset -i16 four=${four} typeset -Z2 four=${four} hex=`print - ${one}${two}${three}${four} | sed -e 's/#/0/g'` print - 16#${hex} unset one two three four tmp } # # Generate an IP address given the network address, mask, increment. # get_addr() { typeset -i16 net=`convert_dotted_to_hex ${1}` typeset -i16 mask=`convert_dotted_to_hex ${2}` typeset -i16 incr=10#${3} # Maximum legal value - invert the mask, add to net. typeset -i16 mhosts=~${mask} typeset -i16 maxnet=${net}+${mhosts} # Add the incr value. let net=${net}+${incr} if [ $((${net} < ${maxnet})) -eq 1 ] then typeset -i16 a=${net}\&16#ff000000 typeset -i10 a="${a}>>24" typeset -i16 b=${net}\&16#ff0000 typeset -i10 b="${b}>>16" typeset -i16 c=${net}\&16#ff00 typeset -i10 c="${c}>>8" typeset -i10 d=${net}\&16#ff print - "${a}.${b}.${c}.${d}" fi unset net mask incr mhosts maxnet a b c d } # Given a network address and client address, return the index. client_index() { typeset -i NNO1=${1%%.*} tmp=${1#*.} typeset -i NNO2=${tmp%%.*} tmp=${tmp#*.} typeset -i NNO3=${tmp%%.*} tmp=${tmp#*.} typeset -i NNO4=${tmp%%.*} typeset -i16 NNF1 let NNF1=${NNO1} typeset -i16 NNF2 let NNF2=${NNO2} typeset -i16 NNF3 let NNF3=${NNO3} typeset -i16 NNF4 let NNF4=${NNO4} typeset +i16 NNF1 typeset +i16 NNF2 typeset +i16 NNF3 typeset +i16 NNF4 NNF1=${NNF1#16\#} NNF2=${NNF2#16\#} NNF3=${NNF3#16\#} NNF4=${NNF4#16\#} if [ ${#NNF1} -eq 1 ] then NNF1="0${NNF1}" fi if [ ${#NNF2} -eq 1 ] then NNF2="0${NNF2}" fi if [ ${#NNF3} -eq 1 ] then NNF3="0${NNF3}" fi if [ ${#NNF4} -eq 1 ] then NNF4="0${NNF4}" fi typeset -i16 NN let NN=16#${NNF1}${NNF2}${NNF3}${NNF4} unset NNF1 NNF2 NNF3 NNF4 typeset -i NNO1=${2%%.*} tmp=${2#*.} typeset -i NNO2=${tmp%%.*} tmp=${tmp#*.} typeset -i NNO3=${tmp%%.*} tmp=${tmp#*.} typeset -i NNO4=${tmp%%.*} typeset -i16 NNF1 let NNF1=${NNO1} typeset -i16 NNF2 let NNF2=${NNO2} typeset -i16 NNF3 let NNF3=${NNO3} typeset -i16 NNF4 let NNF4=${NNO4} typeset +i16 NNF1 typeset +i16 NNF2 typeset +i16 NNF3 typeset +i16 NNF4 NNF1=${NNF1#16\#} NNF2=${NNF2#16\#} NNF3=${NNF3#16\#} NNF4=${NNF4#16\#} if [ ${#NNF1} -eq 1 ] then NNF1="0${NNF1}" fi if [ ${#NNF2} -eq 1 ] then NNF2="0${NNF2}" fi if [ ${#NNF3} -eq 1 ] then NNF3="0${NNF3}" fi if [ ${#NNF4} -eq 1 ] then NNF4="0${NNF4}" fi typeset -i16 NC let NC=16#${NNF1}${NNF2}${NNF3}${NNF4} typeset -i10 ANS let ANS=${NC}-${NN} print - $ANS } # # Check usage. # if [ "$#" != 3 ] then print "This script is used to add client entries to a DHCP network" print "table by utilizing the pntadm batch facilty.\n" print "usage: $0 network start_ip entries\n" print "where: network is the IP address of the network" print " start_ip is the starting IP address \n" print " entries is the number of the entries to add\n" print "example: $0 10.148.174.0 10.148.174.1 254\n" return fi # # Use input arguments to set script variables. # NETWORK=$1 START_IP=$2 typeset -i STRTNUM=`client_index ${NETWORK} ${START_IP}` let ENDNUM=${STRTNUM}+$3 let ENTRYNUM=${STRTNUM} BATCHFILE=/tmp/batchfile.$$ MACRO=`uname -n` # # Check if mask in netmasks table. First try # for network address as given, in case VLSM # is in use. # NETMASK=`get_netmask ${NETWORK}` if [ -z "${NETMASK}" ] then get_default_class ${NETWORK} | read DEFNET DEFMASK # use the default. if [ "${DEFNET}" != "${NETWORK}" ] then # likely subnetted/supernetted. print - "\n\n###\tWarning\t###\n" print - "Network ${NETWORK} is netmasked, but no entry was found \n in the 'netmasks' table; please update the 'netmasks' \n table in the appropriate nameservice before continuing. \n (See /etc/nsswitch.conf.) \n" >&2 return 1 else # use the default. NETMASK="${DEFMASK}" fi fi # # Create a batch file. # print -n "Creating batch file " while [ ${ENTRYNUM} -lt ${ENDNUM} ] do if [ $((${ENTRYNUM}-${STRTNUM}))%50 -eq 0 ] then print -n "." fi CLIENTIP=`get_addr ${NETWORK} ${NETMASK} ${ENTRYNUM}` print "pntadm -A ${CLIENTIP} -m ${MACRO} ${NETWORK}" >> ${BATCHFILE} let ENTRYNUM=${ENTRYNUM}+1 done print " done.\n" # # Run pntadm in batch mode and redirect output to a temporary file. # Progress can be monitored by using the output file. # print "Batch processing output redirected to ${BATCHFILE}" print "Batch processing started." pntadm -B ${BATCHFILE} -v > /tmp/batch.out 2 >&1 print "Batch processing completed." |
Le tableau suivant présente les différents fichiers associés au service DHCP Oracle Solaris.
Tableau 18–2 Fichiers et tables utilisés par les démons et les commandes DHCP
Nom du fichier ou de la table |
Description |
Page de manuel |
---|---|---|
dhcptab |
Terme générique désignant la table des données de configuration DHCP stockées sous forme d'options avec des valeurs attribuées, lesquelles sont ensuite regroupées dans des macros. Le nom de la table dhcptab et son emplacement sont déterminés par le magasin de données réservé aux informations DHCP. | |
Table de réseau DHCP |
Établit la correspondance entre les adresses IP et les ID de client et les options de configuration. Les tables de réseau DHCP sont nommées d'après l'adresse IP du réseau (10.21.32.0, par exemple). Il n'existe aucun fichier appelé dhcp_network. Le nom et l'emplacement des tables de réseau DHCP sont fonction du magasin de données utilisé pour les informations DHCP. | |
dhcpsvc.conf |
Stocke les options de démarrage du démon DHCP et les informations du magasin de données. Il est interdit d'éditer ce fichier de façon manuelle. Servez-vous de la commande dhcpconfig pour changer les options de démarrage. | |
nsswitch.conf |
Indique l'emplacement des bases de données de services de noms et l'ordre de recherche des services de noms pour différents types d'information. Le fichier nsswitch.conf est consulté lors de la configuration d'un serveur DHCP dans le but d'obtenir des informations de configuration précises. Il figure dans le répertoire /etc. | |
resolv.conf |
Contient les informations permettant la résolution des requêtes DNS. Ce fichier est consulté lors de la configuration du serveur DHCP pour vérifier le domaine DNS et le serveur DNS. Il figure dans le répertoire /etc. | |
dhcp.interface |
Implique l'utilisation du service DHCP sur l'interface réseau du client spécifiée dans le nom du fichier dhcp.interface. La présence d'un fichier appelé dhcp.qe0 indique, par exemple, que le service DHCP doit être utilisé sur l'interface qe0. Le fichier dhcp.interface peut éventuellement contenir des commandes transmises en tant qu'options à la commande ifconfig, laquelle permet de démarrer DHCP sur le client. Le fichier se trouve sous le répertoire /etc sur les systèmes clients DHCP Oracle Solaris. |
Aucune page de manuel spécifique, voir dhcp(5) |
interface.dhc |
Contient les paramètres de configuration obtenus à partir de DHCP pour l'interface réseau indiquée. Le client met en mémoire cache les données de configuration actuelles dans le fichier /etc/dhcp/interface.dhc dès que cesse le bail de l'adresse IP de l'interface. En cas d'utilisation du service DHCP sur l'interface qe0, par exemple, dhcpagent met en mémoire cache les données de configuration dans /etc/dhcp/qe0.dhc. Lors du prochain démarrage du service DHCP sur l'interface, le client adresse une requête au serveur DHCP afin d'exploiter la configuration mise en mémoire cache (à condition que le bail n'ait pas expiré). Si le serveur DHCP rejette la requête, le client lance le processus standard de négociation du bail DHCP. |
Aucune page de manuel spécifique, voir dhcpagent(1M) |
dhcpagent |
Définit les valeurs des paramètres pour le démon client dhcpagent. Le chemin d'accès au fichier est /etc/default/dhcpagent. Pour plus d'informations sur les paramètres, reportez-vous au fichier /etc/default/dhcpagent ou à la page de manuel dhcpagent(1M). | |
DHCP inittab |
Définit des aspects des codes d'options DHCP, tels que le type de données, et assigne des étiquettes comme mnémoniques. Pour plus d'informations sur la syntaxe du fichier, voir la page de manuel dhcp_inittab(4). Au niveau du client, les informations provenant du fichier /etc/dhcp/inittab sont utilisées par dhcpinfo pour aider les utilisateurs à mieux comprendre la signification des informations. Au niveau du système du serveur DHCP, c'est le démon DHCP et les outils de gestion qui utilisent ce fichier pour obtenir des informations relatives aux options DHCP. Le fichier /etc/dhcp/inittab remplace le fichier /etc/dhcp/dhcptags utilisé dans les versions précédentes. Pour en savoir plus à ce sujet, reportez-vous à la section Informations relatives aux options DHCP. |
Auparavant, les informations ayant trait aux options DHCP étaient stockées à différents endroits, y compris la table dhcptab du serveur, le fichier dhcptags des clients et les tables internes de divers programmes. À partir de la version Solaris 8, ces informations sont systématiquement consolidées dans le fichier /etc/dhcp/inittab. Pour plus d'informations sur ce fichier, reportez-vous à la page de manuel dhcp_inittab(4).
Le client DHCP Oracle Solaris utilise le fichier DHCP inittab pour remplacer le fichier dhcptags. Il se sert de ce fichier pour obtenir des informations sur les codes d'options reçus dans un paquet DHCP. Les programmes in.dhcpd, snoop et dhcpmgr sur le serveur DHCP utilisent également le fichier inittab.
La plupart des sites utilisant le service DHCP Oracle Solaris ne sont pas concernés par le basculement vers le fichier /etc/dhcp/inittab. Votre site est concerné si vous remplissez toutes les conditions suivantes :
Vous avez l'intention d'effectuer une mise à niveau à partir d'une version Oracle Solaris antérieure à Solaris 8.
Vous avez défini auparavant de nouvelles options DHCP.
Vous avez modifié le fichier /etc/dhcp/dhcptags et souhaitez conserver les changements apportés.
Lors de la mise à niveau, le journal de mise à niveau vous signale que le fichier dhcptags avait subi des modifications et que vous devez, par conséquent, apporter des changements au fichier DHCP inittab.
Le fichier inittab contient plus d'informations que le fichier dhcptags. Le fichier inittab utilise également une syntaxe différente.
Voici à quoi ressemble une entrée dans le fichier dhcptags :
33 StaticRt - IPList Static_Routes
33 est le code numérique transmis dans le paquet DHCP. StaticRt est le nom de l'option. IPList indique que le type de données pour StaticRt doit correspondre à une liste d'adresses IP. Static_Routes représente la version descriptive du nom.
Le fichier inittab se compose d'enregistrements d'une seule ligne décrivant chaque option. Le format est similaire à celui prévu pour définir les symboles dans dhcptab. Le tableau suivant décrit la syntaxe du fichier inittab .
Description
Nom de l'option. Le nom de l'option doit être unique dans sa catégorie et ne doit pas entrer en conflit avec les autres noms d'option dans les catégories Standard, Site et Fournisseur. Vous ne pouvez pas, par exemple, définir deux options Site ayant le même nom. Il n'est pas non plus permis de créer une option Site avec un nom identique à celui d'une option Standard.
Identifie l'espace de noms auquel l'option appartient. Il existe cinq possibilités : Standard, Site, Vendor (Fournisseur), Field (Champ) ou Internal (Interne).
Identifie l'option lors de sa transmission sur le réseau. Dans la plupart des cas, le code identifie sans ambiguïté l'option, au sein d'une même catégorie. Cependant, dans le cas des catégories internes telles que Champ ou Interne, il peut avoir une autre signification. Le code ne doit pas nécessairement être unique au sens général du terme. Il lui suffit de remplir les conditions suivantes : être unique au sein de la catégorie de l'option et ne pas être en conflit avec les codes des catégories Standard et Site.
Décrit les données associées à cette option. Les types autorisés sont : IP, ASCII, Octet, Boolean, Unumber8, Unumber16, Unumber32, Unumber64, Snumber8, Snumber16, Snumber32 et Snumber64. Dans le cas de nombres, l'initiale U ou S indique respectivement qu'il s'agit d'un nombre non signé ou signé. Les chiffres de fin indiquent le nombre de bits de codage du nombre. Unumber8 signale, par exemple, un nombre non signé à 8 bits. Le type ne respecte pas la casse.
Décrit le nombre d'unités de données nécessaires pour représenter une valeur entière pour cette option.
Décrit le nombre de valeurs entières autorisées pour cette option. 0 indique un nombre infini.
Décrit les programmes susceptibles d'exploiter ces informations. Vous êtes tenu de configurer les consommateurs au format sdmi, où :
snoop
in.dhcpd
dhcpmgr
dhcpinfo
Voici à quoi ressemble une entrée inittab :
StaticRt - Standard, 33, IP, 2, 0, sdmi
Cette entrée décrit une option appelée StaticRt. L'option se trouve dans la catégorie Standard et son code est 33. Les données attendues correspondent à un nombre potentiellement infini de paires d'adresses IP car le type est IP, la granularité est 2 et le nombre maximum est infini (0). Les consommateurs de cette option sont sdmi : snoop, in.dhcpd, dhcpmgr et dhcpinfo.
Si vous aviez ajouté précédemment des entrées à votre fichier dhcptags, vous devez insérer les entrées correspondantes dans le nouveau fichier inittab pour continuer à utiliser les options ajoutées à votre site. L'exemple suivant montre la façon dont une entrée dhcptags peut être exprimée au format inittab .
Supposons que vous ayez ajouté l'entrée dhcptags suivante pour des télécopieurs reliés au réseau :
128 FaxMchn - IP Fax_Machine
Le code 128 signifie que l'option doit appartenir à la catégorie Site. Le nom de l'option est FaxMchn et le type de données est IP.
L'entrée inittab correspondante pourrait ressembler à la suivante :
FaxMchn SITE, 128, IP, 1, 1, sdmi
La granularité (1) et le maximum (1) indiquent qu'une adresse IP est attendue pour cette option.