EN JA
DHCLIENT-SCRIPT(8)
DHCLIENT-SCRIPT(8) FreeBSD System Manager's Manual DHCLIENT-SCRIPT(8)

名称

dhclient-scriptDHCP クライアントのネットワーク設定スクリプト

解説

DHCP クライアントのネットワーク設定スクリプトは、適宜 dhclient(8) によって呼び出されます。アドレスを要求する前に各インタフェースの初期設定するために、いったん提供されたアドレスをテストするために、そして、いったんリースが獲得されたインタフェースの最終的な設定するために、このスクリプトは、 DHCP クライアントによって使用されます。リースが獲得されないなら、スクリプトは、事前に定義されたリースをテストするために使用され、獲得され、有効なリースを特定することができないなら、このスクリプトが一度、呼び出されます。

一般的に、特定のコンピュータに特有のカスタマイズは、 /etc/dhclient.conf ファイルで行われるべきです。

操作

dhclient(8) が、クライアント設定スクリプトを呼び出す必要があるとき、多くの環境変数を設定してから dhclient-script を実行します。すべての場合において、 $reason には、スクリプトが呼び出された理由の名前に設定されます。次の理由が現在定義されています: MEDIUM, PREINIT, ARPCHECK, ARPSEND, BOUND, RENEW, REBIND, REBOOT, EXPIRE, FAILTIMEOUT
MEDIUM
DHCP クライアントは、インタフェースのメディアタイプが設定されていることを要求しています。インタフェース名は、 $interface で渡され、メディアタイプは、 $medium で渡されます。
PREINIT
DHCP クライアントは、インタフェースが実施のアドレスを受信する前にパケットを送信するために必要に応じて設定されることを要求しています。これは、IP アドレス 0.0.0.0 とブロードキャストアドレス 255.255.255.255 とのインタフェースを設定することを意味します。インタフェース名は、 $interface で渡され、メディアタイプは、 $medium で渡されます。

IP エイリアスが dhclient.conf(5) で宣言されているなら、このアドレスは、 $alias_ip_address で渡され、その IP エイリアスは、それへの任意のルートとともに、インタフェースから削除されるべきです。

ARPSEND
DHCP クライアントは、そのアドレスに対して ARP 要求を送信することによって、それに与えられたアドレスが、他の誰かがそれを使用しているかどうか調べるためにチェックされることを要求します。どのようにこれを実装するかが明らかではないので、まだ例は存在していません。チェックする IP アドレスは、 $new_ip_address で渡され、インタフェース名は、 $interface で渡されます。
ARPCHECK
DHCP クライアントは、 ARPSEND を使用して送信された ARP 要求の応答が受信されているかどうか知りたいと思っています。そうであるなら、提供されたアドレスが既に要求され、拒否すべきであることを示していて、スクリプトは、非 0 の状態で終了するべきです。 $new_ip_address$interface 変数は、 ARPSEND でのように設定されます。
BOUND
DHCP クライアントは、新しいアドレスへの初期のバインドを完了しました。新しい IP アドレスは、 $new_ip_address で渡され、インタフェース名は、 $interface で渡されます。メディアタイプは、 $medium で渡されます。サーバから獲得されたすべてのオプションは、有効なシェル変数とするために、ダッシュ (‘ -’) は、アンダスコア (‘ _’) に置き換えられ、変数名は、“ new_”で始まることを除いて、 dhcp-options(5) で説明されたオプション名を使用して渡されます。それで例えば、新しいサブネットマスクは、 $new_subnet_mask で渡されます。

バインドが完了したとき、多くのネットワークパラメータは、設定される必要がある思われます。 (空白によって分離された 2 つ以上のサーバをリストするかもしれない) $new_domain_name$new_domain_name_servers の値を使用して、新しい /etc/resolv.conf を作成する必要があります。デフォルトの経路は、 $new_routers を使用して設定されるべきです、そして、静的経路は、 $new_static_routes を使用して設定される必要があるかもしれません。

IP エイリアスが宣言されているなら、ここで設定しなければなりません。エイリアス IP アドレスは、 $alias_ip_address として記述され、エイリアスのために設定される他の DHCP オプション (例えば、サブネットマスク) は、“ $new_”の代わりに“ $alias_”で開始されることを除いて、以前に説明された変数名で渡されます。他のエイリアスパラメータがこの場合不正確であるかもしれないので、バインドされた IP アドレス ( $new_ip_address) が同一であるなら、エイリアス IP アドレスが使用されないことに注意を要します。

