Solaris のシステム管理 (第 3 巻)

DHCP クライアント設定の障害追跡

DHCP クライアントで発生する可能性がある問題は、一般的に次のカテゴリに分類されます。

DHCP サーバーとの通信の問題

この節では、ネットワークに DHCP クライアントを追加する際に発生する可能性がある問題について説明します。

クライアントソフトウェアを使用可能にして、マシンを再起動すると、クライアントは DHCP サーバーに通信してそのネットワークの設定を取得しようとします。クライアントがサーバーと通信できない場合は、次のようなメッセージが表示されます。


DHCP or BOOTP server not responding 

問題を判定するには、クライアントとサーバーの両方から診断情報を収集して、その結果を分析する必要があります。情報を収集するために、次のことができます。

  1. クライアントをデバッグモードで実行する

  2. サーバーをデバッグモードで実行する

  3. snoop を起動してネットワークのトラフィックを監視する

これらの方法を個別に、または同時に実行できます。

収集した情報を使用して、問題がクライアント側にあるのかサーバーマシン側にあるのか、あるいはリレーエージェントにあるのかを判定し、解決法を見つけることができます。

DHCP クライアントをデバッグモードで実行する方法

Solaris DHCP クライアント以外のクライアントを実行している場合は、クライアントのデバッグモードでの実行については、そのクライアント用のマニュアルを参照してください。

Solaris DHCP クライアントを実行している場合は、次の手順に従います。

  1. クライアントシステムでスーパーユーザーになります。

  2. DHCP クライアントデーモンを終了し、次のコマンドを使用してそのデーモンをデバッグモードで再起動します。


    # pkill -x dhcpagent
    # /sbin/dhcpagent -d1 -f &
    # ifconfig interface dhcp start
    

デバッグモードで実行すると、クライアントデーモンは画面に DHCP の要求を実行中であるというメッセージを表示します。クライアントデバッグ出力については、「DHCP クライアントデバッグ出力」を参照してください。

DHCP サーバーをデバッグモードで実行する方法
  1. サーバーシステム上でスーパーユーザーになります。

  2. DHCP サーバーデーモンを終了し、次のコマンドを使用してそのデーモンをデバッグモードで再起動します。


    # pkill -x in.dhcpd
    # /usr/lib/inet/in.dhcpd -d -v 
    

    また、デーモンを実行する際に通常使用する in.dhcpd コマンド行オプションも使用する必要があります。たとえば、デーモンを BOOTP リレーエージェントとして実行する場合は、in.dhcpd -d -v コマンドに -r オプションを付けます。

    デバッグモードで実行すると、デーモンによって画面に DHCP や BOOTP の要求を処理しているというメッセージが表示されます。サーバーデバッグ出力については、「DHCP サーバーデバッグ出力」を参照してください。

snoop を使用して DHCP ネットワークトラフィックを監視する方法
  1. DHCP サーバーシステムでスーパーユーザーになります。

  2. snoop を起動して、サーバーのネットワークインタフェース間のネットワークトラフィックの追跡を開始します。


    # /usr/sbin/snoop -d interface -o snoop-output-filename udp port 67 or udp port 68
    

    たとえば、次のように入力します。


    # /usr/sbin/snoop -d le0 -o /tmp/snoop.output udp port 67 or udp port 68
    

    必要な情報を入手したあと Control-C を押して、snoop を明示的に停止するまで、snoop はインタフェースを監視し続けることに注意してください。

  3. クライアントシステムを起動するか、クライアントシステムで dhcpagent を再起動します。

    クライアントの再起動については、「DHCP クライアントをデバッグモードで実行する方法」で説明されています。

  4. サーバーシステムで snoop を使用して、ネットワークパケットの内容を含んだ出力ファイルを表示させます。


    # /usr/sbin/snoop -i snoop-output-filename -x0 -v
    

    たとえば、次のように入力します。


    # /usr/sbin/snoop -i /tmp/snoop.output -x0 -v
    

