TCP/IP とデータ通信

クライアントが DHCP サーバーに接続できない場合

問題

DHCP クライアントのソフトウェアを構成し、そのクライアントを再起動した後で、ネットワーク上のサーバーにクライアントから接続することができない。DHCP のネットワークコマンドがすべて失敗し、DHCP サーバーへの接続をクライアントが試行したが失敗した、というメッセージが表示される。

一般的なエラーメッセージは以下のとおりです。


DHCP or BOOTP server not responding


(DHCP サーバーまたは BOOTP サーバーが応答しない)


A request to access nonexistent dhcp_network database: databasename in datastore: datastore.


(データストア datastore 内の、存在しない dhcp_network データベース databasename へのアクセス要求である)


No more IP addresses for network_address network.


(network_address には、もう IP アドレスがない)

検証: 問題を正確に突き止めるために、以下の処置を実行します。

  1. クライアントをデバッグモードで動作させます。

  2. 手動でインタフェースの構成を試行して、ハードウェアが機能していることを確認します。

  3. DHCP サーバーをデバッグモードで実行します。

  4. snoop コマンドを使用して、DHCP サーバーとクライアントとの間で送信されるメッセージを追跡します。

  5. 問題がクライアントマシン側にあるのかサーバーマシン側にあるのかを調べます。

  6. エラーメッセージを調べて、以下の情報から解決策を選択します。

クライアントをデバッグモードで動作させる

クライアントをデバッグモードで動作させます。稼働している製品のマニュアルを参照してください。

Solaris クライアントの場合

  1. 以下のように入力して起動します。


    /sbin/dhcpagent -d3
    

DOS クライアントの場合

PC-NFS DOS クライアント上で、以下を実行します。

  1. AUTOEXEC.BAT ファイルを編集し、SNCLIENTSNCLIENT /D に置換します。

  2. クライアントを再起動します。

インタフェースを手動で構成する

dhcpagent をデバッグモードで開始した後で、以下のように入力して、手動でインタフェースの構成を試行することができます。


ifconfig interface_name auto_dhcp

送受信されたパケットが表示されます。

サーバーをデバッグモードで動作させる

  1. クライアントと同じサブネット上の DHCP サーバーにスーパーユーザーでログインします。

  2. デバッグモードで、DHCP サーバーを終了して再起動します。たとえば、以下のようにします。


    /etc/init.d/dhcp stop
    /usr/lib/inet/in.dhcpd -d -v
    

    あるいは、i オプションが存在する場合には、コマンドを以下の形式で入力します。


    /usr/lib/inet/in.dhcpd -i interface_names -d -v
    

snoop を使用してネットワークのトラフィックを監視する

  1. クライアントと同じサブネット上の DHCP サーバーまたは BOOTP 中継エージェントにスーパーユーザーでログインします。

  2. snoop コマンドを使用して、ネットワークのトラフィックを追跡します。たとえば、以下のように入力します。


    snoop -o /tmp/output udp port 67 または udp port 68
    
    あるいは

    snoop -o /tmp/output udp port bootps または udp port bootpc
    
    インタフェースごとの引数が存在する場合は、その引数を加えます。

  3. クライアントをブートして、サーバー上でネットワークのメッセージを監視します。

  4. 以下のように入力します。


    snoop -i /tmp/output -x 0 -v
    
    このコマンドにより、パケットのトレースを参照することができます。

エラーメッセージを調べる

デバッグモードで in.dhcpd コマンドを実行した結果の出力を調べ、調べたエラーメッセージまたは状態を使用して、以下の情報から解決策を見つけ出します。

問題

以下のエラーメッセージが表示される。


Datagram received on network device: le0


(ネットワークデバイス le0 上でデータグラムを受け取った)


ICMP ECHO reply to OFFER candidate: ip_address disabling


(OFFER 候補 ip_address に対する ICMP ECHO の応答が無効にされた)

検証: DHCP サーバーは、クライアントに対して IP アドレスを提供する前に、その IP アドレスに対して ping コマンドを使用して当該アドレスが使用中ではないことを確認します。クライアントが応答した場合、その IP アドレスは使用中です。

解決策: 設定した IP アドレスがまだ使用中ではないことを確認します。

問題

以下のエラーメッセージが表示される。


