dhclient(8)

名称
dhclient - 動的ホスト設定プロトコルのクライアント

書式
dhclient [ -p port ] [ -D ] [ -d ] [ -q ] [ -1 ] [ -r ] [ -lf lease-file ] [ -pf pid-file ] [ -cf config-file ] [ -sf script-file ] [ -s server ] [ -g relay ] [ -n ] [ -nw ] [ -w ] [ if0 [ ...ifN ] ]

解説
Internet Systems Consortium の DHCP クライアントである dhclient は動的ホスト設定プロトコル (DHCP: Dynamic Host Configuration Protocol) または BOOTP プロトコルを用いて、あるいは これらのプロトコルが失敗した場合にはアドレスを静的に割り当てて、 1 つ以上のネットワークインタフェースを設定する方法を提供します。

操作

DHCP プロトコルでは、1 つ以上のサブネットに割り当てることのできる IP アドレスのリストを管理する中央サーバに、ホストがアクセスできます。 DHCP クライアントはこのリストからアドレスを要求して、 それをネットワーク通信の一時的な土台に用いることができます。 また DHCP プロトコルは、デフォルトルータの場所やネームサーバの場所など、 クライアントが接続しているネットワークに関する重要な情報を クライアントに詳細に知らせる機構も提供します。

起動時に dhclient は dhclient.conf から設定指示を読み取ります。 それから現在のシステムに組み込まれている すべてのネットワークインタフェースのリストを取得します。 各インタフェースに対し dhclient は DHCP プロトコルを用いて設定を試みます。

システムリブートやサーバ再起動の際にリースを失わないように、 dhclient は割り当てられたリースのリストを dhclient.leases(5) ファイルに保存します。 起動時、dhclient.conf ファイルを読み取った後、 dhclient は dhclient.leases ファイルを読み込んで、 割り当てられたリースに関するメモリを更新します。

新しいリースを取得すると、dhclient.leases ファイルの末尾に付け加えられます。 ファイルが極端に大きくなるのを防ぐために、 dhclient は時おりコア内部のリースデータベースから 新規に dhclient.leases ファイルを作成します。 古い dhclient.leases ファイルは、 dhclient が次にデータベースを作り替えるまで、 dhclient.leases~ という名前で保存されます。

dhclient が最初に起動されたとき (一般的にはシステムブート初期過程の間) に DHCP サーバが利用できなければ、 古いリースは残されます。 その場合、dhclient.leases ファイルから まだ期限の切れていない古いリースを検査し、 有効であると判断されれば、それらの期限が切れるか または DHCP サーバが利用できるようになるまで、そのリースを使います。

DHCP サーバが存在しないネットワークに時おりアクセスする必要が あるような移動ホストは、そのネットワーク上の固定アドレスのリースを あらかじめ読み込んでおくことができます。 DHCP サーバへのアクセスがどれも成功しなかった場合、 dhclient はその静的なリースが有効であるか検証し、 有効であれば次に再起動されるまでそのリースを使います。

また移動ホストは、DHCP は利用できないが BOOTP なら利用できるような ネットワークへ移動することもあるでしょう。 そのような場合は、古いリースを順次試すよりも、 そのネットワークの管理者と相談して BOOTP データベースにエントリを作成してもらい、 そのネットワーク上で素早くブートできるようにするとよいでしょう。

コマンドライン

dhclient が設定しようとするネットワークインタフェースの名前を コマンドラインで指定できます。 コマンドラインでインタフェース名が指定されなければ、 dhclient はすべてのネットワークインタフェースを識別し、 可能なら非ブロードキャストインタフェースは除いて、 それぞれのインタフェースを設定しようとします。

dhclient.conf(5) ファイル中の名前でインタフェースを指定することも可能です。 この方法でインタフェースを指定した場合、クライアントは、 設定ファイル中で指定したインタフェースもしくはコマンド行で 指定したインタフェースのどちらかだけを設定するでしょう。