dhcpagent コマンドの -d スイッチは、クライアントを冗長性 1 のデバッグモードにします。-f スイッチは、出力を syslog ではなくコンソールに送信します。ifconfig コマンド行の interface を、たとえば le0 のようなクライアントのネットワークインタフェースの名前に置き換えてください。

出力の解釈については、「DHCP snoop 出力」を参照してください。

DHCP クライアントデバッグ出力

例 12-1 では、DHCP クライアントが DHCP 要求を送信し、DHCP サーバーから設定情報を受信した場合の通常のデバッグ出力を示しています。


例 12-1 通常の DHCP クライアントデバッグ出力


/sbin/dhcpagent: debug: set_packet_filter: set filter 0x27fc8 (DHCP filter) 
/sbin/dhcpagent: debug: init_ifs: initted interface le0 
/sbin/dhcpagent: debug: insert_ifs: le0: sdumax 1500, optmax 1260, hwtype 1, hwlen 6 
/sbin/dhcpagent: debug: insert_ifs: inserted interface le0 
/sbin/dhcpagent: debug: register_acknak: registered acknak id 5 
/sbin/dhcpagent: debug: unregister_acknak: unregistered acknak id 5 
/sbin/dhcpagent: debug: set_packet_filter: set filter 0x26018 (ARP reply filter)
/sbin/dhcpagent: info: setting IP netmask on le0 to 255.255.192.0 
/sbin/dhcpagent: info: setting IP address on le0 to 102.23.3.233 
/sbin/dhcpagent: info: setting broadcast address on le0 to 102.23.63.255 
/sbin/dhcpagent: info: added default router 102.23.0.1 on le0 
/sbin/dhcpagent: debug: set_packet_filter: set filter 0x28054 (blackhole filter) 
/sbin/dhcpagent: debug: configure_if: bound ifsp->if_sock_ip_fd 
/sbin/dhcpagent: info: le0 acquired lease, expires Tue Aug 10 16:18:33 1999 
/sbin/dhcpagent: info: le0 begins renewal at Tue Aug 10 15:49:44 1999 
/sbin/dhcpagent: info: le0 begins rebinding at Tue Aug 10 16:11:03 1999

クライアントが DHCP サーバーと通信できない場合は、例 12-2 のようなデバッグ出力が表示されます。


例 12-2 クライアントがサーバーの回答を受信しない場合の DHCP クライアントデバッグ出力


/sbin/dhcpagent: debug: set_packet_filter: set filter 0x27fc8 (DHCP filter)
/sbin/dhcpagent: debug: init_ifs: initted interface le0 
/sbin/dhcpagent: debug: select_best: no valid OFFER/BOOTP reply
/sbin/dhcpagent: debug: select_best: no valid OFFER/BOOTP reply
/sbin/dhcpagent: debug: select_best: no valid OFFER/BOOTP reply

このメッセージが表示された場合は、サーバーの回答はクライアントに届いていません。つまり、要求がサーバーに届いていないか、またはサーバーがクライアントに回答を送信できないということになります。snoop を使用して DHCP ネットワークトラフィックを監視する方法」で説明しているように、サーバーで snoop を実行して、クライアントからのパケットがサーバーに届いたかどうかを判定します。

DHCP サーバーデバッグ出力

通常のサーバーデバッグ出力は、デーモンが起動したときに、サーバーの設定情報とそれに続く、各ネットワークインタフェースの情報を表示します。そのあと、デバッグ出力は、デーモンが処理した要求の情報を表示します。次の例では、DHCP サーバーと BOOTP リレーエージェントに関する出力の例を示しています。例 12-3 は DHCP サーバーに関するデバッグ出力を示します。このサーバーは起動直後で、応答しない別の DHCP サーバーが所有するアドレスを使用するクライアントのリースを拡張します。


例 12-3 DHCP サーバーに関するデバッグ出力


