TCP/IP とデータ通信

第 17 章 DHCP の障害追跡

この章では、DHCP の使用時に検出される可能性がある問題の障害追跡を行う方法について説明します。最初の DHCP サーバーをインストールして構成する時点で発生する可能性のある問題に対する解決策も説明します。DHCP サーバーの構成スクリプト (dhcpconfig) についての内容説明 (種々のスクリプト構成要素の目的と、スクリプトがインストール手順を実行する過程) も記載されています。さらに、ネットワークに DHCP クライアントを初めて追加する際と後続して追加する際に検出される可能性がある問題についても説明します。

方法および注意事項

以下の障害追跡手法は、原因を特定できない場合の問題解決に役立ちます。

この章では、上記の手法を詳細に説明します。また、本書を使用しても問題を解決することができない場合の問い合わせ先を紹介します。

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

snoop コマンドを使用してネットワークのトラフィックを監視することができます。

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

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

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


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

  3. クライアントをブートして、クライアントとサーバー (複数可) との間の DHCP メッセージの交換を監視します。

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


    snoop -i /tmp/output -x 0 -v
    

クライアントのハードウェアアドレスを指定することによって snoop の適用範囲を制限することができます。DHCP/BOOTP プロトコルを解釈できる snoop は、Solaris 2.5 オペレーティング環境およびその互換バージョンで使用できます。

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

DHCP クライアントをデバッグモードで動作させると、クライアントとサーバーとの間で進行中のほとんどの対話が明らかになります。クライアントが動作しているベースの製品については、関連のマニュアルを参照してください。

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

DHCP クライアントのデバッグは、DHCP クライアントをブートした後でのみ可能です。DHCP に問題が発生した場合は、DHCP を無効にしてブートする必要があります。以下の手順は、ホストのブート後に一度だけ実行することができます。ただし、シングルユーザーモードでの実行を推奨します。

  1. DHCP エージェントを設定して、サーバーと交換するパケットの詳細をログに記録することができます。この記録を行うには、以下のようにして、デバッグモードをオンに設定してエージェントを開始する必要があります。


    /sbin/dhcpagent -n -d3 &
    

    -d3 フラグはレベル 3 でのデバッグをオンに設定し、-n フラグは「DHCP が正常な場合でもインタフェースを構成してはならない」という意味です。


    注 -

    レベル 3 およびそれより下位のレベルでは、ユーザーに適切な情報が戻されます。レベル 3 より上位のレベルは、情報が生のパケットのまま戻されるため、開発者の方または高度な専門知識を持つ方だけが使用します。


  2. dhcpagent のインスタンスは一度に 1 つだけが実行可能なため、ここでエージェントを開始する前に、すでに起動済みのエージェントをすべて停止する必要があります。エージェントを停止するには、エージェントのプロセス ID を調べて、以下のように終了シグナルを送信します。


    kill -TERM process_id_of_dhcpagent
    

  3. エージェントをデバッグモードで開始した後で、以下のように入力して、手動でインタフェースの構成を試行します。


    ifconfig interface_name auto_dhcp
    

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


    注 -

    DHCP がインタフェースの構成を試行している間、インタフェースはパケットの送受信を行うことができません。インタフェースがダウンしている間は、その他のネットワークサービス (たとえば NIS や NFS) が悪影響を受ける場合があります。


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

DHCP サーバーを停止して、デバッグモードで再起動します。以下に例を示します。

  1. 停止スクリプトを使用してサーバーを停止します。


    /etc/init.d/dhcp stop
    

  2. サーバーをデバッグ・冗長モードで再起動します。ただし、/etc/init.d/dhcp 起動スクリプト内に指定されているフラグに加えて、-d フラグと -v フラグを使用します。たとえば、i オプションが存在する場合は、以下の形式でコマンドを入力します。


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

DHCP クライアントの再起動

DHCP クライアントをデバッグモードで動作させた後で、リブートを試行することができます。リブートを行うと、ネットワークのハードウェアとソフトウェアがリセットされます。

DHCP クライアントを再起動するには

    クライアントをリブートします。

