ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
![]() |
Oracle Solaris 11.1 での DHCP の作業 Oracle Solaris 11.1 Information Library (日本語) |
DHCP クライアントプロトコルはネットワーク構成情報をどのように管理するか
DHCPv4 クライアントはネットワーク構成情報をどのように管理するか
DHCP クライアントで使用される ipadm コマンドオプション
複数のネットワークインタフェースを備えた DHCP クライアントシステム
DHCPv4 クライアントが特定のホスト名を要求できるようにする方法
DHCP クライアントは dhcpagent デーモンです。LiveCD GUI インストーラを使用して Oracle Solaris をインストールする場合、インストールされるシステム上で DHCPv4 および DHCPv6 プロトコルが有効になります。テキストインストーラを使用して Oracle Solaris をインストールする場合、インストールされるシステム上でネットワークを構成する方法を選択するためのプロンプトが表示されます。自動ネットワーク構成を指定する場合、インストールされるシステム上で DHCPv4 および DHCPv6 プロトコルが有効になります。
DHCP を使用するために Oracle Solaris クライアントに対して必要な作業はこれだけです。DHCP サービスを使用する DHCP クライアントシステムにどのような情報が与えられるかは、DHCP サーバーの構成によります。
Oracle Solaris でクライアントシステムがすでに動作しており、DHCP を使用していない場合は、クライアントシステムを再構成すれば DHCP を使用できるようになります。さらに、DHCP クライアントシステムで DHCP の使用を止め、与えられた静的なネットワーク情報を使用したい場合にも、DHCP クライアントシステムを再構成できます。詳細は、「DHCP クライアントを使用可能または使用不可にする」を参照してください。
「DHCPv4」では、クライアントを明示的に構成する必要があります。必要な場合、アドレス指定用に DHCPv4 システムを設定する必要があり、これは通常、初期のシステムインストール中に実行するか、ipadm コマンドを使用して動的に実行します。ipadm(1M) のマニュアルページを参照してください。
「DHCPv6」では、クライアントを明示的に構成する必要はありません。DHCP の使用はネットワークの属性であり、DHCP を使用する指示は、ローカルルーターからのルーター広告メッセージで伝送されます。DHCP クライアントは、必要に応じて論理インタフェースを自動的に作成したり破棄したりします。
DHCPv6 メカニズムは、管理上、既存の IPv6 ステートレス (自動) アドレス構成によく似ています。ステートレスアドレス構成の場合は、ローカルルーターにフラグを設定することにより、一連の接頭辞に対して各クライアントが独自に自動的なアドレス生成を行うように指示します。このときクライアントは、通知された接頭辞に加え、ローカルインタフェースのトークンまたは乱数を使用します。DHCPv6 の場合は、同じ接頭辞が必要ですが、アドレスは「ランダムに」割り当てられるのではなく、DHCPv6 サーバーを介して取得され管理されます。
「DHCPv4」では、アドレスを割り当てるためのクライアントの識別に、MAC アドレスおよび任意でクライアント ID が使用されます。ネットワークに入るたびに、同じクライアントは可能であれば同じアドレスを取得します。
「DHCPv6」でも基本的に同じスキームが使用されますが、クライアント ID は必須になり、それに基づく構造が義務付けられます。DHCPv6 のクライアント ID は、次の 2 つの部分で構成されます。 DUID (DHCP Unique Identifier) と IAID (Identity Association Identifier) です。DUID は (DHCPv4 の場合のようにインタフェースだけを識別するのではなく) クライアントの「システム」を識別し、IAID はそのシステム上のインタフェースを識別します。
RFC 3315 で説明されているように、サーバーとクライアントはアイデンティティーアソシエーション (IA) を使用して、関連する一連の IPv6 アドレスの識別、グループ化、および管理を行います。クライアントは、そのネットワークインタフェースそれぞれに個別の IA を少なくとも 1 つ関連付けてから、割り当てた IA を使用して、そのインタフェースの構成情報をサーバーから取得する必要があります。IA の詳細については、次の「プロトコルの詳細」のセクションを参照してください。
DUID+IAID は DHCPv4 でも使用できます。これらを互いに一義的に連結して、クライアント ID として使用できます。互換性の理由から、これは通常の IPv4 インタフェースでは行われません。ただし、クライアント ID が構成されていない場合、論理インタフェース (bge0:1) には DUID+IAID が使用されます。
IPv4 DHCP とは異なり、DHCPv6 には「クライアント名」オプションがないため、DHCPv6 だけに基づく名前をシステムに付けることはできません。その代わり、DHCPv6 から提供されるアドレスに対応する DNS 名を知る必要がある場合は、DNS 逆解決 (getaddrinfo(3SOCKET) 関数を使用したアドレスからの名前照会) を使用します。この影響の 1 つとして、DHCPv6 だけを使用していてノードに特定の名前を与える場合、次のように svccfg コマンドを使用してノード名を指定する必要があります。
# svccfg -s svc:/system/identity:node setprop config/nodename = astring: hostname
DHCPv4 と DHCPv6 の主な相違点は次の 2 つです。
管理モデル
DHCPv4 - 管理者が各インタフェースに対して DHCP を有効にします。管理は論理インタフェースごとに行われます。
DHCPv6 - 明示的な構成は必要ありません。このプロトコルは、特定の物理インタフェース上で有効にされます。
プロトコルの詳細
DHCPv4 - DHCP サーバーが各アドレスのサブネットマスクを提供します。ホスト名オプションによってシステム全体のホスト名が設定されます。
DHCPv6 - サブネットマスクは、DHCPv6 サーバーではなくルーター広告によって提供されます。DHCPv6 のホスト名オプションはありません。
DHCPv4 では、割り当てられたアドレスに使用すべきサブネットマスクは、DHCP サーバーによって指定されます。DHCPv6 では、サブネットマスク (「接頭辞長」とも呼ばれる) は DHCP サーバーによって制御されるのではなく、ルーター広告によって割り当てられます。
DHCPv4 には「ホスト名」オプションがあり、これを使用してシステム全体のノード名が設定されます。DHCPv6 にはそのようなオプションはありません。
DHCPv6 のクライアント ID を構成するには、システムで自動的に選択させる代わりに、DUID を指定する必要があります。この設定は、デーモンに対してグローバルに行うか、インタフェースごとに行うことができます。グローバルな DUID を設定するには、次の書式を使用します (先頭にドットを付ける)。
.v6.CLIENT_ID=DUID
特定のインタフェースが特定の DUID を使用するように設定して、システムが DHCPv6 サーバーに対して複数の独立したクライアントに見えるようにするには、次のように指定します。
bge0.v6 CLIENT ID=DUID
各アイデンティティーアソシエーション (IA) は、1 種類のアドレスを保持します。たとえば、一時アドレス用アイデンティティーアソシエーション (IA_TA) は一時アドレスを保持し、非一時アドレス用アイデンティティーアソシエーション (IA_NA) は割り当てられた永続的なアドレスを保持します。このガイドで説明する DHCPv6 のバージョンでは、IA_NA アソシエーションだけが提供されています。
Oracle Solaris は、要求に応じて各インタフェースに 1 つの IAID を割り当てます。この IAID はルートファイルシステム内のファイルに格納され、マシンの寿命にわたって保持されます。
DHCPv4 クライアントの論理インタフェースは、それぞれが独立した管理単位です。0 番目の論理インタフェース (デフォルトで識別子がインタフェースの MAC アドレスになる) に加え、ユーザーは特定の論理インタフェースを構成して DHCP を実行することができます。そのためには、dhcpagent 構成ファイルに CLIENT_ID を指定します。例:
bge0.v6 CLIENT ID=DUID
DHCPv6 の動作は異なります。IPv4 とは異なり、IPv6 インタフェースの 0 番目の論理インタフェースは常にリンクローカルです。リンクローカルは、DHCP サーバーなどのほかの割り当て方法が利用できない場合に、IP ネットワーク内のデバイスに IP アドレスを自動的に割り当てるために使用されます。0 番目の論理インタフェースは、DHCP の制御下に置くことはできません。そのため、DHCPv6 は 0 番目の論理インタフェース (「物理インタフェース」とも呼ばれる) 上で実行されるにもかかわらず、0 番目以外の論理インタフェースだけにアドレスを割り当てます。
DHCPv6 サーバーは、DHCPv6 クライアント要求に応答して、クライアントで構成すべきアドレスのリストを返します。
DHCPv6 には「オプション要求」オプションがあり、クライアントがどの情報を優先的に望んでいるかについて、サーバーにヒントを提供します。使用可能なすべてのオプションをサーバーからクライアントに送信すると、送信される情報が大量になり、クライアントに到達するまでにその一部をドロップする必要が生じる可能性があります。サーバーはヒントを使用して、応答に含めるオプションを選択することができます。あるいは、サーバーはヒントを無視し、ほかの項目を選択して含めることもできます。たとえば、Oracle Solaris の場合、優先するオプションには Oracle Solaris DNS アドレスドメインや NIS アドレスドメインなどが含まれる可能性がありますが、NetBIOS サーバーが含まれる可能性はわずかです。
同じ種類のヒントが DHCPv4 にも用意されていますが、この特別な「オプション要求」オプションはありません。代わりに、DHCPv4 では、/etc/default/dhcpagent の PARAM_REQUEST_LIST が使用されます。
DHCPv6 クライアントを構成するには、既存の DHCPv4 クライアントの場合とほぼ同様に、/etc/default/dhcpagent を使用します。
構文は、インタフェース名 (存在する場合) と構成対象のパラメータの間に挿入される「.v6」マーカーで拡張されます。たとえば、グローバルな IPv4 オプション要求リストは、次のように設定されます。
PARAM_REQUEST_LIST=1,3,6,12,15,28,43
特定のインタフェースでホスト名オプションを省略するには、次のように構成します。
bge0.PARAM_REQUEST_LIST=1,3,6,15,28,43
DHCPv6 のグローバルな要求リストを設定する場合は、先頭にドットを付加します。
.v6.PARAM_REQUEST_LIST=23,24
特定のインタフェースを設定する場合は、次の例に従います。
bge0.v6.PARAM_REQUEST_LIST=21,22,23,24
参考として、DHCPv6 構成の実際の /etc/default/dhcpagent ファイルを次に示します。
# The default DHCPv6 parameter request list has preference (7), unicast (12), # DNS addresses (23), DNS search list (24), NIS addresses (27), and # NIS domain (29). This may be changed by altering the following parameter- # value pair. The numbers correspond to the values defined in RFC 3315 and # the IANA dhcpv6-parameters registry. .v6.PARAM_REQUEST_LIST=7,12,23,24,27,29
ほとんどの場合、DHCPv6 クライアントを起動するために操作は必要ありません。in.ndpd デーモンが必要に応じて DHCPv6 を自動的に起動します。
これに対し、DHCPv4 では、Oracle Solaris のインストール時にクライアントの起動を要求しなかった場合は、これを要求する必要があります。「DHCP クライアントを有効にする方法」を参照してください。
dhcpagent デーモンは、システムのブートに関与するほかのプロセスに必要な構成情報を取得します。そのため、システム起動スクリプトは、ブートプロセスの初期段階に dhcpagent を起動し、DHCP サーバーからネットワーク構成情報が到着するのを待ちます。
デフォルトでは DHCPv6 が実行されますが、DHCPv6 を実行しないように選択することもできます。DHCPv6 の実行開始後は、ipadm delete-addr コマンドで停止できます。/etc/inet/ndpd.conf ファイルを変更して DHCPv6 を無効にし、リブート時に DHCPv6 が起動しないようにすることもできます。
次の例は、DHCPv6 をすぐにシャットダウンする方法を示しています。
ex# echo ifdefault StatefulAddrConf false >> /etc/inet/ndpd.conf ex# pkill -HUP -x in.ndpd ex# ipadm delete-addr -r dhcp-addrobj
起動時に、永続的な DHCP 構成がシステムに存在する場合、dhcpagent は起動スクリプトプロセスの一部として開始されます。dhcpagent は次に、「DHCP の動作」で説明されているようにネットワークインタフェースを構成します。
DHCPv4 は手動構成によって起動されるのに対し、DHCPv6 はルーター広告 (RA) によって起動されます。ルーターの構成に応じて、システムはルーター広告メッセージが受信されたインタフェースで DHCPv6 を自動的に起動し、DHCP を使用してアドレスとほかのパラメータを取得するか、DHCPv6 でアドレス以外のデータ (DNS サーバーなど) だけを要求します。
in.ndpd デーモンはルーター広告メッセージを受信します。これは、システムで IPv6 用に plumb されているすべてのインタフェースで、自動的に実行されます。in.ndpd は、DHCPv6 を実行するように指定する RA を検出すると、DHCPv6 を起動します。
in.ndpd が DHCPv6 を起動しないようにするには、/etc/inet/ndpd.conf ファイルを変更します。
次のいずれかのバージョンの ipadm コマンドを使用して、DHCPv6 の起動後に DHCPv6 を停止することもできます。
ipadm delete-addr dhcp-addrobj
または
ipadm delete-addr -r dhcp-addrobj
DHCPv4 クライアントプロトコルと DHCPv6 クライアントプロトコルでは、ネットワーク構成情報の管理方法が異なります。主な相違点は、DHCPv4 では単一のアドレスのリースとそれに関連するいくつかのオプションのためにネゴシエーションが行われることです。DHCPv6 では一連のアドレスとオプションに対して一括でネゴシエーションが行われることです。
DHCPv4 クライアントとサーバー間の対話の概要については、第 1 章DHCP について (概要)を参照してください。
DHCP サーバーから情報パケットを取得すると、dhcpagent はネットワークインタフェースを構成し、使用可能にします。デーモンは、そのインタフェースを IP アドレスのリース期間が終わるまで制御し、その構成データを内部テーブルに保持します。システム起動スクリプトは dhcpinfo コマンドを使用して内部テーブルから構成オプションの値を抽出します。それらの値は、システムを構成し、システムがネットワーク上で通信できるようにするために使用されます。
dhcpagent デーモンは、一定時間 (通常はリース期間の半分) が過ぎるまで何もせずに待機します。この時間が過ぎると、デーモンは、リースの延長を DHCP サーバーに要求します。dhcpagent デーモンは、インタフェースの停止や IP アドレスの変更がシステムから通知された場合、ipadm コマンドから指示があるまでそのインタフェースを制御しません。また、dhcpagent は、インタフェースが適切に動作し、IP アドレスが変更されていないことを検出すると、リースの更新要求をサーバーに送信します。リースを更新できない場合、dhcpagent はリース期間の満了時にそのインタフェースを停止します。
dhcpagent がリースに関連するアクションを行うたびに、このデーモンは /etc/dhcp/eventhook という実行可能ファイルを探します。この名前の実行可能ファイルが見つかると、dhcpagent はこのファイルを起動します。イベント実行可能ファイルの使用については、「DHCP クライアントのイベントスクリプト」を参照してください。
クライアントとサーバーの間の DHCPv6 通信は、クライアントがサーバーを見つけるために要請メッセージを送信することによって開始されます。応答として、DHCP サービスに使用可能なすべてのサーバーが通知メッセージを送信します。サーバーのメッセージには、複数の IA_NA (非一時アドレス用アイデンティティーアソシエーション) レコードに加え、サーバーが提供できるほかのオプション (DNS サーバーアドレスなど) が含まれています。
クライアントは、独自の IA_NA/IAADDR レコードを要求メッセージに設定することにより、特定のアドレス (またはその複数) を要求できます。通常、クライアントが特定のアドレスを要求するのは、古いアドレスが記録されており、可能な限り同じアドレスがサーバーから提供されることを望む場合です。クライアントの動作にかかわらず (クライアントがまったくアドレスを要求しない場合でも)、サーバーは 1 つの DHCPv6 トランザクション用に任意の数のアドレスをクライアントに提供することができます。
クライアントとサーバーの間で行われるメッセージのやり取りは次のとおりです。
クライアントがサーバーを見つけるために要請メッセージを送信します。
サーバーは通知メッセージを送信して、DHCP サービスに使用可能であることを示します。
クライアントは要求メッセージを送信して、もっとも大きい優先値を持つサーバーに、IP アドレスなどの構成パラメータを要求します。サーバーの優先値は、最低値 0 から最高値 255 の範囲で、管理者によって設定されます。
サーバーは、アドレスリースと構成データを含む応答メッセージを送信します。
通知メッセージ内の優先値が 255 であれば、DHCPv6 クライアントはただちにそのサーバーを選択します。もっとも優先値の高いサーバーが応答しない場合や要求メッセージに正常な応答を返すことができない場合、クライアントは、取得済みの通知メッセージの中で優先値の高いものから順にサーバーを検索します。すべての通知メッセージの検索が終わると、クライアントは再び要請メッセージを送信して処理を繰り返します。
選択されたサーバーは、要請メッセージまたは要求メッセージへの応答として、割り当てるアドレスと構成パラメータを含む応答メッセージを送信します。
クライアントはシャットダウン時に、クライアントにアドレスを割り当てたサーバーに解放メッセージを送信して、割り当てられたアドレスの 1 つ以上をクライアントが使用しなくなることを示します。DHCPv4 クライアントシステムが正常にシャットダウンするとき、dhcpagent は現在の構成情報をファイルに書き込みます (ファイルが存在する場合)。ファイル名は、DHCPv4 の場合は /etc/dhcp/interface.dhc で、DHCPv6 の場合は /etc/dhcp/interface.dh6 です。デフォルトでは、リースは解放されずに保存されるため、IP アドレスが使用されなくなったことを DHCP サーバーは検出できません。そのため、クライアントは次のブート時にそのアドレスを簡単に再取得できます。このデフォルトアクションは ipadm delete-addr dhcp-addrobj コマンドと同じです。
システムのリブート時にそのファイル内のリースが依然として有効であると、dhcpagent は、同じ IP アドレスとネットワーク構成情報を使用する (短縮形の) 要求を送信します。DHCPv4 の場合、これは要求メッセージです。DHCPv6 の場合、これは確認メッセージです。
DHCP サーバーがこれを許可した場合、dhcpagent はシステムのシャットダウン時にディスクに書き込んだ情報を使用できます。クライアントがこの情報を使用することをサーバーが許可しない場合、dhcpagent は、「DHCP の動作」で説明されている DHCP プロトコルシーケンスを開始します。その結果、クライアントは、新しいネットワーク構成情報を取得します。