Daemon Version: 3.1  
Maximum relay hops: 4  
Transaction logging to console enabled.  
Run mode is: DHCP Server Mode.  
Datastore: nisplus  
Path: org_dir.dhcp.test..:dhcp.test..:$ 
DHCP offer TTL: 10  
Ethers compatibility enabled.  
BOOTP compatibility enabled.  
ICMP validation timeout: 1000 milliseconds, Attempts: 2.  
Monitor (0005/hme0) started...  
Thread Id: 0005 - Monitoring Interface: hme0 *****  
MTU: 1500      Type: DLPI  
Broadcast: 102.21.255.255 
Netmask: 255.255.0.0  
Address: 102.21.0.2  
Monitor (0006/nf0) started...  
Thread Id: 0006 - Monitoring Interface: nf0 *****  
MTU: 4352      Type: DLPI  
Broadcast: 102.22.255.255  
Netmask: 255.255.0.0  
Address: 102.22.0.1  
Monitor (0007/qe0) started...  
Thread Id: 0007 - Monitoring Interface: qe0 *****  
MTU: 1500      Type: DLPI   
Broadcast: 102.23.63.255  
Netmask: 255.255.192.0  
Address: 102.23.0.1  
Read 33 entries from DHCP macro database on Tue Aug 10 15:10:27 1999 
Datagram received on network device: qe0  
Client: 0800201DBA3A is requesting verification of address owned by 102.21.0.4 
Datagram received on network device: qe0  
Client: 0800201DBA3A is requesting verification of address owned by 102.21.0.4  
Datagram received on network device: qe0  
Client: 0800201DBA3A is requesting verification of address owned by 102.21.0.4  
Datagram received on network device: qe0  
Client: 0800201DBA3A maps to IP: 102.23.3.233  
Unicasting datagram to 102.23.3.233 address.  
Adding ARP entry: 102.23.3.233 == 0800201DBA3A  
DHCP EXTEND 0934312543 0934316143 102.23.3.233 102.21.0.2 
          0800201DBA3A SUNW.SPARCstation-10 0800201DBA3A

例 12-4 は、BOOTP リレーエージェントとして起動し、クライアントから DHCP サーバーへ要求をリレーし、サーバーの回答をクライアントにリレーする DHCP デーモンからのデバッグ出力を示します。


例 12-4 BOOTP リレーに関するデバッグ出力の例


Relay destination: 102.21.0.4 (blue-servr2)           network: 102.21.0.0  
Daemon Version: 3.1  
Maximum relay hops: 4  
Transaction logging to console enabled.  
Run mode is: Relay Agent Mode.  
Monitor (0005/hme0) started...  
Thread Id: 0005 - Monitoring Interface: hme0 *****  
MTU: 1500      Type: DLPI  
Broadcast: 102.21.255.255  
Netmask: 255.255.0.0  
Address: 102.21.0.2  
Monitor (0006/nf0) started...  
Thread Id: 0006 - Monitoring Interface: nf0 *****  
MTU: 4352      Type: DLPI  
Broadcast: 102.22.255.255  
Netmask: 255.255.0.0  
Address: 102.22.0.1  
Monitor (0007/qe0) started...  
Thread Id: 0007 - Monitoring Interface: qe0 *****  
MTU: 1500      Type: DLPI  
Broadcast: 102.23.63.255  
Netmask: 255.255.192.0  
Address: 102.23.0.1  
Relaying request 0800201DBA3A to 102.21.0.4, server port.  
BOOTP RELAY-SRVR 0934297685 0000000000 0.0.0.0 102.21.0.4 0800201DBA3A N/A 0800201DBA3A  
Packet received from relay agent: 102.23.0.1  
Relaying reply to client 0800201DBA3A  
Unicasting datagram to 102.23.3.233 address.  
Adding ARP entry: 102.23.3.233 == 0800201DBA3A  
BOOTP RELAY-CLNT 0934297688 0000000000 102.23.0.1 102.23.3.233 0800201DBA3A N/A 0800201DBA3A  
Relaying request 0800201DBA3A to 102.21.0.4, server port.  
BOOTP RELAY-SRVR 0934297689 0000000000 0.0.0.0 102.21.0.4 0800201DBA3A N/A 0800201DBA3A  
Packet received from relay agent: 102.23.0.1  
Relaying reply to client 0800201DBA3A  
Unicasting datagram to 102.23.3.233 address.  
Adding ARP entry: 102.23.3.233 == 0800201DBA3A