DHCP サーバーを再起動するには

  1. DHCP サーバーにスーパーユーザーでログインします。

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


    /etc/init.d/dhcp stop
    

    約 10 秒間待機します。

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


    /etc/init.d/dhcp start
    

デバッグの完了後に DHCP サーバーを再起動するには

  1. DHCP サーバーのデーモンを再起動します。

  2. DHCP サーバーにスーパーユーザーでログインします。

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


    /etc/init.d/dhcp stop
    

    約 10 秒間待機します。

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


    /etc/init.d/dhcp start
    

一般的な問題

この節では、DHCP に関して検出される可能性がある、より一般的な問題の一部と、それらの問題に対する処置について説明します。

問題

DHCP クライアントが DHCPDISCOVER または DHCPREQUEST というメッセージを送出しているが、DHCP サーバーが応答しない。

検証: サーバーマシンのコンソール出力を確認します。割り当てるべき IP アドレスがサーバーに残っていないことが考えられます。

解決策: より多くの IP アドレスを追加します。

検証: サーバーマシンのコンソール出力を確認します。クライアントが認識されていないことをサーバーが示している場合は、DHCP サーバーのデータベースがフラッシュして、その結果としてクライアントの認識に失敗していることが考えられます。

解決策: クライアント上の DHCP キャッシュファイルをすべて削除します。

  1. Ctrl -C を入力してブートに割り込みます。

  2. 以下のように入力して、キャッシュを削除します。


    cd /etc/dhcp; rm interface_name.dhc
    

  3. 以下のように入力して、初期化プロセスを再起動します。


    ifconfig interface_name dhcp release
    

検証: サーバーマシンのコンソール出力を確認します。クライアントのネットワークに対するサポートが DHCP データベースに追加されていないことが考えられます。

解決策: dhcpconfig を使用して、クライアントのネットワークに対するサポートを追加します。

検証: クライアントが DHCP サーバーのネットワークとは別個のネットワーク上にあり、かつ BOOTP 中継エージェントがインストールされていないか、または設定されていません。

解決策: BOOTP 中継エージェントをインストールして設定します。さらに、リモートネットワークの netmasks(4) データベースにエントリを追加することが必要な場合があります。

問題

クライアントのログに、アドレスがすでに使用中であるというメッセージが記録される。

検証: アドレスが他で使用中であるかどうかを検査します。同じメッセージがクライアントのログに継続して記録される場合は、サーバーがアドレスを検査していないか、またはアドレスを拒否するクライアントのメッセージを無視しているかのいずれかが考えられます。 n オプション付きで in.dhcpd コマンドを使用していないことを検査して確認します。

解決策: サーバーが不良なアドレスを配付したかどうかを確認します。サーバーが誤動作しているか、または別のユーザーが同じアドレスを不法使用しているかのいずれかです。

問題

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


DHCP renewal on interface_name failed


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

検証: DHCP クライアントが、指定したインタフェースについてのリースを更新することができませんでした。

解決策: DHCP サーバーが適正に動作していることを確認します。

問題

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


Address of interface name has changed


(インタフェース name のアドレスが変更されている)

検証: インタフェースのアドレスまたは状態が、DHCP エージェントが予期するものと異なっています。アドレスが手動で変更されたことが考えられます。

解決策: 解決策はありません。エージェントは、インタフェースを構成する試行を停止します。

支援の要請先

上記の方法を適用しても問題を解決できない場合は、Solaris のご購入先にお問い合わせください。最善のサービスを確実に受けるために、以下の情報をあらかじめご確認の上、お問い合わせください。

DHCP サーバーの障害追跡

この節では、DHCP サーバーに発生する可能性がある問題について説明します。

ファイルの使用時

ネームサービスとして files を使用している際に問題が発生した場合は、以下の指示に従います。

問題

/var/dhcp ディレクトリにアクセスできない。そのディレクトリが存在しないか、または UNIX のファイル読み取り権を持っていない。

検証: 以下のコマンドを使用します。


ls -d /var/dhcp

解決策: DHCP サーバーがまだ構成されていません。dhcpconfig を実行します。

NIS+ の使用時

ネームサービスとして NIS+ を使用している際に問題が発生した場合は、以下の指示に従います。

問題