No more IP addresses for network_address network


(network_address ネットワークには、もう IP アドレスがない)

検証: クライアントの dhcp_network テーブル内に、使用可能な IP アドレスがありません。

解決策: dhcpconfig コマンドを使用して、さらに IP アドレスを割り当てます。DHCP デーモンが複数のサブネットを監視している場合は、追加の IP アドレスが、クライアントが配置されているサブネットに対するものであることを確認します。

問題

dhcp_network データベース内に id_name という不良なクライアント ID がある。

検証: dhcp_network テーブル内のクライアント ID (MAC アドレス) が間違っています。

解決策: イ−サネットを使用している場合、クライアント ID は 01 の後にイ−サネットアドレスが続きます。アドレス内のすべての文字が大文字になっていることを確認します。00 は、アドレスが割り当てられていないことを表します。

問題

以下のエラーメッセージが表示される。


Request to access nonexistent dhcp_network database: database_name in datastore: nisplus_datastore.


(データストア nisplus_datastore 内の、存在しない dhcp_network データベース database_name へのアクセス要求である)

検証: DHCP サーバーの構成時に、dhcpconfig スクリプトがサブネットの dhcp_network テーブルを作成しませんでした。テストネットワークとして、LAN (たとえば、サーバー 1 つとクライアント 2 つ) を設定して切り離した場合に起こることがあります。

解決策: dhcpconfig コマンドを使用して、dhcp_network テーブルと新規 IP アドレスを初期化します。

問題

以下のエラーメッセージを受け取る。


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


(クライアント client_id が、記録されていないアドレス ip_address の確認を試行して無視された)

検証: このメッセージを受け取る場合は、考えられる理由が 2 つあります。

  1. dhcp_network テーブルが削除されている場合に、このメッセージを受け取ることがあります。Solaris DHCP サーバーのみを使用している場合は、通常これが理由です。

  2. データストア用に NIS+ が使用されていないことが原因で情報が共有されていない場合に、このメッセージを受け取ることがあります。サーバーがデータを共有していることを確認します。

異機種システムが混在しているサーバーのグループがある場合、このメッセージを無視します。

解決策: 以下のように入力して、クライアント上の古いキャッシュファイルを削除します。


ifconfig interface_name dhcp release

問題

DHCP は開始されているが、必要なネットワークサービスの一部が開始しない。

検証: DHCP サーバーが、必要な構成を供給していません。

解決策: サーバーが、必要なパラメータを送信しない理由を調べます。必要なパラメータを送信するようにサーバーを構成します。

問題

DHCP は開始されているが、特定のネットワークサービス (たとえば、NIS や NIS+) がエラーを報告するか、またはハングする。ホストが、ネットワーク上のその他のホストと通信を行うことができない。

検証: dhcpagent コマンドが、DHCP と通信を行うことができない (DHCP が使用可能でないため、と考えられます) ために、キャッシュに書き込まれているデータを使用しました。

解決策: キャッシュを削除します。以下のように入力します。


ifconfig interface_name dhcp release

キャッシュを削除しても、正しい構成を取得するという問題は解決されないため、ホストを手動で構成する必要がある場合があります。以下のように入力してトリガーファイルを削除することにより、ブート時に DHCP を無効にする必要があります。


rm /etc/dhcp.interface_name

問題

クライアントはブートして適正に動作するが、以下のメッセージが表示される。


DHCP renewal on interface_name failed


(interface_name に対する DHCP の更新が失敗した)

検証: DHCP は動作していますが、dhcpagent によりサーバーに接続してリースの延長を行うことができません。

解決策: サーバーが応答しない理由を調べます。dhcptab 内に設定されているルーターの値が間違っているか、またはクライアントのネットワークに対して期限が切れていることが理由である可能性があります。

問題

失敗した DHCP の更新についてのメッセージを受け取り、その後で以下のメッセージがコンソールに表示される。


DHCP lease expired on interface_name: interface is now down


(interface_name に対する DHCP のリースの期限が切れて、インタフェースは現在ダウンしている)

ネットワークサービスがこの時点でハングすることが考えられる。

検証: リースの期限が切れました。クライアントは複数回の試行を行いましたが、リースを延長することができませんでした。

解決策: サーバーが応答しない理由を調べます。クライアントを再起動します。