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

第 16 章 DHCP クライアントの構成と管理

この章では、Oracle Solaris に含まれている動的ホスト構成プロトコル (DHCP) クライアントについて説明します。この章では、クライアントの DHCPv4 プロトコルおよび DHCPv6 プロトコルの機能と、クライアントの動作の変更方法について説明します。

一方のプロトコル DHCPv4 は、かなり以前から Oracle Solaris に含まれています。これを使用すると、DHCP サーバーは IPv4 ネットワークアドレスなどの構成パラメータを IPv4 ノードに渡すことができます。

もう一方のプロトコル DHCPv6 を使用すると、DHCP サーバーは IPv6 ネットワークアドレスなどの構成パラメータを IPv6 ノードに渡すことができます。DHCPv6 は、「IPv6 ステートレスアドレスの自動構成」(RFC 2462) に対応するステートフルアドレス版であり、構成パラメータを取得するためにステートレスアドレスとは別に使用することも同時に使用することもできます。

この章では、次の内容について説明します。

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 の動作」を参照)。その結果、クライアントは、新しいネットワーク構成情報を取得します。

Oracle Solaris DHCP クライアントを使用可能または使用不可にする

Oracle Solaris はすでに動作している、DHCP がまだ使用されていないサーバーで DHCP クライアントを使用可能にするためには、まず、システムを構成解除する必要があります。システムが起動されたら、ある一連のコマンドを実行してシステムを設定し、DHCP クライアントを使用可能にします。


注 –

多くの配備では、インフラストラクチャーの重要な部分には DHCP を使用せずに静的 IP アドレスを設定することが一般的です。ネットワーク上のルーターや特定のサーバーなど、クライアントになるべきデバイスとそうでないデバイスの判定については、このマニュアルでは説明しません。


ProcedureOracle Solaris DHCP クライアントを使用可能にする方法

この手順が必要なのは、Oracle Solaris のインストール時に DHCPv4 が使用可能にされていない場合だけです。DHCPv6 の場合、この手順は不要です。

  1. クライアントシステムでスーパーユーザーになります。

  2. このシステムで事前構成 (対話型構成ではなく) を使用している場合は、sysidcfg ファイルを編集します。そして、sysidcfg ファイル内の network_interface キーワードに dhcp サブキーを追加します。

    たとえば、network_interface=hme0 {dhcp} のように指定します。詳細は、sysidcfg(4) のマニュアルページを参照してください。

  3. システムを構成解除し、シャットダウンします。


    # sys-unconfig
    

    このコマンドで削除される構成情報についての詳細は、sys-unconfig(1m) のマニュアルページを参照してください。

  4. シャットダウンが完了したら、システムを再起動します。

    事前構成を使用している場合、システムは起動時に、sysidcfg ファイルの dhcp サブキーによって、DHCP クライアントを使用するように構成されます。

    事前構成を使用していない場合には、システムの再起動時に、システム構成情報の入力を sysidtool プログラムから求められます。詳細は、sysidtool(1M) のマニュアルページを参照してください。

  5. DHCP を使用してネットワークインタフェースを構成するようにプロンプトが表示されたら、Yes を選択します。

ProcedureOracle Solaris DHCP クライアントを使用不可にする方法

  1. クライアントシステムでスーパーユーザーになります。

  2. sysidcfg ファイルを使用してシステムを事前構成した場合には、dhcp サブキーを network_interface キーワードから削除します。

  3. システムを構成解除し、シャットダウンします。


    # sys-unconfig
    

    このコマンドで削除される構成情報についての詳細は、sys-unconfig(1m) のマニュアルページを参照してください。

  4. シャットダウンが完了したら、システムを再起動します。

    システムで事前構成を使用している場合には、構成情報を求めるメッセージは表示されず、DHCP クライアントは構成されません。

    事前構成を使用していない場合には、システムの再起動時に、システム構成情報の入力を sysidtool プログラムから求められます。詳細は、sysidtool(1M) のマニュアルページを参照してください。

  5. DHCP を使用してネットワークインタフェースを構成するように要求するプロンプトが表示されたら、No を選択します。

DHCP クライアント管理