NIS+ ドメイン内にルートオブジェクトが存在しない。

検証: 以下のコマンドを入力します。


niscat -o org_dir

解決策: Solaris NIS+ 設定用のマニュアルを参照してください。

問題

root のアカウントに、org_dirオブジェクトの下でテーブルを作成するアクセス権がない。

検証: 以下のコマンドを入力します。


niscat -o org_dir

解決策: nischmod コマンドを使用して table.org_dir.domainname. に対するアクセス権を変更します。

問題

root のアカウントに、org_dir の下でテーブルを作成するアクセス権がない。通常これは、root のアカウントの主体名が org_dir オブジェクトの所有グループのメンバではないか、または所有グループが存在しないかのいずれかを表します。

検証: 以下のコマンドを入力して、所有グループ名を検索します。

niscat -o org_dir

解決策:

  1. nisgrpadm -l group と入力して、グループのメンバーを確認します。

  2. 現システムの主体名がグループ内にない場合は、nisgrpadm -a group principalname と入力して主体名を追加します。通常グループは admin です。グループが admin ではない場合は、dhcpconfig スクリプトを編集してグループを変更し、使用中のグループ名と一致させます。

  3. /usr/lib/nis/nisctl -fg と入力して、変更が即時に行われるようにキャッシュをフラッシュします。

問題

ドメイン名が設定されていない。

検証: 以下のコマンドを入力します。


domainname

このコマンドにより空文字列が表示された場合、当該ドメインにはドメイン名が設定されていません。

解決策: domainname コマンドを使用して正しいドメイン名を設定します。ドメイン名の値を /etc/default ドメイン内に置きます。

問題

NIS_COLD_START ファイルが存在しない。

検証: サーバーシステム上で以下のコマンドを入力します。


strings /var/nis/NIS_COLD_START

解決策: NIS+ クライアントを 1 つ作成します。『Solaris NIS+ QuickStart』を参照してください。

問題

NIS+ を選択したが、サイトで NIS+ が動作していない

検証: サーバーにログインして、以下のコマンドを入力します。


 ps -ef | grep nis

NIS+ が動作している場合は、/usr/sbin/rpc.nisd -YB という出力に類似した出力が表示されます。

解決策: 以下のようにして、NIS+ サーバーを作成します。

  1. クライアント上で、NIS+ の root のマスターサーバーをドメイン用に設定します。たとえば、以下のようにします。


    /usr/lib/nis/nisserve -r
    

  2. ローカルの /etc ファイルから NIS+ テーブルを生成します。たとえば、以下のようにします。


    nispopulate -F /etc
    

  3. サーバー上で、NIS+ が動作していることを確認します。たとえば、以下のようにします。


    /usr/lib/nis/nisstat
    nisls org_dir  
    niscat hosts.org_dir
    

ネームサービスとして NIS+ を使用できない場合

以下のエラーメッセージのうちのいずれかまたは両方が表示されます。


!!! warning !!! trailing dot ignored - use dns domain name syntax


(!!! 警告 !!! 後尾のドットが無視された - DNS のドメイン名構文を使用してください)


Error 20 from NIS+; unable to use NIS+ as name service.


(NIS+ でエラー 20。NIS+ をネームサービスとして使用できない)

上記のメッセージは、NIS+ ドメイン内に該当する名前が存在しないか、または NIS+ ドメインが存在しないかのいずれかを表します。以下の情報を使用し、NIS+ の構成内のエラーを見つけ出して解決します。

問題

サーバーシステムのドメイン名の末尾は、ピリオド 1 つで終わる。

検証: nisdefaults コマンドを入力して、ドメイン名の末尾にピリオドが 2 つあるかどうかを確認します。

解決策:

  1. /etc/defaultdomain ファイルを編集して、ドメイン名から末尾のピリオド (.) を削除します。

  2. システムをリブートし、dhcpconfig スクリプトを再度実行します。

問題

ホスト名にドメイン名が含まれている。たとえば、ホストが myhost ではなく myhost.Faxco.COM と設定されている。

検証: nisdefaults コマンドを入力して、ドメイン名を含んでいるホスト名を 2 度表示します。