-D フラグを指定すると、 dhclient が dhclient-script と組み合わせて使用するために作成したスクリプトを、 /tmp に保存させます。

DHCP クライアントが標準ポート (ポート番号 68) 以外のポートで 待機および送信する必要がある場合には -p フラグが使えます。 このフラグに続けて、dhclient が使う udp ポート番号を指定します。 これは主としてデバッグ目的では有用です。 クライアントが待機および送信するために使用するポートに デフォルトとは違うポートを指定する場合、クライアントは もう 1 つ別の送信先ポートも使用します。その送信先ポートは、 指定した送信先ポートよりも大きな番号を持ったものです。

DHCP クライアントは、通常 IP アドレスを獲得していない間 任意のプロトコルメッセージをリミテッドブロードキャスト アドレスである 255.255.255.255 へと送信します。 デバッグ目的で、サーバがこれらのメッセージをどこか別のアドレスへ 送信した方が便利なことがあります。 -s フラグの後に送信先の IP アドレスもしくはドメイン名をつけて指定 できます。 テスト目的で、DHCP クライアントが送信する全てのパケットの giaddr フィールドを -g フラグに送信先の IP アドレスを続けた形を使用することで設定する ことができます。これはテスト目的の時のみ有用なものであり、 堅実さや使いやすさを求める状況で動作することを想定しては いけません。

DHCP クライアントは、通常インタフェースを設定するまでは フォアグラウンドで動作し、その後バックグラウンドで動作 するようになります。dhclient を常にフォアグラウンドの プロセスとして動作させるためには、 -d フラグを指定する必要があります。これは、DHCP クライアントが デバッガのもとで動作している場合や、System V システムの inittab の外側で動作している場合には有効なものです。

このクライアントは、通常は起動メッセージを表示し、アドレスを 獲得するまで標準エラー出力にプロトコルシーケンスを 書き出します。アドレスを獲得した後は syslog (3) ファシリティを使用してメッセージのログを取るだけになります。 -q フラグを使用すると、エラー以外のメッセージを標準エラー出力に 書き出さないようになります。

クライアントは、DHCP プロトコルで義務づけられていないため、 通常は現在取得しているリースを開放することはありません。 ただ、ケーブル ISP のなかには、クライアントが 割り当てられたIP アドレスを開放したい場合には、サーバに 通知するように義務づけているところもあります。 -r フラグを用いると、明示的に現在のリースを開放し、いったん リースを開放するとクライアントは終了します。

-1 フラグを指定すると、 dhclient はひとつのリースに対し 1 度だけしか取得を試みません。 もし取得に失敗すれば dhclient は終了コード 2 で終了します。

DHCP クライアントは、通常は設定情報を ETCDIR/dhclient.conf から、リースデータベースを DBDIR/dhclient.leases から取得し、自分のプロセス ID を RUNDIR/dhclient.pid という名前のファイルに保存し、 そしてネットワークインタフェースを CLIENTBINDIR/dhclient-script を使用して設定します。 これらのファイルに別の名前を指定したり、別の場所を 指定したりするには、それぞれ -cf, -lf, -pf および -sf フラグを、後ろにファイル名を続ける形で使用してください。 この方法は、例えば DHCP クライアントが起動したときに DBDIR もしくは RUNDIR がまだマウントされていない場合には特に有用なものに なり得ます。

DHCP クライアントは、設定すべきネットワーク インタフェースを同定できない場合、通常は終了します。 ラップトップコンピュータやホットスワップ可能な I/O バスを 持ったコンピュータでは、ブロードキャストインタフェースが システム起動後に追加されることがあり得ます。 -w フラグを用いると、そのようなインタフェースが 1 つも 見つからないときにもクライアントが終了しないようにできます。 後で omshell (8) プログラムを使用して、ネットワークインタフェースが追加されたり 削除されたりしたことをクライアントに通知することができ、 これによってクライアントがこのインタフェース上の IP アドレスを設定するよう試みることができます。

