Solaris のシステム管理 (IP サービス)

Oracle Solaris DHCP クライアントについて

Oracle Solaris DHCP クライアントは、Oracle Solaris の一部である dhcpagent デーモンです。Oracle Solaris をインストールしようとすると、DHCP を使ってネットワークインタフェースを構成するかどうかを確認するメッセージが表示されます。これに対して、DHCPv4 を使用するとして応答すると、Oracle Solaris のインストール中に、使用しているシステム上でそのプロトコルが使用可能になります。インストール時に DHCPv6 を特に指定するオプションはありません。ただし、IPv6 に関連する質問があります。IPv6 を有効にすると、DHCPv6 をサポートするローカルネットワーク上で DHCPv6 も有効になります。

DHCP を使用するために Oracle Solaris クライアントに対して必要な作業はこれだけです。DHCP サービスを使用する DHCP クライアントシステムにどのような情報が与えられるかは、DHCP サーバーの構成によります。

Oracle Solaris でクライアントシステムがすでに動作しており、DHCP を使用していない場合は、クライアントシステムを再構成すれば DHCP を使用できるようになります。さらに、DHCP クライアントシステムで DHCP の使用を止め、与えられた静的なネットワーク情報を使用したい場合にも、DHCP クライアントシステムを再構成できます。「Oracle Solaris DHCP クライアントを使用可能または使用不可にする」を参照してください。

DHCPv6 サーバー

Sun Microsystems は Oracle Solaris 用の DHCPv6 サーバーを提供していません。サードパーティーが提供しているサーバーには Sun の DHCPv6 との互換性があり、ネットワーク上に DHCPv6 サーバーが存在している場合、Sun の DHCPv6 クライアントはそれを使用します。

Sun の DHCPv4 サーバーについては、「Oracle Solaris DHCP サーバー」を参照してください。

DHCPv4 と DHCPv6 の相違点

DHCPv4 と DHCPv6 の主な相違点は次の 2 つです。

管理モデル

DHCPv4」では、クライアントを明示的に構成する必要があります。必要な場合はアドレス指定用の DHCPv4 システムを設定します。この設定は通常、システムを最初にインストールするときに行うか、ifconfig(1m) のオプションを使用して動的に行います。

DHCPv6」では、クライアントを明示的に構成する必要はありません。DHCP の使用はネットワークの属性であり、DHCP を使用する指示は、ローカルルーターからのルーター広告メッセージで伝送されます。DHCP クライアントは、必要に応じて論理インタフェースを自動的に作成したり破棄したりします。

DHCPv6 機構は、管理上、既存の IPv6 ステートレス (自動) アドレス構成によく似ています。ステートレスアドレス構成の場合は、ローカルルーターにフラグを設定することにより、一連の接頭辞に対して各クライアントが独自に自動的なアドレス生成を行うように指示します。このときクライアントは、通知された接頭辞に加え、ローカルインタフェースのトークンまたは乱数を使用します。DHCPv6 の場合は、同じ接頭辞が必要ですが、アドレスは「ランダムに」割り当てられるのではなく、DHCPv6 サーバーを介して取得され管理されます。

MAC アドレスとクライアント ID

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 が構成されていない場合、論理インタフェース (hme0:1) には DUID+IAID が使用されます。

IPv4 DHCP とは異なり、DHCPv6 には「クライアント名」オプションがないため、DHCPv6 だけに基づく名前をシステムに付けることはできません。その代わり、DHCPv6 から提供されるアドレスに対応する DNS 名を知る必要がある場合は、DNS 逆解決 (getaddrinfo(3SOCKET) 関数によるアドレスからの名前照会) を使用します。したがって、DHCPv6 だけを使用している場合にノードに特定の名前を与えるには、システムに /etc/nodename を設定する必要があります。

プロトコルの詳細

DHCPv4 では、割り当てられたアドレスに使用すべきサブネットマスクは、DHCP サーバーによって指定されます。DHCPv6 では、サブネットマスク (「接頭辞長」とも呼ばれる) は DHCP サーバーによって制御されるのではなく、ルーター広告によって割り当てられます。

DHCPv4 には「ホスト名」オプションがあり、これを使用してシステム全体のノード名が設定されます。DHCPv6 にはそのようなオプションはありません。

DHCPv6 のクライアント ID を設定するには、システムで自動的に選択させる代わりに、DUID を指定する必要があります。この設定は、デーモンに対してグローバルに行うか、インタフェースごとに行うことができます。グローバルな DUID を設定するには、次の書式を使用します (先頭にドットを付ける)。

.v6.CLIENT_ID=<DUID>

特定のインタフェースが特定の DUID を使用するように設定して、システムが DHCPv6 サーバーに対して複数の独立したクライアントに見えるようにするには、次のように指定します。

hme0.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 を指定します。次に例を示します。