解決策:

  1. ホスト名が間違っている場合は、sys-unconfig コマンドを入力し、構成設定値を削除してシステムを停止します。

  2. システムをリブートし、ホスト名とドメイン名の適正な設定値を指定します。

問題

root のアカウントに、NIS+ ドメイン内の org_dir オブジェクトに対する作成のアクセス権がない。

検証: 以下のコマンドを入力します。


niscat -o org_dir

解決策: nischmod コマンドを使用して、table.org_dir.domainname に対するアクセス権を変更します。

ファイルのネームサービスを利用する際の入出力エラー

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


File system I/O error number accessing file datastore.


(ファイルのデータストアにアクセスする際に入出力エラー number が発生)

上記のエラーメッセージを受け取った場合は、以下に示すエラーメッセージのリストを調べます。以下に示すエラーメッセージは、/var/dhcp 内のファイルのオープン、読み取り、書き込みのいずれかをオペレーティングシステムが試行した際に、オペレーティングシステムが返すエラーメッセージです。

問題

エラー番号 2 (ENOENT)

検証: ファイルまたはディレクトリが存在しません。

解決策: dhcpconfig コマンドを入力してファイルまたはディレクトリを作成します。

問題

エラー番号 13 (EACCES)

検証: ファイルまたはディレクトリにアクセスした際に、UNIX のアクセス権エラーが発生しました。

解決策: su コマンドを使用して UNIX のアクセス権を変更します。

ユーザーに DES 資格がない場合

問題

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


The user user does not have DES credentials in the NIS+ name service.


(ユーザー user には、NIS+ ネームサービスにおける DES 資格がない)

検証: 現システムの root のアカウントは、有効なデータ暗号化規格 (DES) 資格を NIS+ cred テーブル内に持っていません。

解決策: nisaddcred コマンドを使用して、 root のアカウントの資格を追加します。コマンド行に、UNIX ネット名と NIS+ 主体名を入力する必要があります。

ドメイン Faxco.COM 内のシステム mercury の DES 資格を追加する方法を以下の例に示します。


nisaddcred -p unix.mercury@Faxco.COM¥
-P mercury.Faxco.COM. DES Faxco.COM 

このコマンドでは、root のパスワード (暗号化された秘密鍵を作成するために必要です) を求めるプロンプトが表示されます。

データストア内にテーブルを作成するアクセス権がない場合

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


You do not have permission to create the tablename table in the servicename data store.


(servicename データストア内に tablename テーブルを作成するアクセス権がない)

テーブルをデータストア内に作成する際に問題が発生した場合は、以下の情報を検査します。

問題

root のアカウントに、org_dir オブジェクトの下でテーブルを作成するアクセス権がない。

検証: 通常これは、root のアカウントの主体名が org_dir オブジェクトの所有グループのメンバーではないか、または所有グループが存在しないかのいずれかを表します。

解決策:

  1. niscat -o org_dir と入力して、所有グループの名前を確認します。

  2. nisgrpadm -l admin と入力して、グループのメンバーを確認します。

  3. 現システムの主体名がグループ内にない場合は、nisgrpadm -a group principalname と入力して主体名を追加します。

  4. /usr/lib/nis/nisctl -f g と入力して、変更が即時行われるようにキャッシュをフラッシュします。

ネームサーバーを判定できない場合

DHCP サーバーの構成の際にネームサーバーを見つけることができない場合の解決策を以下に示します。

問題

dhcpconfig スクリプトで、サーバー名と IP アドレスが一致しなかった。

検証: コマンド getent hosts name を入力して、サーバーの IP アドレスを検索します。

解決策: hosts データベース内にエントリを作成します。

問題

dhcpconfig スクリプトが、サーバーの間違ったネームサービスを使用している。

検証: /etc/nsswitch.conf ファイル内の hosts エントリを調べて、IP アドレスの検索に使用されているネームサービス (xfnfilesnisnisplusdns のいずれか) を確認します。

解決策: /etc/nsswitch.conf ファイル内の hosts 命令を適正なネームサービスに変更します。nscd を停止して再起動します。

問題

dhcpconfig スクリプトがネームサービスを検査しなかった。

