Go to main content

マニュアルページ セクション 8: システム管理コマンド

印刷ビューの終了

更新: 2018年8月8日
 
 

dhcpagent(8)

名前

dhcpagent - 動的ホスト構成プロトコル (DHCP) クライアントデーモン

形式

/usr/sbin/dhcpagent

説明

dhcpagent は、Oracle Solaris ソフトウェアが稼働するマシンにクライアント側動的ホスト構成プロトコル (DHCP) を実装します。

dhcpagent デーモンは DHCP サーバーから、クライアント (ローカル) マシンのネットワークインタフェースの構成パラメータを取得します。これらのパラメータには IP アドレスのリース (クライアントマシンはアドレスをそのリースの期間 (無期限の場合もある) 使用できる) が含まれることがあります。クライアントが IP アドレスをリースよりも長い期間使用したい場合は、DHCP を使って延長のネゴシエーションを行う必要があります。このため dhcpagent は、クライアントマシンの電源が切れる場合にのみ終了する、デーモンとして実行する必要があります。

dhcpagent デーモンは、サービス管理機能 (SMF) により、障害管理リソース識別子 (FMRI) を使用して管理されます。

svc:/network/dhcp/client:default

IPv4 の場合、このサービスは、DHCP アドレスが作成されるときに ipadm または ifconfig によって自動的に開始されます。IPv6 の場合、このサービスは in.ndpd(8) によって自動的に開始されます。

dhcpagent は呼び出されるとパッシブ状態に入り、ipadm(8)ifconfig(8)、または in.ndpd(8) からの命令を待ちます。インタフェースを構成するコマンドを受け取ると、インタフェースを (必要に応じて) 起動し、DHCP を開始します。DHCP が完了すると、dhcpagent にさまざまなネットワークパラメータの値を照会できます。さらに、インタフェースのアドレスのリースを取得するために DHCP が使用された場合、DHCP はアドレスを使用するための構成を行います。リースが取得されると、必要に応じて自動的に更新されます。リースを更新できない場合、dhcpagent はアドレスの構成を解除しますが、インタフェースは起動したままなのでdhcpagent は新しいアドレスリースを取得しようとします。dhcpagent はシステムの中断/再開イベントを監視し、再開時に DHCP サーバーで永続的でないリースがあるかどうかを検証します。同様に、dhcpagent はリンク起動/停止イベントを監視し、停止していたリンクが再度起動されたときに DHCP サーバーで永続的でないリースがあるかどうかを検証します。既存のリースがもう有効でないことがサーバーから示された場合、リース検証メカニズムによって DHCP が再開されます。サーバーにアクセスできない場合、既存のリースは継続されます。この動作は ipadm ユーティリティーの verified-lease-only プロパティーを使用して変更できます。このプロパティーの詳細については、ipadm(8) のマニュアルページを参照してください。

IPv4 の場合、構成済みのインタフェースが unplumb されたか、DHCP から取得されたものと異なる IP アドレス、サブネットマスク、またはブロードキャストアドレスを持つことがわかった場合、インタフェースは DHCP 制御から破棄されます。

IPv6 の場合、dhcpagent は、サーバーから提供された IPv6 アドレスに対応する論理インタフェースを必要に応じて自動的に plumb および unplumb します。IPv6 接頭辞長 (ネットマスク) は、DHCPv6 プロトコルによって設定されるのではなく、代わりに、ルーター通知から取得された接頭辞情報を使って in.ndpd(8) によって設定されます。dhcpagent によって作成された論理インタフェースのいずれかが unplumb されるか異なる IP アドレスで構成されると、DHCP 制御から破棄されます。リンクローカルインタフェースが unplumb されると、その物理インタフェース上で DHCP によって構成されたアドレスがすべて削除されます。

dhcpagent では DHCP のほかに、BOOTP (IPv4 のみ) もサポートされます。RFC 951、Bootstrap Protocol を参照してください。BOOTP サーバーから取得された構成パラメータは DHCP サーバーから受信されたものと同様に処理されますが、BOOTP サーバーから受信された IP アドレスのリースは常に無期限である点が異なります。