問題がある場合は、このデバッグ出力が警告またはエラーメッセージを表示します。表 12-4 を使用してエラーメッセージまたは条件を検索し、解決法を見つけてください。

表 12-4 DHCP サーバーのエラーメッセージ

メッセージ 

説明 

解決法 

ICMP ECHO reply to OFFER candidate: ip_address disabling

DHCP サーバーは、クライアントに IP アドレスを提供する前に、アドレスを ping してそのアドレスが使用されていないことを確認する。クライアントが回答する場合、そのアドレスは使用されている

設定するアドレスが使用されていないことを確認する 

No more IP addresses on network_address network.

ネットワークテーブルごとのクライアントのアドレスの中に利用可能な IP アドレスがない 

DHCP Manager または pntadm を使用して IP アドレスを追加割当する。DHCP デーモンが複数のサブネットを監視している場合は、追加のアドレスが必ずクライアントが割り当てられているサブネット用であること

No more IP addresses for network_address network BOOTP 互換モードで DHCP デーモンを実行時 (-b オプション)

BOOTP はリース期間を使用しないので、DHCP サーバーは、BOOTP クライアントに割り当てるために設定された BOOTP フラグを持つ空きアドレスを検索する 

DHCP Manager を使用して、BOOTP アドレスを割り当てる 

Request to access nonexistent per network database: database_name in datastore: datastore.

DHCP サーバーの設定中に、サブネット用の DHCP ネットワークテーブルが作成されなかった 

DHCP Manager または pntadm を使用して、DHCP ネットワークテーブルと新しい IP アドレスを作成する

There is no table_name dhcp-network table for DHCP client's network.

DHCP サーバーの設定中に、サブネット用の DHCP ネットワークテーブルが作成されなかった 

DHCP Manager または pntadm を使用して、DHCP ネットワークテーブルと新しい IP アドレスを作成する

Client using non_RFC1048 BOOTP cookie.

ネットワーク上のデバイスが、BOOTP のサポートされていない実装にアクセスしようとした 

このデバイスを設定する必要がない場合は、このメッセージを無視する 

Client client_id is trying to verify unrecorded address ip_address, ignored.

クライアント上の /etc/dhcp/interface.dhc ファイルにある IP アドレスとクライアント ID が、DHCP サーバーで確認された DHCP ネットワークデータベースにある IP アドレスやクライアント ID と一致しない

この状態は、ローカルファイルを DHCP データ保存方法として使用し、情報を共有しない複数の DHCP サーバーを持っているか、DHCP ネットワークテーブルを変更した場合に発生する 

次のコマンドを入力して、クライアントの DHCP プロトコルを再起動する 

ifconfig interface dhcp release

ifconfig interface dhcp start

DHCP snoop 出力

snoop 出力に、DHCP クライアントマシンと DHCP サーバーマシンの間でパケットが交換されていることが表示されます。各マシンの IP アドレスと、中間のリレーエージェントやルーターがパケットごとに表示されます。パケットの交換が表示されない場合は、クライアントマシンがサーバーマシンとまったく通信できていない場合がありますが、これは下位の問題です。一般的な障害追跡の方法については、「一般的な障害追跡方法」を参照してください。

