dhclient-script - DHCP クライアントのネットワーク設定スクリプト |
DHCP ク ラ イ ア ン ト の ネッ トワーク設定スクリプトは、時あるごとに dhclient(8) が呼び出します。 DHCP クライアントは、本スクリプトを使用 す る ことにより、アドレス要求に先立つ各インタフェースの初期設定と、付与さ れたアドレスの検査と、リース獲得時のインタフェースの最終設定を 行 い ま す。 リースが獲得されなかった場合、定義済みのリースが存在するならばこれ を検査するために本スクリプトは使用され、有効なリースが判明しなかった 場 合にももう 1 回このスクリプトが呼ばれます。 本 ス ク リプトは、エンドユーザにカスタマイズされることを意図していませ ん。ローカルなカスタマイズが必要な場合、これは入 (enter) と出 (exit) と い う フックを使用することで可能となります (詳細はフック参照)。これらの フックは、 /etc/resolv.conf 作成時に、クライアントのデフォルト 動 作 を ユーザがオーバライドできるようにします。 特 定のオペレーティングシステムでは、クライアントの実体は動作するとして も、標準のスクリプトが動作しないかもしれません。先駆的なユーザが新規 ス ク リプトを作成したり既存のものを修正したりする必要があることはもっとも なことです。一般的には、それぞれのコンピュータに固有のカスタマ イ ズ は /etc/dhclient.conf スクリプトで行うべきです。 /etc/dhclient.conf のカス タマイズ無しにできないカスタマイズや、入と出のフックの使用ではできな い カスタマイズに気づいた場合には、バグレポートを送ってください。 |
開 始時に、クライアントスクリプトはまずシェル関数を定義します。その関数 は make_resolv_conf であり、後に /etc/resolv.conf ファイルを作成する た め に使用されます。デフォルト動作をオーバライドするには、この関数を入の フックスクリプトで再定義してください。 make_resolv_conf 関数の定義の後、クライアントスクリプトは実 行 可 能 な /etc/dhclient-enter-hooks ス クリプトの存在を検査し、存在する場合には Bourne シェルの ’.’ コマンドを使用して本スクリプトをインラインで起動 し ま す。操作で記述されているすべての環境が本スクリプトで使用可能であり、 スクリプトの動作の変更が必要な場合には環境の修正が許されています。ス ク リ プト実行中にエラーが発生した場合、 exit_status 変数を非 0 値に設定す ることが可能 で あ り、 ク ラ イ ア ン ト ス ク リ プ ト 終 了 直 後 に /sbin/dhclient-script はそのエラーコードで終了します。 す べ て の 処 理 の 完 了 後 に、 /sbin/dhclient-script は実行可能な /etc/dhclient-exit-hooks スクリプトの存在を検査し、存在する場合には ’.’ コ マ ン ド で こ れ を 起 動 し ま す。 dhclient-script の終了状態は dhclient-exit-hooks の exit_status シェル変数に渡され、起動された仕事に ス ク リ プ ト が 成 功 し た 場 合 に は 値 は 常 に 0 になります。 dhclient-enter-hooks の項で前述したその他の環境も引 き 継 が れ ま す。 /etc/dhclient-exit-hooks は exit_status に手を加えて dhclient-script の 戻り値を変更できます。 |
dhclient がクライアント設定スクリプトを起動する必要があるとき、様々な変 数を環境に定義してから /sbin/dhclient-script を起動します。すべての場合 において、$reason にはスクリプトが起動される理由名が設定されます。次 の 理 由 が 現 在 定義されています: MEDIUM, PREINIT, BOUND, RENEW, REBIND, REBOOT, EXPIRE, FAIL, TIMEOUT。 |
DHCP クライアントは、インタフェースのメディアタイプの設定を求めて い ま す。インタフェース名は $interface で渡され、メディアタイプは $medium で 渡されます。 |
DHCP クライアントは、実際のアドレスを受け取る前にパケットを送信する目的 で、 要 求通りにインタフェースが設定されることを求めています。 BSD のソ ケットライブラリを使用するクライアントでは、 IP アドレス 0.0.0.0 かつブ ロードキャストアドレス 255.255.255.255 で、インタフェースを設定すること を意味します。他のクライアントでは、実際に IP アドレスを与えることな く 単 にインタフェースを設定することで実現されるでしょう。インタフェース名 は $interface で渡され、メディアタイプは $medium で渡されます。 IP エイリアスが dhclient.conf で宣言されている場合、この ア ド レ ス が $alias_ip_address で渡されます。本 IP アドレスへの経路とともに、本 IP アドレスを対象インタフェースから削除する必要があります。 |
DHCP クライアントは、新アドレスへの初期の結合を完了しました。新しい IP アドレスは $new_ip_address で渡され、インタフェース名は $interface で渡 されます。メディアタイプは $medium で渡されます。サーバから獲得したオプ ションは、dhcp-options で宣言されているオプション名で渡されます。例外と して、 有効なシェル変数とするためにダッシュ (’-’) はアンダスコア(’_’)で 置 き換えられ、変数名は new_ で開始します。例えば、新しいサブネットマス クは $new_subnet_mask で渡されます。 アドレスを実際に設定する前に、dhclient-script は何らかの方法でそのア ド レ スに対して ARP を行い、返事を受け取った場合には非 0 の値で終了するべ きです。この場合クライアントは DHCPDECLINE メッセージをサーバに送信し、 違うアドレスを取得します。この作業は RENEW, REBIND, REBOOT 状態でも同様 に行いますが、必ずしも必要ではなく、実際好ましくないでしょう。 結合が完了すると、ネットワークに関する多くのパラメータを設定する必要 が あるでしょう。 $new_domain_name および $new_domain_name_servers (これに は複数のサーバを空白で区切って列挙してあるかもしれません) を使用し て、 新 し い /etc/resolv.conf を 作 成する必要があります。デフォルト経路 は、$new_routers を使用して設定す る 必 要 が あ り ま す。 静 的 経 路 は、$new_static_routes を使用して設定する必要があるかもしれません。 IP エイリアスが宣言されている場合、ここで設定する必要があります。エイリ アスの IP アドレスは $alias_ip_address として記述され、エイリアス用 に 設 定される他の DHCP オプション (例えばサブネットマスク) は前述のように 変数で渡されますが、 $new_ で開始するのではなく $alias_ で開始しま す。 エイリアスの IP アドレスが結合された IP アドレス ($new_ip_address) と同 じ場合、これを使用してはならないことに注意してください。なぜなら、こ の 場合には他のエイリアスのパラメータが正しくない可能性があるからです。 |
結 合が更新されると、スクリプトは BOUND と同様に呼ばれますが、 $new_ で 開始する全変数に加えて $old で開始する別の変数の組があるという例外が あ り ます。変更された可能性がある永続的な設定は、削除する必要があります。 例えば、結合されたアドレスに対するローカル経路が設定された場 合、 古 い ロー カル経路を削除する必要があります。デフォルト経路が変更された場合、 古いデフォルト経路を削除する必要があります。静的経路が変更された場 合、 古 いものを削除する必要があります。その他については、BOUND と同様に処理 可能です。 |
DHCP クライアントが、新規 DHCP サーバに再結合されました。これ は RENEW と 同様に扱えますが、IP アドレスが変わった場合には、 ARP 表をクリアする 必要があります。 |
DHCP クライアントは、リブート後に元のアドレスを再獲得することに成功しま した。これは BOUND と同様に処理可能です。 |
DHCP クライアントはリース更新と新規リース獲得に失敗し、リースの期限が切 れました。対象 IP アドレスを解放する必要があり、 RENEW および REBIND と 同様に、関連するパラメータを削除する必要があります。 |
DHCP クライアントは DHCP サーバに接続できず、また検査した IP アドレスに は有効なものはありませんでした。最後に検査したリースのパラメータは、 設 定解除する必要があります。これは、EXPIRE と同様に扱えます。 |
DHCP クライアントはどの DHCP サーバにも接続できませんでした。しかしなが ら、古いリースが識別され、 BOUND と同様に、この古いリースのパラメータが 渡 されました。クライアントの設定スクリプトは、このパラメータを検査し、 これが有効であると信じる理由があるならば、値 0 で終了すべきです。そうで ないならば、非 0 の値で終了すべきです。 リースを検査する通常の方法は、REBIND と同様にネットワークを設定して (複 数のリースを検査するために呼ばれることがあるからです)、 $routers で定義 さ れ る 最 初 のルータに ping することです。応答を受信した場合、インタ フェースが現在接続されているネットワークに対して、リースが有 効 で す。 $new_static_routers に 加えて $new_routers に列挙されている全ルータに ping を試すようになれば、完全性が増すでしょう。しかし、現在のスクリプト はそうなっていません。 |
類 似したオペレーティングシステムに対するスクリプトファイルは似ていたり 全く同じかもしれませんが、一般には、各オペレーティングシステム用に各 々 の ス ク リ プトファイルがあるべきです。 Internet Systems Consortium の DHCP 配布に含まれるスクリプトファイルは、 client/scripts 以下の配 布 ツ リーにあり、動作対象オペレーティングシステム名になっています。 |
複 数インタフェースを使用する場合、サーバが提供する設定パラメータ同士が 衝突しないようにする明確な方 法 は あ り ま せ ん。 例 え ば、 標 準 の dhclient-script は /etc/resolv.conf を再度書き換えてしまいます。すなわ ち、複数のインタフェースが設定されている場合、あるサーバから提供され る 値 に /etc/resolv.conf が初期化された後に、別のサーバから提供される値に 初期化されるという動作を繰り返します。どちらのサーバから提供される情 報 も 有効である場合には、実際上問題とはならないものの、混乱のもとになりえ ます。 |
dhclient-script(8) は Ted Lemon が Vixie Enterprises と 協 力 し て Internet Systems Consortium の た めに書きました。 Internet Systems Consortium についてより詳しくは、 http://www.isc.org をご覧くだ さ い。 Vixie Enterprises についてより詳しくは、 http://www.vix.com をご覧くだ さい。 |