In diesem Kapitel werden die Beziehungen zwischen DHCP-Befehlen und DHCP-Dateien beschrieben. Die Verwendung der Befehle wird in diesem Kapitel nicht erklärt.
Dieses Kapitel enthält die folgenden Informationen:
In der folgenden Tabelle sind die Befehle aufgelistet, die Sie zur Verwaltung von DHCP in Ihrem Netzwerk verwenden können.
Tabelle 18–1 In DHCP verwendete Befehle
Die Befehle dhcpconfig, dhtadm und pntadm wurden zur Verwendung in Skripten optimiert. So eignet sich der Befehl pntadm insbesonders zum Erstellen zahlreicher IP-Adresseinträge in einer DHCP-Netzwerktabelle. Im folgenden Beispielskript wird der Befehl pntadm dazu verwendet, IP-Adressen im Batch-Modus zu erzeugen.
#! /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." |
In der folgenden Tabelle sind die Oracle Solaris DHCP zugeordneten Dateien aufgeführt.
Tabelle 18–2 Von DHCP-Daemons und -Befehlen verwendete Dateien und Tabellen
Datei- oder Tabellenname |
Beschreibung |
Manpage |
---|---|---|
dhcptab |
Ein allgemeiner Begriff für die Tabelle der DHCP-Konfigurationsinformationen, die als Optionen mit zugewiesenen Werten aufgezeichnet und dann in Makros gruppiert werden. Der Name der dhcptab-Tabelle und ihr Speicherort wird durch den Datenspeicher bestimmt, den Sie für Ihre DHCP-Informationen verwenden. | |
DHCP- Netzwerktabelle |
Ordnet IP-Adressen zu Client-IDs und Konfigurationsoptionen zu. DHCP-Netzwerktabellen werden nach der IP-Adresse des Netzwerks benannt, z. B. 10.21.32.0. Es gibt keine Datei mit dem Namen dhcp_Netzwerk. Name und Speicherort der DHCP-Netzwerktabellen wird durch den Datenspeicher bestimmt, den Sie für Ihre DHCP-Informationen verwenden. | |
dhcpsvc.conf |
Speichert Startoptionen für den DHCP-Daemon und Datenspeicherinformationen. Diese Datei darf nicht manuell bearbeitet werden. Zum Ändern der Startoptionen verwenden Sie den Befehl dhcpconfig. | |
nsswitch.conf |
Gibt den Speicherort der Namen-Service-Datenbanken und die Reihenfolge an, in der die Namen-Services für verschiedene Informationsarten verwendet werden. In der Datei nsswitch.conf werden genau die Konfigurationsinformationen gespeichert, die Sie zur Konfiguration eines DHCP-Servers benötigen. Die Datei befindet sich in dem Verzeichnis /etc. | |
resolv.conf |
Enthält Informationen, die zum Auflösen von DNS-Anfragen verwendet werden. Aus dieser Datei werden während der Konfiguration des DHCP-Servers Informationen zur DNS-Domäne und DNS-Server bezogen. Die Datei befindet sich in dem Verzeichnis /etc. | |
dhcp.Schnittstelle |
Kennzeichnet, dass DHCP auf der Netzwerkschnittstelle des Client verwendet wird, die in dem Dateinamen dhcp.Schnittstelle angegeben ist. Beispielsweise gibt das Vorhandensein der Datei dhcp.qe0 an, das DHCP auf der Schnittstelle namens qe0 verwendet wird. Die dhcp.Schnittstelle-Datei kann Befehle enthalten, die als Optionen an den ifconfig-Befehl übergeben werden, der zum Starten von DHCP auf dem Client verwendet wird. Die Datei befindet sich im Verzeichnis /etc auf den Oracle Solaris DHCP-Clientsystemen. |
Keine bestimmte Manpage, siehe dhcp(5) |
Schnittstelle.dhc |
Enthält die Konfigurationsparameter, die von DHCP für eine bestimmte Netzwerkschnittstelle bezogen werden. Der Client speichert die aktuellen Konfigurationsinformationen in /etc/dhcp/Schnittstelle.dhc zwischen, wenn das Leasing IP-Adresse der Schnittstelle abgelaufen ist. Angenommen, DHCP wird auf der Schnittstelle qe0 verwendet, so speichert der dhcpagent die Konfigurationsinformationen in /etc/dhcp/qe0.dhc zwischen. Wenn DHCP das nächste Mal auf der Schnittstelle gestartet wird, fordert der Client die zwischengespeicherte Konfiguration an, sofern dieses Leasing noch nicht abgelaufen ist. Wenn der DHCP-Server die Anforderung verweigert, beginnt der Client den standardmäßigen Prozess zur Aushandlung eines DHCP-Leasing. |
Keine bestimmte Manpage, siehe dhcpagent(1M) |
dhcpagent |
Setzt Parameterwerte für den dhcpagent-Client-Daemon. Der Pfad zur Datei lautet /etc/default/dhcpagent. Informationen zu den Parametern finden Sie in der Datei /etc/default/dhcpagent oder in der Manpage dhcpagent(1M). | |
DHCP inittab |
Definiert Aspekte der DHCP-Optionscodes, z. B. dem Datentyp, und weist Mnemonikbezeichnungen zu. Weitere Informationen zur Dateisyntax finden Sie in der Manpage dhcp_inittab(4). Auf dem Client werden die Informationen in der Datei /etc/dhcp/inittab von dhcpinfo verwendet, um aussagekräftige Informationen für Benutzer bereitzustellen. Auf dem DHCP-Serversystem wird diese Datei vom DHCP-Daemon und den Verwaltungstools verwendet, um DHCP-Optionsinformationen zu beziehen. Die Datei /etc/dhcp/inittab ersetzt die Datei /etc/dhcp/dhcptags, die in früheren Releases verwendet wurde. DHCP-Optionsinformationen enthält weitere Informationen zu dieser Ersetzung. |
In der Vergangenheit wurden DHCP-Optionsinformationen an verschiedenen Orten gespeichert, z. B. in der dhcptab-Tabelle des Servers, in der dhcptags-Datei des Clients sowie in internen Tabellen verschiedener Programme. Ab Solaris 8 und aktuelleren Releases sind in die Optionsinformationen in der Datei /etc/dhcp/inittab zusammengefasst. Ausführliche Informationen zu dieser Datei finden Sie in der Manpage dhcp_inittab(4).
Der Oracle Solaris DHCP-Client verwendet die DHCP inittab-Datei als Ersatz für die dhcptags-Datei. Der Client nutzt die Datei, um Informationen zu Optionscodes zu beziehen, die in einem DHCP-Paket empfangen wurden. Auch die Programme in.dhcpd, snoop und dhcpmgr auf dem DHCP-Server verwenden die Datei inittab.
Die meisten Standorte, die Oracle Solaris DHCP verwenden, sind von dem Wechsel zur /etc/dhcp/inittab-Datei nicht betroffen. Ihr Standort ist nur dann betroffen, wenn alle folgenden Kriterien erfüllt sind:
Sie beabsichtigen, von einer Oracle Solaris-Version vor Solaris 8 zu aktualisieren.
Sie haben zuvor neue DHCP-Optionen erstellt.
Sie haben Änderungen an der Datei /etc/dhcp/dhcptags vorgenommen, und Sie möchten diese Änderungen beibehalten.
Wenn Sie aktualisieren, werden Sie vom Aktualisierungsprotokoll benachrichtigt, dass Ihre dhcptags-Datei geändert wurde, und dass Sie diese Änderungen an der DHCP inittab vornehmen sollten.
Die Datei inittab enthält mehr Informationen als die Datei dhcptags. Darüber hinaus verwendet die Datei inittab eine andere Syntax.
Ein Beispieleintrag in der Datei dhcptags ist:
33 StaticRt - IPList Static_Routes
33 ist der numerische Code, der in dem DHCP-Paket übergeben wird. StaticRt ist der Optionsname. IPList kennzeichnet, dass der Datentyp für StaticRt eine Liste mit IP-Adressen sein muss. Static_Routes ist ein beschreibender Name.
Die Datei inittab besteht aus einzeiligen Datensätzen, die jeweils eine Option beschreiben. Das Format ähnelt dem, mit dem Symbole in dhcptab definiert werden. In der folgenden Tabelle ist die Syntax der inittab-Datei beschrieben.
Beschreibung
Der Name der Option. Der Optionsname muss innerhalb seiner Optionskategorie einmalig sein und darf nicht mit anderen Optionsnamen in den Kategorien „Standard“, „Standort“ und „Anbieter“ überlappen. So können Sie keine zwei „Standort“-Optionen mit dem gleichen Namen haben und sollten keine „Standort“-Option mit einem Namen erstellen, der schon für eine „Standard“-Option vergeben wurde.
Gibt den Namespace an, zu dem die Option gehört. Muss einer der Folgenden sein: „Standard“, „Standort“, „Anbieter“, „Feld“ oder „Intern“.
Identifiziert die Option, wenn sie über das Netzwerk gesendet wird. In den meisten Fällen identifiziert der Code eine Option oder eine Kategorie einmalig. Bei den internen Kategorien wie „Feld“ oder „Intern“ kann ein Code jedoch auch für andere Zwecke verwendet werden. Der Code muss nicht global einmalig sein. Der Code sollte innerhalb der Optionskategorie einmalig sein und nicht mit Codes der Felder „Standard“ und „Standort“ überlappen.
Beschreibt die Daten, die mit dieser Option zugeordnet werden. Die gültigen Typen sind IP, ASCII, Oktett, Boolescher Wert, Unumber8, Unumber16, Unumber32, Unumber64, Snumber8, Snumber16, Snumber32 und Snumber64. Bei Zahlen gibt ein einleitendes U oder S an, ob die Zahl vorzeichenlos oder vorzeichenbehaftet ist. Die Zahlen am Ende geben an, wie viele Bit in der Zahl vorhanden sind. Beispielsweise ist Unumber8 eine vorzeichenlose 8-Bit-Zahl. Der Typ ist unabhängig von der Groß-/Kleinschreibung.
Beschreibt, wie viele Dateneinheiten den Gesamtwert für diese Option ausmachen.
Gibt an, wie viele ganze Werte für diese Option erlaubt sind. 0 bedeutet unendlich.
Beschreibt, welche Programme diese Informationen nutzen können. Die Nutzer werden mit sdmi eingerichtet. Dabei gilt:
snoop
in.dhcpd
dhcpmgr
dhcpinfo
Ein inittab-Beispieleintrag ist:
StaticRt - Standard, 33, IP, 2, 0, sdmi
Dieser Eintrag beschreibt eine Option namens StaticRt. Die Option befindet sich in der Standardkategorie und besitzt den Optionscode 33. Die erwarteten Daten stellen eine potenziell unendliche Anzahl am IP-Adressen dar, da der Typ IP, die Granularität 2 und das Maximum unendlich (0) ist. Die Nutzer dieser Option sind sdmi: snoop, in.dhcpd, dhcpmgr und dhcpinfo.
Wenn Sie in der Vergangenheit Einträge zu Ihrer Datei dhcptags hinzugefügt haben, müssen Sie die entsprechenden Einträge in die neue Datei inittab einfügen, wenn Sie die Ihrem Standort hinzugefügten Optionen weiterhin verwenden möchten. Das folgende Beispiel zeigt, wie ein dhcptags-Eintrag im inittab-Format ausgedrückt werden könnte.
Angenommen, Sie haben den folgenden dhcptags-Eintrag für ein Faxgerät hinzugefügt, das mit dem Netzwerk verbunden ist:
128 FaxMchn - IP Fax_Machine
Der Code 128 bedeutet, dass sich die Option in der „Standort“-Kategorie befindet. Der Optionsname lautet FaxMchn, und der Datentyp ist IP.
Der entsprechende inittab-Eintrag wäre:
FaxMchn SITE, 128, IP, 1, 1, sdmi
Die Granularität von 1 und das Maximum von 1 geben an, dass eine IP-Adresse für diese Option erwartet wird.