検証: /etc/nsswitch.conf ファイル内の [NOTFOUND=RETURN] 命令に先行するネームサービスが優先しています。指定されたネームサービスがエントリを見つけられなかった場合は、この命令の後に表示されているネームサービスはすべて検査されません。

解決策: /etc/nsswitch.conf ファイルから [NOTFOUND=RETURN] 命令を削除し、再度 dhcpconfig スクリプトを実行します。nscd を停止して再起動します。

DHCP テーブルの設定を試行した際のエラー

以下のエラーメッセージのうちの 1 つが表示されます。


The user username does not have permission to update the dhcptab table in the servicename resource.


(ユーザー username には、servicename リソース内の dhcptab テーブルを変更するアクセス権がない)


Error 10 from the Table subsystem accessing dhcptab table, message: NIS+ error while executing nis_modify_entry for [key=SUNW.PCNFS.5.1.1,flag=m],dhcptab.org_dir.island.ocean.: Permission denied Error trying to set up DHCP table, exiting.


(dhcptab テーブルにアクセスした際の Table サブシステムのエラー 10 の場合のメッセージ。[key=SUNW.PCNFS.5.1.1,flag=m],dhcptab.org_dir.island.ocean. に対して nis_modify_entry を実行中にNIS+ のエラー: DHCP テーブルの設定を試行した際にアクセス権拒否のエラーが発生して終了した)


Error 10 from the Table subsystem accessing dhcptab table, message: NIS+ error while executing nis_modify_entry for [key=SUNW.PCNFS.5.1.1,flag=m],dhcptab.org_dir.island.ocean.: Object with same name exists Error trying to set up DHCP table, exiting.


(dhcptab テーブルにアクセスした際の Table サブシステムのエラー 10 の場合のメッセージ。[key=SUNW.PCNFS.5.1.1,flag=m],dhcptab.org_dir.island.ocean. に対して nis_modify_entry を実行中に NIS+ のエラー: DHCP テーブルの設定を試行した際に同じ名前のオブジェクトが存在するというエラーが発生して終了した)

上記のエラーメッセージのうちの 1 つを受け取った場合は、以下の情報を検査すれば、DHCP サーバーの構成中に DHCP テーブルの設定を試行した際に発生した問題の解決策があります。

問題

NIS+ または UNIX のファイルシステムから DHCP テーブルにエントリを追加するアクセス権を持っていない。

検証: アクセス権を検査して、DHCP テーブルに対する必要なアクセス権を設定します。

解決策: 管理者が所定の管理グループのメンバーであり、NIS+ のマスターサーバーに書き込むアクセス権を持っていることを確認します。

dhcp_network テーブルへのアクセス権がない場合

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


You do not have permission to create {update} the tablename table in the servicename data store.


(servicename データストア内で tablename テーブルを作成する {変更する} アクセス権がない)

上記のメッセージを受け取った場合は、以下の情報を検査します。以下に示すのは、DHCP サーバーの構成中に dhcp_network テーブルにアクセスした際に発生した問題に対する解決策です。

問題

NIS+ または UNIX のファイルシステムから dhcp_network テーブルにエントリを追加するアクセス権がない。

検証: アクセス権を検査して、 dhcp_network テーブルに対する必要なアクセス権を設定します。

解決策: 管理者が所定の管理グループのメンバーであり、NIS+ のマスターサーバーに書き込むアクセス権を持っていることを確認します。

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

DHCP クライアントの障害追跡を行う場合は、クライアントの構成とクライアント〜サーバー間の通信についての問題点を理解しておく必要があります。DHCP がサーバーと通信できなかったか、または受け取った構成応答が間違っていたかのいずれかのために、DHCP がクライアントを正しく構成することに失敗する場合があります。さらに、クライアントが自己の IP アドレスを更新することができない場合には、DHCP のリースの期間の終わり頃になって問題が発生することがあります。

クライアントがサーバーと通信できない場合

クライアントとサーバーが相互に通信を行うことができない場合は、以前の DHCP のトランザクションからキャッシュに書き込んだ構成をクライアントが持っているかいないかに応じて結果が異なります。クライアントがキャッシュに書き込まれた構成を持っていて、かつリースがまだ有効な場合は、キャッシュのデータを使用してインタフェースを構成します。