hme0:1.CLIENT_ID=orangutan

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/dhcpagentPARAM_REQUEST_LIST が使用されます。

構成の構文

DHCPv6 クライアントを構成するには、既存の DHCPv4 クライアントの場合とほぼ同様に、/etc/default/dhcpagent を使用します。

構文は、インタフェース名 (存在する場合) と構成対象のパラメータの間に挿入される「.v6」マーカーで拡張されます。たとえば、グローバルな IPv4 オプション要求リストは、次のように設定されます。

PARAM_REQUEST_LIST=1,3,6,12,15,28,43

特定のインタフェースでホスト名オプションを省略するには、次のように設定します。

hme0.PARAM_REQUEST_LIST=1,3,6,15,28,43

DHCPv6 のグローバルな要求リストを設定する場合は、先頭にドットを付加します。

.v6.PARAM_REQUEST_LIST=23,24

特定のインタフェースを設定する場合は、次の例に従います。

hme0.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

DHCP クライアントの起動

ほとんどの場合、DHCPv6 クライアントを起動するために操作は必要ありません。in.ndpd デーモンが必要に応じて DHCPv6 を自動的に起動します。ブート時に IPv6 用に plumb されるようにインタフェースを設定するには、/etc/hostname6.$IFNAME の変更が必要となる場合があります。ただし、インストール時にシステムで IPv6 を有効にした場合、これはインストーラによってすでに実行されています。

これに対し、DHCPv4 では、Oracle Solaris のインストール時にクライアントの起動を要求しなかった場合は、これを要求する必要があります。「Oracle Solaris DHCP クライアントを使用可能にする方法」を参照してください。

dhcpagent デーモンは、システムのブートに関与するほかのプロセスに必要な構成情報を取得します。そのため、システム起動スクリプトは、ブートプロセスの初期段階に dhcpagent を起動し、DHCP サーバーからネットワーク構成情報が到着するのを待ちます。

デフォルトでは DHCPv6 が実行されますが、DHCPv6 を実行しないように選択することもできます。DHCPv6 の実行開始後は、ifconfig コマンドで停止することができます。/etc/inet/ndpd.conf ファイルを変更して DHCPv6 を無効にし、リブート時に DHCPv6 が起動しないようにすることもできます。

たとえば、hme0 という名前のインタフェースで DHCPv6 をただちに停止するには、次の手順に従います。


ex# echo ifdefault StatefulAddrConf false >> /etc/inet/ndpd.conf  
ex# pkill -HUP -x in.ndpd   
ex# ifconfig hme0 inet6 dhcp release

/etc/dhcp.interface ファイル (たとえば、Sun Fire 880 システム上の /etc/dhcp.ce0) が存在していると、起動スクリプトは、指定されたインタフェース上で DHCPv4 が使用されるものとみなします。起動スクリプトは、dhcp.interface ファイルを見つけると、dhcpagent を起動します。

起動された dhcpagent は、ネットワークインタフェースの構成を行う指示を受信するまで待機します。そのあと、起動スクリプトは、ifconfig interface dhcp start コマンドを発行して、dhcpagent に DHCPv4 の起動を指示します (「DHCP の動作」を参照)。dhcp.interface ファイルにコマンドが含まれている場合は、それらのコマンドが ifconfigdhcp start オプションに付加されます。ifconfig interface dhcp コマンドのオプションについては、ifconfig(1m) のマニュアルページを参照してください。

DHCPv6 通信

DHCPv4 は手動構成によって起動されるのに対し、DHCPv6 はルーター広告 (RA) によって起動されます。ルーターの構成に応じて、システムはルーター広告メッセージが受信されたインタフェースで DHCPv6 を自動的に起動し、DHCP を使用してアドレスとほかのパラメータを取得するか、DHCPv6 でアドレス以外のデータ (DNS サーバーなど) だけを要求します。

in.ndpd デーモンはルーター広告メッセージを受信します。これは、システムで IPv6 用に plumb されているすべてのインタフェースで、自動的に実行されます。in.ndpd は、DHCPv6 を実行するように指定する RA を検出すると、DHCPv6 を起動します。

in.ndpd が DHCPv6 を起動しないようにするには、/etc/inet/ndpd.conf ファイルを変更します。

次のいずれかの ifconfig コマンドを使用して、DHCPv6 の起動後に DHCPv6 を停止することもできます。

ifconfig <interface> inet6 dhcp drop

または

ifconfig <interface> inet6 dhcp release

DHCP クライアントプロトコルはネットワーク構成情報をどのように管理するか

DHCPv4 クライアントプロトコルと DHCPv6 クライアントプロトコルでは、ネットワーク構成情報の管理方法が異なります。主な相違点は、DHCPv4 では単一のアドレスのリースとそれに関連するいくつかのオプションのためにネゴシエーションが行われ、DHCPv6 では一連のアドレスとオプションに対して一括でネゴシエーションが行われることです。