snoop 出力を評価するためには、要求が BOOTP リレーエージェントを通して送受信される必要があるなど、期待される動作の内容を理解しておく必要があります。また、関連するシステムの MAC アドレスや IP アドレス、システムが複数の場合はネットワークインタフェースについても把握し、それらの値が期待されるものであることを判定できるようにしておく必要があります。例 12-5 では、blue-servr2 上にある DHCP サーバーから、MAC アドレスが 8:0:20:8e:f3:7e で、割り当てられた IP アドレスが 192.168.252.6、ホスト名が white-6 のクライアントに送信された DHCP 確認メッセージに関する通常の snoop 出力を示します。標準ネットワークオプションのいくつかと複数のベンダー固有のオプションも、クライアントに送信されます。


例 12-5 1 つのパケットに関する snoop 出力の例


ETHER:  ----- Ether Header ----- 
ETHER:   
ETHER:  Packet 26 arrived at 14:43:19.14 
ETHER:  Packet size = 540 bytes 
ETHER:  Destination = 8:0:20:8e:f3:7e, Sun 
ETHER:  Source      = 8:0:20:1e:31:c1, Sun 
ETHER:  Ethertype = 0800 (IP) 
ETHER:  
IP:   ----- IP Header ----- 
IP:    
IP:   Version = 4 
IP:   Header length = 20 bytes 
IP:   Type of service = 0x00 
IP:         xxx. .... = 0 (precedence) 
IP:         ...0 .... = normal delay 
IP:         .... 0... = normal throughput 
IP:         .... .0.. = normal reliability 
IP:   Total length = 526 bytes 
IP:   Identification = 64667 
IP:   Flags = 0x4 IP:         .1.. .... = do not fragment 
IP:         ..0. .... = last fragment 
IP:   Fragment offset = 0 bytes 
IP:   Time to live = 254 seconds/hops 
IP:   Protocol = 17 (UDP) 
IP:   Header checksum = 157a 
IP:   Source address = 102.21.0.4, blue-servr2 
IP:   Destination address = 192.168.252.6, white-6 
IP:   No options 
IP:   UDP:  ----- UDP Header ----- 
UDP:   
UDP:  Source port = 67 
UDP:  Destination port = 68 (BOOTPC) 
UDP:  Length = 506  
UDP:  Checksum = 5D4C  
UDP:  
DHCP: ----- Dynamic Host Configuration Protocol ----- 
DHCP:  
DHCP: Hardware address type (htype) =  1 (Ethernet (10Mb)) 
DHCP: Hardware address length (hlen) = 6 octets 
DHCP: Relay agent hops = 0 
DHCP: Transaction ID = 0x2e210f17 
DHCP: Time since boot = 0 seconds 
DHCP: Flags = 0x0000 
DHCP: Client address (ciaddr) = 0.0.0.0 
DHCP: Your client address (yiaddr) = 192.168.252.6 
DHCP: Next server address (siaddr) = 102.21.0.2 
DHCP: Relay agent address (giaddr) = 0.0.0.0 
DHCP: Client hardware address (chaddr) = 08:00:20:11:E0:1B 
DHCP:  
DHCP: ----- (Options) field options ----- 
DHCP:  
DHCP: Message type = DHCPACK 
DHCP: DHCP Server Identifier = 102.21.0.4 
DHCP: Subnet Mask = 255.255.255.0 
DHCP: Router at = 192.168.252.1 
DHCP: Broadcast Address = 192.168.252.255 
DHCP: NISPLUS Domainname = dhcp.test 
DHCP: IP Address Lease Time = 3600 seconds 
DHCP: UTC Time Offset = -14400 seconds 
DHCP: RFC868 Time Servers at = 102.21.0.4 
DHCP: DNS Domain Name = sem.west.dor.com 
DHCP: DNS Servers at = 102.21.0.1 
DHCP: Client Hostname = white-6 
DHCP: Vendor-specific Options (166 total octets): 
DHCP:   (02) 04 octets  0x8194AE1B (unprintable) 
DHCP:   (03) 08 octets  "pacific" 
DHCP:   (10) 04 octets  0x8194AE1B (unprintable) 
DHCP:   (11) 08 octets  "pacific" 
DHCP:   (15) 05 octets  "xterm" 
DHCP:   (04) 53 octets  "/export/s28/base.s28s_nxt/latest/Solaris_8/Tools/Boot"
DHCP:   (12) 32 octets  "/export/s28/base.s28s_nxt/latest" 
DHCP:   (07) 27 octets  "/platform/sun4m/kernel/unix" 
DHCP:   (08) 07 octets  "EST5EDT" 
  0: 0800 208e f37e 0800 201e 31c1 0800 4500    .. .坦‾.. .1...E.
 16: 020e fc9b 4000 fe11 157a ac15 0004 c0a8    ....@....z......           
 32: fc06 0043 0044 01fa 5d4c 0201 0600 2e21    ...C.D..]L.....!           
 48: 0f17 0000 0000 0000 0000 c0a8 fc06 ac15    ................           
 64: 0002 0000 0000 0800 2011 e01b 0000 0000    ........ .......           
 80: 0000 0000 0000 0000 0000 0000 0000 0000    ................           
 96: 0000 0000 0000 0000 0000 0000 0000 0000    ................          