ただし、キャッシュに書き込まれている構成が有効であるという外部での確認をクライアントが受け取っていないため、IP アドレス、ルーターのアドレス、およびその他の情報が有効であるという保証はありません。構成を受け取った際のネットワークとは別のネットワークにインタフェースが接続された場合は 2 種類のエラーが発生する可能性があり、発生する場合にはいずれか 1 つが発生します。その他のネットワークサービスを開始した際にいずれかのエラーが表示される場合があります。あるいはネットワーク上のその他のホストとの通信ができない場合があります。

逆に、期限が切れていないリースを持つキャッシュが存在しない場合、インタフェースは構成されません。

受け取った DHCP 構成が無効な場合

以下の 2 つの理由から、構成が無効なことがあります。

  1. クライアントに提供された IP アドレスが他で使用中であることを ARP によってクライアントが判定する。

    この場合、クライアントはサーバーに DHCPDECLINE メッセージを送信します。サーバーが不良なアドレスを 3 つ以上提供すると、dhcpagent は失敗します。

  2. クライアントは IP アドレスを取得したが、確認を試行するとサーバーが確認ではなく DHCPNAK メッセージを送信する。

クライアントが DHCPNAK メッセージを 3 回以上受け取ると、dhcpagent は失敗します。このことは、サーバーが誤動作していることを示します。

問題をクライアントまたはサーバーに切り離す場合

問題をクライアントマシンまたはサーバーマシンのいずれかの問題として切り離す場合は、以下の処置を実行します。

問題

DHCP サーバーマシンが動作していない。

検証: クライアントと同じサブネット上の別のマシンにログインし、ping コマンドを使用してサーバーへの接続を試行します。

解決策: サーバーマシン上で問題を診断します。

問題

DHCP サーバーが動作していない。

検証: サーバーにログインして、以下のコマンドを入力します。


ps -ef | grep dhcp

解決策:

  1. DHCP サーバーを停止して再起動します。

  2. 以下のコマンドを入力します。


    /etc/init.d/dhcp stop 
    

  3. 約 10 秒間待機してから、以下のコマンドを入力します。


    /etc/init.d/dhcp start 
    

問題

DHCP の際、ブートプロセスがハングする。

検証: インタフェースが primary とマークされますが、有効な DHCP トランザクションは発生していません。

解決策: control-C を入力して DHCP に割り込みます。ブートが継続します。


注 -

ブートは継続しますが、ホストが接続されているネットワークに対しては、ホストの間違った構成が行われる場合があります。


クライアントが 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 のリースの期限が切れて、インタフェースは現在ダウンしている)

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

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

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

BOOTP 互換モードにおいて、一部のクライアントが DHCP サーバーからブートしない場合

問題

DHCP デーモンが BOOTP 互換モードで動作している (-b オプション)。

検証: BOOTP はリース時間を使用しません。DHCP サーバーは、BOOTP フラグが設定されている空きアドレスを探して、BOOTP クライアントに割り当てます。

解決策: BOOTP アドレスを割り当てます。dhcpconfig を使用して、デーモンのオプションを変更します。

NIS + 構成の問題の診断

以下の情報を使用して、NIS+ ネームサービスの構成内にある、ブート時にクライアントがサーバーにアクセスできないというエラーを修正します。

問題

dhcptab テーブル内で、クライアントに対してネームサービスが構成されていない。

検証: サーバーにログインして、以下のコマンドを入力します。


dhtadm -P | grep ip_address

NISdmainDNSdmainNISservs などのエントリを検査します。エントリに対して入力されているアドレスが適正であることを確認します。たとえば、以下のようになります。


# dhtadm -P | grep 129.148.3.129.148.3.m:Subnet=255.255.255.0:Router=129.148.3.11: 
Broadcast=129.148.3.255:NISdmain="island.ocean":NISservs=129.148.3.3:


注 -

上記の行は、実際には 2 行に分かれないで 1 行で表示されます。


解決策: dhtadm を使用して、間違っているアドレスがあればすべて変更します。

問題

