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 or udp port 68
    

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

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


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

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

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

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

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

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 サーバをデバッグモードで動作させるには

  1. 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 2 クライアントの場合

  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 2 の 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+ である必要があり、さらに必要なパラメタをクライアントごとに指定する必要がある。

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

  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