112: 0000 0000 0000 0000 0000 0000 0000 0000    ................          
128: 0000 0000 0000 0000 0000 0000 0000 0000    ................          
144: 0000 0000 0000 0000 0000 0000 0000 0000    ................          
160: 0000 0000 0000 0000 0000 0000 0000 0000    ................          
176: 0000 0000 0000 0000 0000 0000 0000 0000    ................          
192: 0000 0000 0000 0000 0000 0000 0000 0000    ................          
208: 0000 0000 0000 0000 0000 0000 0000 0000    ................          
224: 0000 0000 0000 0000 0000 0000 0000 0000    ................          
240: 0000 0000 0000 0000 0000 0000 0000 0000    ................          
256: 0000 0000 0000 0000 0000 0000 0000 0000    ................          
272: 0000 0000 0000 6382 5363 3501 0536 04ac    ......c.Sc5..6..          
288: 1500 0401 04ff ffff 0003 04c0 a8fc 011c    ................          
304: 04c0 a8fc ff40 0964 6863 702e 7465 7374    .....@.dhcp.test          
320: 3304 0000 0e10 0204 ffff c7c0 0404 ac15    3...............          
336: 0004 0f10 736e 742e 6561 7374 2e73 756e    ....sem.west.dor          
352: 2e63 6f6d 0604 ac15 0001 0c07 7768 6974    .com........whit          
368: 652d 362b a602 0481 94ae 1b03 0861 746c    e-6+.........pac          
384: 616e 7469 630a 0481 94ae 1b0b 0861 746c    ific.........pac          
400: 616e 7469 630f 0578 7465 726d 0435 2f65    ific...xterm.5/e          
416: 7870 6f72 742f 7332 382f 6261 7365 2e73    xport/s28/base.s          
432: 3238 735f 776f 732f 6c61 7465 7374 2f53    28s_nxt/latest/S          
448: 6f6c 6172 6973 5f38 2f54 6f6f 6c73 2f42    olaris_8/Tools/B          
464: 6f6f 740c 202f 6578 706f 7274 2f73 3238    oot. /export/s28          
480: 2f62 6173 652e 7332 3873 5f77 6f73 2f6c    /base.s28s_nxt/l         
496: 6174 6573 7407 1b2f 706c 6174 666f 726d    atest../platform          
512: 2f73 756e 346d 2f6b 6572 6e65 6c2f 756e    /sun4m/kernel/un          
528: 6978 0807 4553 5435 4544 54ff              ix..EST5EDT.  

不正確な DHCP 設定情報に伴う問題

DHCP が受信したネットワーク設定情報の中に、誤った NIS ドメイン名や不正確なルーター IP アドレスのように不正確な情報がある場合は、このクライアントの DHCP サーバーが処理したマクロの中のオプションの値を調べる必要があります。

次の一般的なガイドラインを使用して、不正確な情報がクライアントに伝えられた場所を判定してください。