以下の障害追跡手法は、原因を切り離すことができない場合の問題解決に役立ちます。
snoop コマンドを使用して、ネットワークのトラフィックを監視します。
DHCP クライアントをデバッグモードで動作させます。
DHCP サーバをデバッグモードで動作させます。
DHCP クライアントをリブートします。
DHCP サーバを停止します。その後で再度開始します。
この章では、上記の手法を詳細に説明します。本書を使用しても問題を解決することができない場合の詳細情報の取得先を紹介します。
snoop コマンドを使用してネットワークのトラフィックを監視することができます。
クライアントと同じサブネット上の Solaris サーバまたは BOOTP/DHCP 中継エージェントにスーパーユーザとしてログインします。
snoop コマンドを使用してネットワークのトラフィックを監視します。たとえば、以下のように入力します。
snoop -o /tmp/output udp port 67 or udp port 68 |
クライアントをブートして、クライアントとサーバ (複数可) との間の DHCP メッセージの交換を監視します。
以下のように入力します。
snoop -i /tmp/output -x 0 -v |
クライアントのハードウェアアドレスを指定することによって snoop の適用範囲を制限することができます。DHCP/BOOTP プロトコルを解釈できる snoop のバージョンは、Solaris バージョン 2.5 およびそれ以降で使用可能です。
DHCP クライアントをデバッグモードで動作させると、クライアントとサーバとの間で進行中のほとんどのダイアログが明らかになります。クライアントが動作しているベースのプロダクトについては、関連のマニュアルを参照してください。
DHCP クライアントのデバッグは、DHCP クライアントをブートした後でのみ可能です。DHCP に問題が発生した場合は、DHCP を無効にしてブートする必要があります。以下の手順は、ホストのブート後に一度だけ実行することができます。ただし、シングルユーザモードでの実行を推奨します。
DHCP エージェントを設定して、サーバと交換するパケットの詳細をログに記録することができます。この記録を行うには、以下のようにして、デバッグモードをオンに設定してエージェントを開始する必要があります。
/sbin/dhcpagent -n -d3 & |
-d3 フラグはレベル 3 でのデバッグをオンに設定し、-n フラグは「DHCP が正常な場合でもインタフェースを構成してはならない」という意味です。
レベル 3 およびそれより下位のレベルでは、ユーザに適切な情報が戻されます。レベル 3 より上位のレベルは、情報が生のパケットのまま戻されるため、開発者の方々または高度な専門知識を持つ方々だけが使用します。
dhcpagent のインスタンスは一度に 1 つだけが実行可能なため、ここでエージェントを開始する前に、すでに起動済みのエージェントをすべて停止する必要があります。停止を行うには、エージェントのプロセス ID を調べて、以下のように終了シグナルを送信します。
kill -TERM process_id_of_dhcpagent |
エージェントをデバッグモードで開始した後で、以下のように入力して、手動でインタフェースの構成を試行します。
ifconfig interface_name auto_dhcp |
送受信されたパケットが表示されます。
DHCP がインタフェースの構成を試行している間、インタフェースはパケットの送受信を行うことができません。インタフェースがダウンしている間は、その他のネットワークサービス (たとえば NIS や NFS) が悪影響を受ける場合があります。
たとえば、以下のようにします。
以下のような停止スクリプトを使用してサーバを停止します。
/etc/init.d/dhcp stop |
サーバをデバッグ・冗長モードで再起動します。ただし、/etc/init.d/dhcp 起動スクリプト内に指定されているフラグに加えて、-d フラグと -v フラグを使用します。たとえば、i オプションが存在する場合は、以下のフォーマットでコマンドを入力します。
/usr/lib/inet/in.dhcpd -i interface_names -d -v |
DHCP クライアントをデバッグモードで動作させた後で、リブートを試行することができます。リブートを行うと、ネットワークのハードウェアとソフトウェアがリセットされます。
クライアントをリブートします。
DHCP サーバにスーパーユーザでログインします。
以下のように入力します。
/etc/init.d/dhcp stop |
約 10 秒間待機します。
以下のように入力します。
/etc/init.d/dhcp start |