通常のシステムオペレーションのもとでは、Oracle Solaris DHCP クライアントソフトウェアの操作は必要ありません。dhcpagent デーモンはシステムブート時に自動的に起動し、リースについてサーバーとネゴシエーションを行い、シャットダウン時に停止します。dhcpagent デーモンを手動で直接、起動または停止しないようにしてください。代わりに、クライアントシステム上のスーパーユーザーであれば、必要に応じて ifconfig コマンドを使い、dhcpagent によるネットワークインタフェースの管理を変更できます。

DHCP クライアントで使用する ifconfig コマンドオプション

この節では、ifconfig(1m) のマニュアルページに記載されているコマンドオプションについてまとめます。これらのコマンドの DHCPv4 バージョンと DHCPv6 バージョンでは、「inet6」キーワードだけが異なります。DHCPv6 の場合は「inet6」キーワードを使用し、DHCPv4 の場合は省略してください。

ifconfig コマンドでは、次のことができます。

DHCP クライアント構成パラメータの設定

クライアントシステムの /etc/default/dhcpagent ファイルには、dhcpagent に対する調整可能パラメータが含まれています。テキストエディタを使用して、クライアントの動作に影響を与えるパラメータを変更できます。/etc/default/dhcpagent ファイルには十分な説明が記載されていますので、詳細については、dhcpagent(1M) のマニュアルページだけでなく、このファイルも参照してください。

/etc/dhcp.interface ファイルは、DHCP クライアントに影響を及ぼすパラメータの設定が行われるもう 1 つの場所です。このファイルで設定されたパラメータは、システム起動スクリプトの ifconfig コマンドによって使用されます。ただし、これは DHCPv4 にのみ当てはまります。DHCPv6 には、これに相当するものはありません。

デフォルトで、DHCP クライアントは次のように構成されます。

DHCPv4 の場合

DHCPv4 および DHCPv6 の場合

複数のネットワークインタフェースを備えた DHCP クライアントシステム

DHCP クライアントは、同じシステムにあるいくつかの異なるインタフェースを同時に管理できます。インタフェースは、物理インタフェースでも論理インタフェースでもかまいません。個々のインタフェースは、独自の IP アドレスとリース時間をもっています。複数のネットワークインタフェースが DHCP 用に構成されていると、クライアントは個別の要求を出してそれらのインタフェースを構成します。クライアントは、インタフェースごとに別々のネットワーク構成パラメータ群を維持します。パラメータは別々に格納されますが、パラメータの中にはその性質上、広域的なものがあります。グローバルパラメータは、システム全体 (特定のネットワークインタフェースではなく) に適用されます。

グローバルパラメータには、ホスト名、NIS ドメイン名、時間帯などがあります。通常、グローバルパラメータの値はインタフェースごとに異なります。ただし、各システムに関連付けられたグローバルパラメータには、それぞれ 1 つの値だけを使用できます。グローバルパラメータの問い合わせに対して応答が 1 つだけ返されるようにするために、一次ネットワークインタフェース用のパラメータだけが使用されます。一次インタフェースとして扱うインタフェースについては、そのインタフェースの /etc/dhcp.interface ファイルに primary という文字を挿入できます。primary というキーワードが使用されていないと、英字順で見た最初のインタフェースが一次インタフェースとみなされます。

DHCP クライアントは、論理インタフェースの場合も、物理インタフェースの場合も、そのリースを同じように管理します。ただし、論理インタフェースの場合は、次の制限があります。

DHCPv4 クライアントのホスト名

デフォルトでは、Oracle Solaris DHCPv4 クライアントは、それ自身のホスト名を提供しません。DHCP サーバーがホスト名を提供するとみなすからです。デフォルトでは、Oracle Solaris DHCPv4 サーバーは、DHCPv4 クライアントにホスト名を提供するように構成されています。Oracle Solaris DHCPv4 クライアントとサーバーを同時に使用する場合には、2 つのデフォルトが有効に機能します。しかし、Oracle Solaris DHCPv4 クライアントと Sun 以外の DHCP サーバーを使用する場合には、ホスト名がサーバーからクライアントに提供されないことがあります。ホスト名が DHCP を通して Oracle Solaris DHCP クライアントに提供されない場合、クライアントシステムは、ホスト名として使用する名前を /etc/nodename ファイルに求めます。ホスト名がファイルにない場合は、unknown に設定されます。