-n フラグを用いることで、どのインタフェースも設定しようと しないように DHCP クライアントを指示することができます。 このフラグは、きっと -w フラグと共に使用すると有用でしょう。

IP アドレスを獲得するまで待つのではなく、即座にデーモンと なるようにクライアントを指示することもできます。 -nw フラグを与えると可能です。

設定
dhclient.conf(5) ファイルの書式は別に解説されています。

OMAPI
この DHCP クライアントは、動作中にその動作を停止させる ことなく自分自身を制御できるようにするための機能を提供しています。 この機能は、リモートオブジェクト操作 API である OMAPI を 用いて提供されています。OMAPI クライアントは、TCP/IP を 使用してこの DHCP クライアントに接続します。そして、 DHCP クライアントの現在の状態を検査でき、その状態を変更することが できます。

ユーザプログラムでは、基礎にある OMAPI プロトコルを直接実装する のではなく、dhcpctl API もしくは OMAPI そのものを使用すべきです。 dhcpctl は、OMAPI が自動で行ってはくれない雑事のいくつかを扱う ラッパです。dhcpctl および OMAPI については dhcpctl(3) および omapi(3) に記述されています。 クライアントを用いてやりたいことのほとんどは、特別なプログラムを 書かなくとも omshell(1) コマンドを使用して直接実現できる ものです。

制御オブジェクト
制御オブジェクトを使用すると、DHCP クライアントを終了させ、 保持しているリースをすべて開放し、クライアントが追加した DNS レコードをすべて消去することができるようになります。 また、クライアントを一時停止させ、クライアントが使用している インタフェースの設定を除くことができるようにもなります。 その後で、DHCP クライアントを再起動させることができ、 インタフェースを再設定することができます。通常、ハイバネーションに 入る前やラップトップコンピュータではスリープする前に DHCP クライアントを一時停止させるでしょう。 そして、電源が戻ってきた後で DHCP クライアントを回復させる でしょう。こうすることで、コンピュータがハイバネーションや スリープ中には PC カードを停止させておき、コンピュータが ハイバネーションやスリープから復帰したら以前の状態に 再度初期化することができるようになるのです。

制御オブジェクトには属性が 1 つあります。それは状態属性です。 クライアントを終了させるには、クライアントの状態属性を 2 に 設定します。クライアントは自動的に DHCPRELEASE を行うでしょう。 クライアントを一時停止させるには、クライアントの状態属性を 3 に設定します。クライアントを復帰させるには、クライアントの 状態属性を 4 に設定します。

関連ファイル
CLIENTBINDIR/dhclient-script, ETCDIR/dhclient.conf, DBDIR/dhclient.leases, RUNDIR/dhclient.pid, DBDIR/dhclient.leases~

関連項目
dhclient.conf(5), dhclient.leases(5), dhclient-script(8)

作者
dhclient(8) は Ted Lemon が Vixie Enterprises と協力して Internet Systems Consortium のために 書きました。 Internet Systems Consortium についてより詳しくは、 https://www.isc.org をご覧ください。 Vixie Enterprises についてより詳しくは、 http://www.vix.com をご覧ください。

本クライアントは、Elliot Poger が Stanford 大学の MosquitoNet プロジェクトに参加している間に、 Linux での利用に際し大幅に修正、改良を行いました。

現在のバージョンは、Elliot による Linux での改良に負うところが大きいですが、 Internet Systems Consortium の DHCP サーバが使うものと同じ ネットワーキングフレームワークを用いるように、Ted Lemon が 大幅な再編成や部分的な書き換えを行いました。 システム特有の設定コードの大部分はシェルスクリプトに移されたので、 より多くのオペレーティングシステムのサポートが加えられるにつれ、 システム特有の設定コードをそのオペレーティングシステムに 移植したり管理したりする必要はなくなるでしょう。 代わりに、シェルスクリプトが環境に合ったツールを呼び出して その目的を果たしてくれます。