DHCP は、ルーターのドメイン名やアドレスなど、クライアントで必要になるその他の情報を構成するためのメカニズムとしても機能します。エージェントは、IP アドレス (および IPv4 の場合はネットマスク、ブロードキャストアドレス、およびデフォルトルーター) を除いてワークステーションを直接構成せず、代わりにほかのプログラム (特に dhcpinfo(1)) から問い合わせ可能なデータベースとして機能します。

インタフェースが 1 つのクライアントでは、これは非常に単純です。インタフェースが複数のクライアントでは複雑になり、異なるインタフェースに到着した情報の一部がマージする必要があったり矛盾していたりする可能性があります。さらに、インタフェースの構成が非同期であるため、一部または全部のインタフェースがまだ構成されていないときに要求が到着する場合があります。こうした問題に対処するために、1 つのインタフェースをプライマリ、つまり特定のインタフェースが要求されなかった場合に DHCP パラメータの値の信頼できるソースとして指定することもできます。詳細は、dhcpinfo(1) および ifconfig(8) を参照してください。

dhcpagent から送信されるすべての DHCP パケットには、ベンダークラス識別子 (RFC 2132 オプションコード 60、RFC 3315 オプションコード 16) が含まれています。この識別子は、uname –i コマンドから返されるプラットフォーム名と同じですが、次の点が異なります。

  • プラットフォーム名に含まれるコンマはピリオドに変更されます。

  • 名前が銘柄記号とコンマで始まっていない場合、SUNW が先頭に自動的に付加されます。

アドレスのプロパティー

dhcpagent は次の ipadm DHCP および addrconf タイプアドレスオブジェクトのプロパティーを使用します。

  • verified-lease-only

  • offer-wait

  • client-id

  • param-request-list

  • param-ignore-list

これらのプロパティーの定義については、ipadm(8) のマニュアルページを参照してください。

これらのプロパティーのシステム全体のデフォルト値は、同じ名前の ipadm DHCPv4 および DHCPv6 プロトコルプロパティーを使用して指定できます。

メッセージ

dhcpagent デーモンは、5 つのカテゴリの情報やエラーメッセージを書き込みます。

重大

重大メッセージは、正常な処理を妨げる深刻な状態を示します。

エラー

エラーメッセージは、リソースの枯渇やその他の予期しないシステムコール障害による、重要で場合によっては回復不可能なイベントです。エラーを無視すると機能が低下する可能性があります。

警告

警告はあまり深刻でない問題を示し、ほとんどの場合、サーバーから受信された異常または不正なデータグラムや提供不可能なサービスの要求を表現します。

情報

情報メッセージは、サイトで DHCP 構成をデバッグする際に役立つ可能性のある重要な情報を提供します。情報メッセージは一般に、–v オプションによって制御されます。ただし、取得された IP アドレスなどの重大な情報は常に提供されます。

デバッグ

デバッグメッセージは 2 つの異なる冗長レベルで生成でき、主にソースコードにアクセスできる人に役立ちますが、難しい DHCP 構成問題をデバッグする際にも役立つ場合があります。デバッグメッセージは、config/debug SMF プロパティーが設定されている場合にのみ生成されます。

DHCP イベントとユーザー定義アクション

/etc/dhcp/eventhook に実行可能ファイル (バイナリまたはスクリプト) が置かれている場合は、次のイベントが発生した際に、dhcpagent デーモンによってそのプログラムが自動的に実行されます。

BOUND および BOUND6

これらのイベントはインタフェース構成時に発生します。dhcpagent がアドレスのリース要求に対する DHCPv4 ACK または DHCPv6 Reply メッセージ (インタフェースの初期構成が成功したことを示す) を DHCP サーバーから受信すると、イベントプログラムが呼び出されます。(アドレスリースのない構成パラメータが取得された際に発生する、INFORM および INFORM6 イベントも参照。)

EXTEND および EXTEND6

これらのイベントはリース延長時に発生します。dhcpagent が DHCPv4 REQUEST (更新) メッセージまたは DHCPv6 Renew または Rebind メッセージに対する DHCPv4 ACK または DHCPv6 Reply を DHCP サーバーから受信した直後に、イベントプログラムが呼び出されます。