DHCP サーバーが DHCP Hostname オプションで名前を提供している場合には、/etc/nodename ファイルの値が異なっていても、このホスト名が使用されます。クライアントで特定のホスト名を使用する場合は、その名前をクライアントから要求できます。そのための手順は次のとおりです。


注 –

次の手順は、すべての DHCP サーバーで機能するとは限りません。この手順では、クライアントに対し、特定のホスト名を DHCP サーバーに送信して同じ名前を応答で受け取るように指示します。

ただし、DHCP サーバーはこの要求を尊重する必要はないため、尊重しないことがあります。その場合は、単に別の名前を返します。


Procedure特定のホスト名を要求するように Oracle Solaris DHCPv4 クライアントを有効にする方法

  1. クライアントシステム上で、スーパーユーザーとして /etc/default/dhcpagent ファイルを編集します。

  2. /etc/default/dhcpagent ファイルで REQUEST_HOSTNAME キーワードを見つけ、次のように変更します。


    REQUEST_HOSTNAME=yes

    REQUEST_HOSTNAME の前にコメント符号 (#) がある場合は、# を削除します。REQUEST_HOSTNAME キーワードがない場合は、これを挿入します。

  3. クライアントシステム上で /etc/hostname.interface ファイルを編集して、次の行を追加します。

    inet hostname
    

    hostname には、クライアントで使用する名前を指定します。

  4. 次のコマンドを入力し、クライアントは再起動時に完全な DHCP ネゴシエーションを実行します。


    # ifconfig interface dhcp release
    # reboot
    

    クライアントにキャッシュされている DHCP データは削除されます。クライアントは、プロトコルを再開して、新しい構成情報 (新しいホスト名を含む) を要求します。DHCP サーバーは、そのホスト名がネットワークの別のシステムで使用されていないか確認してから、それをクライアントに割り当てます。DHCP サーバーは、ネームサービスの情報をクライアントのホスト名で更新できます。ただし、そのためには、DHCP サーバーがそのように構成されていなければなりません。

    このホスト名をあとで変更する場合は、手順 3 から手順 4 までを繰り返します

DHCP クライアントシステムとネームサービス

Oracle Solaris システムでは、ネームサービスとして、DNS、NIS、NIS+、およびローカルファイルストア (/etc/inet/hosts) がサポートされます。これらのネームサービスを使用するためには、ある程度の事前構成が必要です。使用するネームサービスを指定するために、ネームサービススイッチ構成ファイル (nsswitch.conf(4) を参照) も正しく設定してください。

ネームサービスのクライアントとしてシステムを構成しないと、DHCP クライアントシステムでネームサービスを使用することはできません。デフォルトでは、システムのインストール時に異なる構成を指定しないかぎり、ローカルファイルだけが使用されます。

次の表は、DHCP に関連する考慮事項をネームサービスごとに要約したものです。表には、クライアントの設定に役立つ情報へのリンクが含まれています。

表 16–1 DHCP クライアントシステムに対するネームサービスクライアント設定情報

ネームサービス  

クライアント設定情報 

NIS 

Oracle Solaris DHCP を使って Oracle Solaris ネットワークインストール情報をクライアントシステムに送信する場合には、NISservsNISdmain オプションを含む構成マクロを使用できます。これらのオプションは、NIS サーバーの IP アドレスと、NIS ドメイン名をクライアントに渡すためのものです。これによって、クライアントは自動的に NIS クライアントになります。

DHCP クライアントシステムで Oracle Solaris がすでに動作している場合、DHCP サーバーが NIS 情報をクライアントに送信しても、クライアントシステムが自動的に NIS クライアントとして構成されるわけではありません。 

DHCP クライアントシステムに NIS 情報を送信するように DHCP サーバーが構成されている場合には、クライアントで次の dhcpinfo コマンドを実行すれば、クライアントに渡された値を表示することができます。

# /sbin/dhcpinfo NISdmain

# /sbin/dhcpinfo NISservs


注 –

DHCPv6 の場合は、コマンドに -v6 および異なるプロトコルキーワードを含めます。

# /sbin/dhcpinfo -v6 NISDomain

# /sbin/dhcpinfo -v6 NISServers


NIS ドメイン名と NIS サーバーの値は、システムを NIS クライアントとして構成するときに使用します。 

Oracle Solaris DHCP クライアントシステム用の NIS クライアントを標準的な方法で設定します (『Solaris のシステム管理 (ネーミングとディレクトリサービス : DNS、NIS、LDAP 編)』の第 5 章「NIS サービスの設定と構成」を参照)。


ヒント –

スクリプトを作成すれば、dhcpinfoypinit を使って、DHCP クライアントシステムにおける NIS クライアントの構成を自動的に行うことができます。


NIS+ 

DHCP クライアントシステム用の NIS+ クライアントを従来の方法で設定した場合は、DHCP サーバーからクライアントに毎回異なるアドレスが割り当てられることがあります。NIS+ のセキュリティーには構成の一部として IP アドレスが含まれているため、これによってセキュリティーの問題が発生します。クライアントが毎回同じアドレスを確実に取得できるようにするには、DHCP クライアントシステム用の NIS+ クライアントを標準でない方法で設定します。その方法については、「NIS+ クライアントとしての DHCP クライアントの設定」を参照してください。

DHCP クライアントシステムに手動で IP アドレスがすでに割り当てられている場合には、クライアントのアドレスは常に同じです。NIS+ クライアントは標準的な方法で設定できます (『Solaris のシステム管理 (ネーミングとディレクトリサービス : NIS+ 編)』「NIS+ クライアントマシンの設定」を参照)。

/etc/inet/hosts

ネームサービスとして /etc/inet/hosts を使用する DHCP クライアントシステムには、/etc/inet/hosts ファイルを設定します。

DHCP クライアントシステム自身の /etc/inet/hosts ファイルには、そのホスト名が DHCP ツールによって追加されます。ただし、同じネットワークにあるほかのシステムの /etc/inet/hosts ファイルには、このホスト名を手動で追加する必要があります。さらに、DHCP サーバーシステムが名前を解決するために /etc/inet/hosts を使用する場合は、このシステムにもクライアントのホスト名を手動で追加する必要があります。

DNS 

DHCP クライアントシステムが DNS ドメイン名を DHCP から取得する場合には、クライアントシステムの /etc/resolv.conf ファイルは自動的に構成されます。さらに、/etc/nsswitch.conf ファイルも自動的に更新され、検索順序でほかのネームサービスより後ろにある hosts 行に dns が付加されます。DNS の詳細については、『Solaris のシステム管理 (ネーミングとディレクトリサービス : DNS、NIS、LDAP 編)』を参照してください。

NIS+ クライアントとしての DHCP クライアントの設定

DHCP クライアントである Oracle Solaris システムで NIS+ ネームサービスを使用できます。ただし、DHCP サーバーが毎回異なるアドレスを提供する可能性があると、NIS+ のセキュリティー強化機能の 1 つである Data Encryption Standard (DES) 資格の作成が部分的に省略されます。セキュリティーのためには、常に同じアドレスを提供するように DHCP サーバーを構成してください。つまり、DHCP を使用しない NIS+ クライアントを設定する際に、クライアント固有の DES 資格を NIS+ サーバーに追加します。nisclient スクリプトや nisaddcred コマンドを使用するなど、資格を作成する方法はいくつかあります。

NIS+ 資格を生成するためには、クライアントが静的なホスト名をもち、資格の作成と格納ができなければなりません。NIS+ と DHCP を使用するクライアントを設定するときは、すべての DHCP クライアントのホスト名に使用できる同一の資格を作成する必要があります。この方法では、DHCP クライアントがどのような IP アドレスと、関連するホスト名を受け取っても、同じ DES 資格を使用できます。

次に、すべての DHCP ホスト名に使用できる同一の資格を作成する方法を示します。この手順は、DHCP クライアントで使用されるホスト名が分かる場合にのみ使用できます。たとえば、DHCP サーバーがそれらのホスト名を生成する場合、クライアントが受け取る可能性のあるホスト名が分かります。

ProcedureNIS+ クライアントとして Oracle Solaris DHCP クライアントを設定する方法

NIS+ クライアントになる DHCP クライアントシステムは、NIS+ ドメイン内にある別の NIS+ クライアントシステムに属する資格を使用する必要があります。この手順では、当該システムのみの資格が生成され、その資格は当該システムにログインしたスーパーユーザーだけに適用されます。DHCP クライアントシステムにログインするほかのユーザーには、NIS+ サーバー内で固有の独自の資格が必要です。これらの資格は、『Solaris のシステム管理 (ネーミングとディレクトリサービス : NIS+ 編)』に示されている手順に従って作成されます。

  1. NIS+ サーバーで次のコマンドを入力して、クライアントの資格を作成します。


    # nisgrep nisplus-client-name cred.org_dir > /tmp/file
    

    このコマンドは、NIS+ クライアント用の cred.org_dir テーブルエントリを一時ファイルに書き込みます。

  2. cat コマンドで一時ファイルの内容を表示します。

    あるいは、テキストエディターを使用します。

  3. DHCP クライアント用に使用する資格をコピーします。

    公開鍵と非公開鍵をコピーする必要があります。両者とも、コロンで区切られた数字と文字からなる長い文字列です。この情報は、次のステップでコマンドに貼り付けられます。

  4. 次のコマンドを入力して DHCP クライアント用の資格を追加します。


    # nistbladm -a cname=" dhcp-client-name@nisplus-domain" auth_type=DES \
    auth_name="unix.dhcp-client-name@nisplus-domain" \
    public_data=copied-public-key \ 
    private_data=copied-private-key
    

    copied-public-key には、一時ファイルからコピーした公開鍵情報を貼り付けます。copied-private-key には、一時ファイルからコピーした非公開鍵情報を貼り付けます。

  5. DHCP クライアントシステムで次のコマンドを入力して、NIS+ クライアントシステムから DHCP クライアントシステムにファイルをリモートコピーします。


    # rcp nisplus-client-name:/var/nis/NIS_COLD_START /var/nis
    # rcp nisplus-client-name:/etc/.rootkey /etc
    # rcp nisplus-client-name:/etc/defaultdomain /etc
    

    「permission denied (アクセスが拒否された)」というメッセージを受信した場合、システムはリモートコピーを許可するように設定されていない可能性があります。この場合には、通常のユーザーとしてこれらのファイルを中間の場所にコピーします。次に、スーパーユーザーとして、中間の場所にあるファイルを DHCP クライアントシステムの適切な場所にコピーします。

  6. DHCP クライアントシステムで次のコマンドを入力して、NIS+ 用の適切なネームサービススイッチファイルをコピーします。


    # cp /etc/nsswitch.nisplus /etc/nsswitch.conf
    
  7. DHCP クライアントシステムを再起動します。

    これで、DHCP クライアントシステムは NIS+ サービスを使用できます。


例 16–1 Oracle Solaris DHCP クライアントシステムを NIS+ クライアントとして設定

次の例では、nisei というシステムがあります。これは、NIS+ ドメイン dev.example.net の NIS+ クライアントです。さらに、dhow という DHCP クライアントシステムがあります。この例では dhow を NIS+ クライアントとして設定します。


(First log in as superuser on the NIS+ server)
# nisgrep nisei cred.org_dir > /tmp/nisei-cred
# cat /tmp/nisei-cred
nisei.dev.example.net.:DES:unix.nisei@dev.example.net:46199279911a84045b8e0
c76822179138173a20edbd8eab4:90f2e2bb6ffe7e3547346dda624ec4c7f0fe1d5f37e21cff63830
c05bc1c724b
# nistbladm -a cname="dhow@dev.example.net." \
auth_type=DES auth_name="unix.dhow@dev.example.net" \
public_data=46199279911a84045b8e0c76822179138173a20edbd8eab4 \
private_data=90f2e2bb6ffe7e3547346dda624ec4c7f0fe1d5f37e21cff63830\
c05bc1c724b
# rlogin dhow
(Log in as superuser on dhow)
# rcp nisei:/var/nis/NIS_COLD_START /var/nis
# rcp nisei:/etc/.rootkey /etc
# rcp nisei:/etc/defaultdomain /etc
# cp /etc/nsswitch.nisplus /etc/nsswitch.conf
# reboot

これで、DHCP クライアントシステム dhow は NIS+ サービスを使用できます。



例 16–2 スクリプトによる資格の追加

多数の DHCP クライアントシステムを NIS+ クライアントとして設定する場合は、スクリプトを作成できます。スクリプトを使えば、cred.org_dir NIS+ テーブルのエントリをすばやく追加できます。次に、サンプルスクリプトを示します。


#! /usr/bin/ksh  
# 
# Copyright (c) by Sun Microsystems, Inc. All rights reserved. 
# 
# Sample script for cloning a credential. Hosts file is already populated  
# with entries of the form dhcp-[0-9][0-9][0-9]. The entry we're cloning 
# is dhcp-001. 
#  
#  
PUBLIC_DATA=6e72878d8dc095a8b5aea951733d6ea91b4ec59e136bd3b3 
PRIVATE_DATA=3a86729b685e2b2320cd7e26d4f1519ee070a60620a93e48a8682c5031058df4
HOST="dhcp-" 
DOMAIN="mydomain.example.com"  
 
for 
i in 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019
do         
     print - ${HOST}${i}         
     #nistbladm -r [cname="${HOST}${i}.${DOMAIN}."]cred.org_dir         
     nistbladm -a cname="${HOST}${i}.${DOMAIN}." \
         auth_type=DES auth_name="unix.${HOST}${i}@${DOMAIN}" \
         public_data=${PUBLIC_DATA} private_data=${PRIVATE_DTA} cred.org_Dir
done  
 
exit 0

DHCP クライアントのイベントスクリプト

Oracle Solaris DHCP クライアントを適切に設定すれば、実行可能なプログラムやスクリプトを実行して、クライアントシステムに必要な任意のアクションを行うことができます。「イベントスクリプト」と呼ばれるこのプログラムやスクリプトは、一定の DHCP リースイベントが発生すると自動的に実行されます。イベントスクリプトを使用すれば、特定のリースイベントに応じてほかのコマンドやプログラム、スクリプトを実行できます。この機能を使用するためには、独自のイベントスクリプトを作成する必要があります。

dhcpagent では、DHCP リースイベントを表すために次のイベントキーワードが使用されます。

イベントキーワード

備考欄

BOUNDBOUND6

インタフェースが DHCP 用に構成されました。クライアントは、DHCP サーバーから肯定メッセージ (DHCPv4 ACK) または (DHCPv6 Reply) を受け取り、IP アドレスに対するリース要求を認められます。このイベントスクリプトは、インタフェースの構成が正常に終わると直ちに呼び出されます。

EXTENDEXTEND6

クライアントによるリースの延長が成功しました。このイベントスクリプトは、クライアントが更新要求に対する肯定メッセージを DHCP サーバーから受け取ると直ちに呼び出されます。

EXPIREEXPIRE6

リース時間が終了すると、リースが期限切れになります。DHCPv4 の場合、このイベントスクリプトは、リースされたアドレスがインタフェースから削除され、インタフェースが停止状態にされる直前に呼び出されます。DHCPv6 の場合、このイベントスクリプトは、最後に残っているリースされたアドレスがインタフェースから削除される直前に呼び出されます。

DROPDROP6

クライアントがインタフェースを DHCP 制御下から削除する目的でリースを中断しました。このイベントスクリプトは、インタフェースが DHCP 制御から削除される直前に呼び出されます。

RELEASERELEASE6

クライアントが IP アドレスを解放します。このイベントスクリプトは、クライアントがインタフェース上のアドレスを解放し、DHCPv4 RELEASE または DHCPv6 Release パケットを DHCP サーバーに送信する直前に呼び出されます。

INFORM INFORM6

インタフェースは、DHCPv4 INFORM または DHCPv6 Information-Request メッセージを使用して、新しい構成情報または更新された構成情報を DHCP サーバーから取得します。これらのイベントは、DHCP クライアントがサーバーから構成パラメータだけを取得し、IP アドレスリースを取得しない場合に発生します。

LOSS6

リースが期限切れになったとき、有効なリースが 1 つ以上残っている場合は、期限切れのアドレスが削除される直前にこのイベントスクリプトが呼び出されます。削除されるアドレスは IFF_DEPRECATED フラグでマークされます。

これらのイベントが発生するたびに、dhcpagent は次のコマンドを呼び出します。


/etc/dhcp/eventhook interface event

ここで interface は DHCP を使用しているインタフェースを、event は前述のイベントキーワードの 1 つをそれぞれ表します。たとえば、最初に ce0 インタフェースを DHCP 用に構成すると、dhcpagent は、イベントスクリプトを次のように呼び出します。


/etc/dhcp/eventhook ce0 BOUND

イベントスクリプト機能を使用するためには、次のことを行う必要があります。

イベントスクリプトは、そのプログラム環境を dhcpagent から継承し、root 特権で実行します。スクリプトでは、必要に応じて、dhcpinfo ユーティリティーを使ってより詳しいインタフェースの情報を取得できます。詳細は、dhcpinfo(1) のマニュアルページを参照してください。

dhcpagent デーモンは、イベントスクリプトがすべてのイベントに対して終了するまで待ちます。55 秒経ってもイベントスクリプトが終了しないと、dhcpagentSIGTERM シグナルをスクリプトプロセスに送信します。さらに、追加の 3 秒が過ぎてもプロセスが終了しないと、デーモンは SIGKILL シグナルを送信してプロセスを強制的に終了させます。

dhcpagent(1M) のマニュアルページにイベントスクリプトの一例が示されています。

例 16–3 は、DHCP イベントスクリプトを使って /etc/resolv.conf ファイルの内容を最新の状態に保つ方法を示しています。BOUNDEXTEND イベントが発生すると、スクリプトは、ドメインサーバーとネームサーバーの名前を変更します。 EXPIREDROPRELEASE イベントが発生すると、スクリプトは、ドメインサーバーとネームサーバーの名前をファイルから削除します。


注 –

このスクリプト例では、DHCP が、ドメインサーバー名およびネームサーバー名の正式な情報源であることを想定しています。さらに、DHCP 制御下のすべてのインタフェースが、一貫性のある最新の情報を返すことを想定しています。これらの前提は、実際のシステムの条件と一致しない場合があります。



例 16–3 /etc/resolv.conf ファイルを更新するイベントスクリプト

#!/bin/ksh -p

PATH=/bin:/sbin export PATH
umask 0222

# Refresh the domain and name servers on /etc/resolv.conf

insert ()
{
	dnsservers=`dhcpinfo -i $1 DNSserv`
	if [ -n "$dnsservers" ]; then
		# remove the old domain and name servers
		if [ -f /etc/resolv.conf ]; then
			rm -f /tmp/resolv.conf.$$
			sed -e '/^domain/d' -e '/^nameserver/d' \
			    /etc/resolv.conf > /tmp/resolv.conf.$$
		fi

		# add the new domain
		dnsdomain=`dhcpinfo -i $1 DNSdmain`
		if [ -n "$dnsdomain" ]; then
			echo "domain $dnsdomain" >> /tmp/resolv.conf.$$
		fi

		# add new name servers
		for name in $dnsservers; do
			echo nameserver $name >> /tmp/resolv.conf.$$
		done
		mv -f /tmp/resolv.conf.$$ /etc/resolv.conf
	fi
}

# Remove the domain and name servers from /etc/resolv.conf

remove ()
{
	if [ -f /etc/resolv.conf ]; then
		rm -f /tmp/resolv.conf.$$
		sed -e '/^domain/d' -e '/^nameserver/d' \
		    /etc/resolv.conf > /tmp/resolv.conf.$$
		mv -f /tmp/resolv.conf.$$ /etc/resolv.conf
	fi
}

case $2 in
BOUND | EXTEND)
	insert $1
	exit 0
	;;
EXPIRE | DROP | RELEASE)
	remove
	exit 0
	;;
*)
	exit 0
	;;
esac