CentOS6.5ではデフォルトでdhclientというデーモンプロセスが実行されています。このプロセスの概要についてまとめました。
※目次をクリックすると目次の下部にコンテンツが表示されます。
$ ps -ef root 1280 1199 0 Jun05 ? 00:00:00 /sbin/dhclient -d -4 -sf /usr/libexec/nm-dhcp-client.action -pf /var/run/dhclient-eth0.pid -lf /var/lib/dhclient/dhclient-xxx-eth0.lease -cf /var/run/nm-dhclient-eth0.conf eth0
2)どのパッケージに属する?
$ rpm -qf /sbin/dhclient
dhclient-4.1.1-38.P1.el6.centos.x86_64
3)dhclientパッケージの文書ファイル一覧
$ rpm -qd dhclient
/usr/share/doc/dhclient-4.1.1/README.dhclient.d
/usr/share/doc/dhclient-4.1.1/dhclient.conf.sample
/usr/share/doc/dhclient-4.1.1/dhclient6.conf.sample
/usr/share/man/man5/dhclient.conf.5.gz
/usr/share/man/man5/dhclient.leases.5.gz
/usr/share/man/man8/dhclient-script.8.gz
/usr/share/man/man8/dhclient.8.gz
4)dhclientパッケージの概要
“yum info dhclient”コマンドでパッケージの概要を確認しました。
①サマリー
Provides the dhclient ISC DHCP client daemon and dhclient-script
②URL
http://isc.org/products/DHCP/
③説明
・DHCPを使用するには、DHCPサービスまたはリレーエージェントをインストールし、クライアント上でDHCPクライアントデーモンを使用する必要がある。
・このdhclientパッケージはISC DHCPのクライアントデーモンを提供する。
・DHCPプロトコル、BOOTPプロトコルを使ってネットワークインタフェースの設定を行う。
上記プロトコルが使用できない場合は、静的にアドレスを割り当てる。
・IPアドレス以外にもデフォルトルーターやネームサーバーの情報も提供できる。
・起動時にdhclient.confを読んで、システムで使用しているすべてのネットワークインタフェースのリストを取得する。そして各インタフェース毎にDHCPプロトコルを使ってネットワークの設定をする。
・リースされたIPアドレスは、dhclient.leasesファイル内で管理され、リブート後もこのファイル内のIPアドレスをリクエストして維持される。
・新しいリースIPアドレスが割り当てられるとdhclient.leasesファイルの最後に追加される。
このファイルのサイズが大きくなり過ぎないように、時々リースデータベースから新しいファイルを時々再作成する。
古いファイルは、次にdhclientがデータベースから書き換えるまでdhclient.leases~という名前で維持される。
古いファイルはDHCPサーバーが利用できない場合にも一時的に使用される。
・dhclient.confは、フリーフォームのアスキーテキストファイル。
○設定例
$ more /usr/share/doc/dhclient-4.1.1/dhclient.conf.sample send host-name "andare.fugue.com"; send dhcp-client-identifier 1:0:a0:24:ab:fb:9c; send dhcp-lease-time 3600; supersede domain-search "fugue.com", "home.vix.com"; prepend domain-name-servers 127.0.0.1; request subnet-mask, broadcast-address, time-offset, routers, domain-search, domain-name, domain-name-servers, host-name; require subnet-mask, domain-name-servers; timeout 60; retry 60; reboot 10; select-timeout 5; initial-interval 2; script "/etc/dhclient-script"; media "-link0 -link1 -link2", "link0 link1"; reject 192.33.137.209; alias { interface "ep0"; fixed-address 192.5.5.213; option subnet-mask 255.255.255.255; } lease { interface "ep0"; fixed-address 192.33.137.200; medium "link0 link1"; option host-name "andare.swiftmedia.com"; option subnet-mask 255.255.255.0; option broadcast-address 192.33.137.255; option routers 192.33.137.250; option domain-name-servers 127.0.0.1; renew 2 2000/1/12 00:00:01; rebind 2 2000/1/12 00:00:01; expire 2 2000/1/12 00:00:01; }
psコマンドで確認するとdhclientは下記のように実行されていました。
root 1280 1199 0 Jun05 ? 00:00:00 /sbin/dhclient -d -4 -sf /usr/libexec/nm-dhcp-client.action -pf /var/run/dhclient-eth0.pid -lf /var/lib/dhclient/dhclient-xxx-eth0.lease -cf /var/run/nm-dhclient-eth0.conf eth0
●dhclientのオプション
[-d]
dhclientをフォアグラウンドプロセスとして実行するように強制。
[-4]
IPv4アドレスと設定値を取得するのにDHCPv4プロトコルを使用。
[-sf /usr/libexec/nm-dhcp-client.action]
リースを取得した際、dhclientによってinvokeされるネットワーク設定スクリプトのパス。
[-pf /var/run/dhclient-eth0.pid]
プロセスIDファイルのパス。
[-lf /var/lib/dhclient/dhclient-xxx-eth0.lease]
リースデータベースファイルのパス
[-cf /var/run/nm-dhclient-eth0.conf]
クライアント設定ファイルのパス
psコマンドでdhclientを見ると下記オプションが指定されていました。
-sf /usr/libexec/nm-dhcp-client.action
これは、dhclient-scriptのファイルを指定しています。このファイルが何を行っているのか分からなかったのでmanで確認してみました。
●dhclient-scriptの概要
・DHCPクライアントのネットワーク設定スクリプト。
・dhclientによって時々invokeされる。
・dhclientがアドレスをリクエストする前に各インタフェースの初期設定を設定するのに使用され、すでに発行されたアドレスをテストしたり、リースされた際にインタフェースの最後の設定をセットするのにも使用される。
リースが取得出来ない場合は、事前に定義されたリースをテストするのにも使用される。
・このスクリプトは、エンドユーザーによってカスタマイズされるようになっていない。
ローカル用にカスタマイズしたい場合は、提供されているHOOKSを使用する。
このフックによって/etc/resolv.confファイルを作成してデフォルトの振る舞いをオーバーライドすることが出来る。