DHCPv6 の場合、サーバーは特定の Reply メッセージ内の一部のアドレスを削除し、新しいアドレスリースを追加し、その他のアドレスを無視する (期限切れを許可する) ことを選択することもできます。1 つ以上のアドレスリースをまだ有効のままにする Reply が受信されると、(Reply メッセージがアドレスのリースを延長しない場合でも) EXTEND6 イベントが発生します。イベントプログラムは、アドレスが削除される直前、新しいアドレスが追加された直後に呼び出されます。削除されるものには IFF_DEPRECATED フラグが付けられます。

EXPIRE および EXPIRE6

これらのイベントはリースの期限が切れるときに発生します。DHCPv4 の場合、リース済みアドレスがインタフェースから削除される直前に、イベントプログラムが呼び出されます。DHCPv6 の場合、最後に残っているリース済みアドレスがインタフェースから削除される直前に、イベントプログラムが呼び出されます。

DROP および DROP6

これらのイベントは、期間中にインタフェースがドロップされる際に発生します。インタフェースが DHCP 制御から削除される直前に、イベントプログラムが呼び出されます。ユーザーが unplumb することでインタフェースが破棄された場合、このイベントはユーザーのアクションが起こったあとに発生します。インタフェースは存在しない可能性があります。

INFORM および INFORM6

これらのイベントは、インタフェースが新しいまたは更新された構成情報を DHCPv4 INFORM または DHCPv6 Information-Request メッセージによって DHCP サーバーから取得した際に発生します。これらのメッセージは、ifconfig(8) dhcp inform コマンドを使用して、または DHCPv6 ルーター通知の O (文字 0) ビットが設定されて M ビットが設定されていないときに送信されます。したがってこれらのイベントは、DHCP クライアントがサーバーから IP アドレスリースを取得せず、代わりに構成パラメータのみを取得した際に発生します。

LOSS6

このイベントは、リース期限切れの際に有効なリースがまだ 1 つ以上残っている場合に発生します。イベントプログラムは、期限切れアドレスが削除される直前に呼び出されます。削除されるものには IFF_DEPRECATED フラグが付けられます。

このイベントは、Reply メッセージの受信には関連付けられておらず、有効なリースが 1 つ以上残っているときにのみ発生し、DHCPv6 でのみ発生します。すべてのリースの期限が切れた場合は、代わりに EXPIRE6 イベントが発生します。

RELEASE および RELEASE6

このイベントは、期間中にリース済みアドレスが解放されるときに発生します。イベントプログラムは、dhcpagent がインタフェース上のアドレスを破棄し、DHCPv4 RELEASE または DHCPv6 Release パケットを DHCP サーバーに送信する直前に呼び出されます。

システムはデフォルトイベントプログラムを提供していません。ファイル /etc/dhcp/eventhook は、root によって所有され、モードが 755 であると想定されています。

イベントプログラムには 2 つの引数 (それぞれインタフェース名とイベント名) が渡されます。DHCPv6 の場合、インタフェース名は物理インタフェースの名前です。

イベントプログラムは、dhcpinfo(1) ユーティリティーを使ってインタフェースに関する追加情報を取得できます。イベントプログラムは上で説明したすべてのイベントで呼び出されますが、重要でないイベントは無視してかまいません。イベントプログラムは dhcpagent と同じ特権や環境で実行されますが、例外として、stdinstdout、および stderr/dev/null にリダイレクトされます。これは、イベントプログラムが root 特権で実行されることを意味します。

イベントプログラムの呼び出しが 55 秒後に終了しない場合、SIGTERM シグナルが送信されます。次の 3 秒で終了しない場合は、SIGKILL シグナルで終了します。

イベントプログラムの例については、「使用例」を参照してください。

サービスのプロパティー

dhcpagent デーモンによって次の SMF プロパティーがサポートされています。

config/debug

デバッグレベルを n に設定します。現在使用可能なデバッグレベルは 1 と 2 の 2 つです。後者のほうが詳細です。

config/verbose

サイト構成問題をデバッグするのに役立つ冗長出力を提供します。

使用例 1 イベントプログラムの例

次のスクリプトはファイル /etc/dhcp/eventhook 内に格納されていて、root によって所有され、モードは 755 です。ファイル内に記載されたイベントが発生した際に呼び出されます。

#!/bin/sh