NIS+ を使用しているが、サーバーが NIS+ 互換モードで動作していない。NIS+ テーブルには Nobody カテゴリ用の読み取り権がないため、NIS クライアントが NIS+ テーブルに格納されている情報を読み取ることができない。

検証: 以下のコマンドを実行します。


nisls -l org_dir
このコマンドにより、.r---rmcdrmcdr--- のアクセス権が表示されます。

rpc.nisd デーモンに対して Y オプションが設定されているかどうかを検査します。たとえば、以下のように入力します。


ps -deaf | grep nis

解決策:

  1. NIS+ サーバーにスーパーユーザーでログインします。

  2. 以下のコマンドを入力します。


    /usr/lib/nis/nisserver -r -Y -d domainname
    

問題

デフォルトのルーターが間違っているため、クライアントが別のネットワーク上のサーバーに接続することができない。

検証: dhcptab テーブル内のルーターのシンボルの定義が本当にルーターであることを確認します。

解決策: dhtadm を使用して、テーブル内のルーターのシンボルを訂正します。

問題

NIS+ を動作させているが、NIS クライアントに対する DNS 転送がオンに設定されていない。

検証: 以下のコマンドを使用します。


ps -ef | grep rpc.nisd

-B オプションは、DNS 転送がオンに設定されて NIS が動作していることを表します。たとえば、以下のようになります。


/usr/sbin/rpc.nisd -B

解決策: DNS 転送を有効にして、NIS 互換モードで NIS+ サーバーを起動します。たとえば、以下のように入力します。


/usr/sbin/rpc.nisd -YB

ネームサービス構成の問題の診断

以下の情報を使用して、NIS ネームサービスの構成内にある、ブート時にクライアントがサーバーにアクセスできないというエラーを修正します。

問題

デフォルトのルーターが間違っているため、クライアントが別のネットワーク上のサーバーに接続することができない。

検証: dhcptab テーブル内のルーターのシンボルの定義が本当にルーターであることを確認します。デフォルトのルーターに問題がある場合は、サーバーベースのツールを用いて訂正を行います。

解決策: dhtadm を使用して、テーブル内のルーターのシンボルを訂正します。

問題

dhcptab テーブル内で、クライアントに対してネームサービスが構成されていない。クライアントに対しては、ネームサービスは DNS、NIS または NIS+ である必要があり、さらに必要なパラメータをクライアントごとに指定する必要がある。881

検証: クライアントの構成に関連する、ネットワークに固有なマクロを検査します。

  1. サーバーにログインし、以下のコマンドを入力します。


    dhtadm -P
    

  2. クライアントのネットワークに一致するエントリを探します。

解決策: dhtadm を使用し、以下に従って、ネームサービス用のクライアントのマクロを訂正します。

クライアントが、ネットワーク上の最初のクライアントである場合は、以下のようにします。

  1. dhtadm を使用してエントリを訂正します。

  2. 次に、サーバー上で以下のように入力します。


    /etc/init.d/dhcp stop,
    /etc/rc3.d/S34dhcp start
    
    さらに、クライアントを再起動します。


    注 -

    クライアントに対して、ネームサービスの選択をサーバーが指定することはありません。サーバーは関連する情報を提供するだけです。クライアントが自己のネームサービスを選択します。


マクロの変更がクライアントに伝達されない場合

dhtadm を用いて、クライアントの 1 つまたは複数のマクロを変更しましたが、マシン上で変更が反映されません。たとえば、クライアントのルーターを変更しましたが、クライアントは依然として古いルーターを使用しています。

以下の情報を使用して、変更済みのクライアントのマクロが DHCP サーバー上に反映されないという問題を解決します。

問題

dhcptab テーブルに加えられた変更を読み込むための、DHCP サーバーの再初期化が行われていなかった。マクロ定義を変更するたびに、DHCP サーバーの再初期化を行う必要がある。

解決策: dhcpconfigrescan オプションセットを使用します。あるいは以下に従います。

以下のようにして、DHCP サーバーの再初期化を行います。

  1. DHCP サーバーにスーパーユーザーでログインします。

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


    /etc/init.d/dhcp stop
    

  3. 以下のように入力して、DHCP デーモンを再起動します。


    /etc/init.d/dhcp start