DHCPv4 クライアントとサーバー間の対話の概要については、第 12 章Oracle Solaris DHCP について (概要)を参照してください。

DHCPv4 クライアントはネットワーク構成情報をどのように管理するか

DHCP サーバーから情報パケットを取得すると、dhcpagent はネットワークインタフェースを構成し、使用可能にします。デーモンは、そのインタフェースを IP アドレスのリース期間が終わるまで制御し、その構成データを内部テーブルに保持します。システム起動スクリプトは dhcpinfo コマンドを使用して内部テーブルから構成オプションの値を抽出します。それらの値は、システムを構成し、システムがネットワーク上で通信できるようにするために使用されます。

dhcpagent デーモンは、一定時間 (通常はリース期間の半分) が過ぎるまで何もせずに待機します。この時間が過ぎると、デーモンは、リースの延長を DHCP サーバーに要求します。dhcpagent デーモンは、インタフェースが停止していたり、IP アドレスが変更されていることをシステムから通知されると、ifconfig コマンドから指示があるまでそのインタフェースの制御を行いません。また、dhcpagent は、インタフェースが適切に動作し、IP アドレスが変更されていないことを検出すると、リースの更新要求をサーバーに送信します。リースを更新できない場合、dhcpagent はリース期間の満了時にそのインタフェースを停止します。

dhcpagent は、リースに関連する活動を行うたびに、/etc/dhcp/eventhook という実行可能ファイルを探します。この名前の実行可能ファイルが見つかると、dhcpagent はこのファイルを起動します。イベント実行可能ファイルの使用については、「DHCP クライアントのイベントスクリプト」を参照してください。

DHCPv6 クライアントはネットワーク構成情報をどのように管理するか

クライアントとサーバーの間の DHCPv6 通信は、クライアントがサーバーを見つけるために要請メッセージを送信することによって開始されます。応答として、DHCP サービスに使用可能なすべてのサーバーが通知メッセージを送信します。サーバーのメッセージには、複数の IA_NA (非一時アドレス用アイデンティティーアソシエーション) レコードに加え、サーバーが提供できるほかのオプション (DNS サーバーアドレスなど) が含まれています。

クライアントは、独自の IA_NA/IAADDR レコードを要求メッセージに設定することにより、特定のアドレス (またはその複数) を要求できます。通常、クライアントが特定のアドレスを要求するのは、古いアドレスが記録されており、可能な限り同じアドレスがサーバーから提供されることを望む場合です。クライアントの動作にかかわらず (クライアントがまったくアドレスを要求しない場合でも)、サーバーは 1 つの DHCPv6 トランザクション用に任意の数のアドレスをクライアントに提供することができます。

クライアントとサーバーの間で行われるメッセージのやり取りは次のとおりです。

通知メッセージ内の優先値が 255 であれば、DHCPv6 クライアントはただちにそのサーバーを選択します。もっとも優先値の高いサーバーが応答しない場合や要求メッセージに正常な応答を返すことができない場合、クライアントは、取得済みの通知メッセージの中で優先値の高いものから順にサーバーを検索します。すべての通知メッセージの検索が終わると、クライアントは再び要請メッセージを送信して処理を繰り返します。

選択されたサーバーは、要請メッセージまたは要求メッセージへの応答として、割り当てるアドレスと構成パラメータを含む応答メッセージを送信します。

DHCP クライアントのシャットダウン

クライアントはシャットダウン時に、クライアントにアドレスを割り当てたサーバーに解放メッセージを送信して、割り当てられたアドレスの 1 つ以上を使用しなくなることを示します。DHCPv4 クライアントシステムが正常にシャットダウンされた場合、dhcpagent は現在の構成情報を /etc/dhcp/interface.dhc ファイルに書き込みます。DHCPv6 の場合は、/etc/dhcp/interface.dh6 ファイルに書き込みます。デフォルトでは、リースは解放されずに保存されるため、IP アドレスが使用されなくなったことが DHCP サーバーにはわかりません。そのため、クライアントは次のブート時にそのアドレスを簡単に再取得できます。このデフォルトの動作は、ifconfig <interface> dhcp drop コマンドと同じです。

システムの再起動時にそのファイル内のリースが依然として有効であると、dhcpagent は、同じ IP アドレスとネットワーク構成情報を使用する (短縮形の) 要求を送信します。DHCPv4 の場合、これは要求メッセージです。DHCPv6 の場合、これは確認メッセージです。

DHCP サーバーがこれを許可した場合、dhcpagent はシステムのシャットダウン時にディスクに書き込んだ情報を使用できます。クライアントがこの情報を使用することをサーバーが許可しなかった場合、dhcpagent は DHCP プロトコルシーケンスを開始します (「DHCP の動作」を参照)。その結果、クライアントは、新しいネットワーク構成情報を取得します。