(
echo "Interface name: " $1
echo "Event: " $2

case $2 in
"BOUND")
     echo "Address acquired from server "\
         `/usr/sbin/dhcpinfo -i $1 ServerID`
     ;;
"BOUND6")
     echo "Addresses acquired from server " \
         `/usr/sbin/dhcpinfo -v6 -i $1 ServerID`
     ;;
"EXTEND")
    echo "Lease extended for " \
         `/usr/sbin/dhcpinfo -i $1 LeaseTime`" seconds"
     ;;
"EXTEND6")
    echo "New lease information obtained on $i"
     ;;
"EXPIRE" | "DROP" | "RELEASE")
     ;;

esac
) >/var/run/dhcp_eventhook_output 2>&1

標準出力と標準エラーのファイルへのリダイレクトです。

ファイル

/etc/dhcp/if.dhc
/etc/dhcp/if.dh6

インタフェースの構成を含みます。このファイルの存在だけでは、リース期限が切れている可能性があるため、構成が正しいことを意味しません。起動時に、dhcpagent は REQUEST (DHCPv4 の場合) または Confirm (DHCPv6) を使ってアドレスの有効性を確認します。

/etc/dhcp/duid
/etc/dhcp/iaid

DUID (DHCP Unique Identifier) と IAID (Identity Association Identifier) 値の永続ストレージを含みます。これらのファイルの形式はドキュメント化されていないため、これらに対する読み取りや書き込みをアプリケーションから行わないようにしてください。

/etc/dhcp/eventhook

DHCP イベントプログラムの場所。

属性

属性についての詳細は、マニュアルページの attributes(7) を参照してください。

属性タイプ
属性値
使用条件
system/network
インタフェースの安定性
確実

関連項目

dhcpinfo(1)ipadm(8)syslog(3C)attributes(7)dhcp(7)ifconfig(8)in.mpathd(8)in.ndpd(8)init(8)

Croft, B. and Gilmore, J.,Bootstrap Protocol (BOOTP)RFC 951, Network Working Group, September 1985.

Droms, R., Dynamic Host Configuration Protocol, RFC 2131, Network Working Group, March 1997.

Lemon, T. and B. Sommerfeld. RFC 4361, Node-specific Client Identifiers for Dynamic Host Configuration Protocol Version Four (DHCPv4). Nominum and Sun Microsystems. February 2006.

Droms, R. RFC 3315, Dynamic Host Configuration Protocol for IPv6 (DHCPv6). Cisco Systems. July 2003.

dhcpagent デーモンは、IPv4 の物理インタフェースと同様に論理インタフェースでも使用できます。デーモンが論理インタフェースで使用される場合、RFC 4361 に従って DUID 値と IAID 値に基づいてクライアント ID 値を自動的に構築します。「client-id」プロパティーは、アドレスが ipadm を使用して作成されたときに指定でき、指定されている場合、この自動識別子をオーバーライドします。

IPv4 物理インタフェースと異なり、dhcpagent は論理インタフェースに関連付けられたデフォルトルートを追加または削除しません。

IPMP データアドレスを取得して保守するために、IPMP IP インタフェース上で DHCP を実行できます。IPMP IP インタフェースにはハードウェアアドレスがないため、デーモンは前述の IPv4 論理インタフェースと同じ方法を使ってクライアント ID を自動的に構築します。さらに、ハードウェアアドレスがないことは、デーモンが IPMP IP インタフェース上のすべての DISCOVER および REQUEST メッセージに「ブロードキャスト」フラグを設定する必要があることを意味します。一部の DHCP サーバーはそのような要求を拒否する場合があります。

(テストアドレスを取得して保守するために) IPMP グループの一部である IP インタフェース上で DHCP を実行できます。デーモンは各テストアドレスで NOFAILOVER および DEPRECATED フラグを自動的に設定します。さらにこの場合、デーモンはデフォルトルートを追加または削除しません。実際の DHCP パケット交換は、IPMP グループ内のアクティブな IP インタフェース経由で実行される可能性があります。テストアドレスのリースを無期限にすることを強くお勧めします。そうしないと、プローブでのみ検出可能な長時間のネットワーク停止によりテストアドレスリースが期限切れとなり、in.mpathd(8) がリンクベース障害検出に戻り、間違った修復が起動される可能性があります。