RENEW
バインドが更新されたとき、スクリプトは、“ $new_”で始まるすべての変数に加えて、“ $old_”で始まる別の変数の組があることを除いて、 BOUND などで呼び出されます。変更されかもしれない永続的な設定は、削除される必要があります - 例えば、バインドされたアドレスへのローカル経路が設定されているなら、古いローカル経路は、削除されるべきです。デフォルト経路が変更されたなら、古いデフォルト経路は、削除されるべきです。静的経路が変更されたなら、古いもの削除されるべきです。そうでなければ、 BOUND と同様に処理することができます。
REBIND
DHCP クライアントは、新しい DHCP サーバに再バインドされました。これは、IP アドレスが変更されたなら、ARP テーブルがクリアされるべきであることを除いて、 RENEW と同様に取り扱うことができます。
REBOOT
DHCP クライアントは、リブートの後に古いアドレスを再獲得することに成功しました。これは、 BOUND と同様に処理することができます。
EXPIRE
DHCP クライアントは、リースを更新するか、または新しいものを獲得することに失敗し、リースは、有効期限が切れました。その IP アドレスは、放棄しなければなりません、そして、 RENEWREBIND などで、すべての関連するパラメータを削除するべきです。
FAIL
DHCP クライアントは、どんな DHCP サーバにも接続することができず、テストされたどんなリースも有効でありませんでした。テストされた最後のリースからのパラメータは、設定解除されるべきです。これは、 EXPIRE と同様に取り扱うことができます。
TIMEOUT
DHCP クライアントは、どんな DHCP サーバにも接続できませんでした。しかしながら、古いリースは、識別され、パラメータは、 BOUND と同様に渡されました。クライアントの設定スクリプトは、これらのパラメータをテストするべきで、それらが有効であると信じる理由があるなら、0 の値で終了するべきです。そうでなければ、0 以外で終了するべきです。

$reason に従ってアクションを取る前に、 dhclient-script は、 /etc/dhclient-enter-hooks が存在しているかどうかチェックします。見つけられるなら、ソースとして読み込みます。 ( sh(1) を参照)。 $reason に従ってアクションを取った後に、 dhclient-script は、 /etc/dhclient-exit-hooks が存在しているかどうかチェックします。見つけられるなら、ソースとして読み込みます。 ( sh(1) を参照)。 DHCP ネゴシエーションの間に、適切な回数環境を動的に変更するために、これらのフックのスクリプトを使用することができます。例えば、管理者が DHCP インタフェースで別名の IP 番号を無効にしたいなら、 /etc/dhclient-enter-hooks に次を置きたいかもしれません:

[ ."$reason" = .PREINIT ] && ifconfig $interface 0.0.0.0

リースをテストする通常の方法は、 (2 つ以上のリースをテストするために呼ばれるかもしれないので) REBIND と同様にネットワークを設定して、次に、 $routers で定義された最初のルータに ping します。応答が受信されるなら、インタフェースが現在接続されているネットワークに対して、リースは、有効でなければなりません。 $new_static_routes にリストされたものと同様に、 $new_routers にリストされたすべてのルータに ping を試みることは、より完全となるでしょう、しかし、現在のスクリプトは、これを行いません。

作者

dhclient-script のオリジナル版は、Vixie Enterprises と提携して Internet Software Consortium のために Ted Lemon <mellon@fugue.com>によって書かれました。

dhclient-scriptOpenBSD の実装は、 Kenneth R. Westerback <krw@openbsd.org>によって書かれました。

バグ

複数のインタフェースが使用されているなら、サーバで供給された設定パラメータでの衝突を避けるための自明の方法は、ありません - 例えば、現在ある dhclient-script は、 /etc/resolv.conf を書き直します。複数のインタフェースが設定されているなら、 /etc/resolv.conf は、1 つのサーバによって提供された値に初期化され、次に他のサーバと、繰り返されます。両方のサーバによって提供された情報が有効であると仮定する場合、実際の問題を引き起こさないはずですが、混乱させられることもあります。
September 6, 2010 FreeBSD