dhcpd で, 糞めんどくさいネットワークの設定を自動化


dhcp とは dynamic host configuration protocol で, ホスト動的設定プロトコルって日本語に無理にせんほうがわかりやすいですね. すんません. appletalk とかは, 挿せば直ちに設定されて通信できるのに比べて, IP は

ifconfig eth0 up
ifconfig eth0 123.123.123.123 netmask 255.255.255.0 broadcast 123.123.123.255
route add -net 123.123.123.0
route add default gw 123.123.123.1

などと連打せねばならず, しかも一つでも間違えたらちゃんと繋がらないばかりか, 他の人にも迷惑がかかるという, 難儀なことになっています. こんなん, めっちゃめんどくさいがな. なんとかならんのかいな. と思ったのは, 世界であなたが最初というわけではありません. これを実現するのが, DHCP なのです. DHCP を使えば, 上で連打していた呪文は一切必要ありません. さらに!どのネームサーバを使うべきか(/etc/resolv.confだね)も 設定する必要ありません. それどころか, 近いうちに勝手にネームサーバのデータベースも更新 してくれるようになるという情報もアリ. こりゃたまらんのう.

DHCP は, クライアント サーバ モデルにしたがって作られている. DHCP サーバがどっかで動いていて, DHCP クライアントが DHCP サーバから 設定諸元を貰って来て, 自分のホストを設定するというわけだ. 詳しくは rfc 2131 をどうぞ.

ちょっとまてよ? いま, クライアントがサーバから設定諸元を取って来ると言ったな? って, ネットワークの設定をなーんにもやってないのに, どうやってサーバから設定を貰うんじゃ?デタラメ言うな!

そうです!これじゃあまるで玉鶏問題ですな. 大丈夫. そんなこともあろうかと, ブロードキャストアドレスというものが 存在しておるのじゃ. IP の正しい設定が何であろうとも, ブロードキャストアドレスに向けて通信すれば, 全員に通信が届くというアレである. DHCPサーバは, ブロードキャストに届く 「私は誰?ここはどこ?」に応えてやりさえすれば良い. サーバの設定が終ったら, じっくり tcpdump でも ethereal でも起動して, 見慣れないパケットがうろうろしている様をみるがいい. けっこうおもしろいぞ.

じゃあ DHCP サーバをダウンロードしよう. dhcp サーバは Internet Software Consortium というところでリリースしている. そうです. bind なんかをリリースしているところでもある. DEC も一枚噛んでたが, ここは Paul Vixie さんのところです. この名前にきき憶えがあろう. そうじゃ. Vixie cron は red hat その他の Linux ディストリビューションに 入っている, 定時にコマンドを自動的に実行してくれるあれだ.

dhcpd-2.0 があるので, それを貰って来よう. といっても, 大概 ISC はトラフィックがすごいので, ウチでミラーを用意しました. ISC が混んでたら, ここらへんからダウンロードしてくれ.

設定も簡単だ. 設定すべきは,

である. 更新の頻度だが, つまり, IPアドレスを貸してやった ボケナスな ヰンドウヅや りんごが死んだり終了したりして, 余った IP アドレスを回収し, 次のクライアントに貸してあげないといけないわけで, その時間間隔を設定する必要がある. この間隔は, あまり短いと頻繁にブロードキャストがネットワークをとびかって ウザイが, あまり長いと使われない IP アドレスが増える. 適当なのは, 経験上, 1-2時間前後ではないか.

サーバの設定は,

/etc/dhcpd.conf
であり, 上の情報をここに書き込むわけだ. サンプルファイルが付いていて, デタラメを書いてあるところに 自分の環境に応じた正しい値を書き込んでやれば大丈夫. しかしながら, これだけではサーバが動作しないんですね. 残念ながら.

/var/state/dhcpd/dhcpd.lease

というファイルを作ってあげないと, サーバは動かないのだ. このファイルは, 貸し出し中の アドレスのデータベースである. 最初は空ファイルとして, touch して chmod 660 しておけばいい.

これだけやって動かなかった場合は, 次の設定を試せ.

for dev in eth0 eth1 ...
do
	route add -host 255.255.255.255 $dev
done
すなわち, ネットワークデバイスの数だけ, ホスト向きの 経路としてブロードキャストアドレスを追加するということだ. ウチではこれをやらないと, クライアントからのリクエストを受け取っても, 返事をすることができないのだった. eth?? は, 自分の環境に応じて適切に加減してくれ.

クライアントが何台かあったとしよう. 引っ越したりして, ネットワークの設定が変わったらどうするか? 今までなら, いちいち手で全部のマシンの設定を変えていたわけだ. しかも, 打ち込みを間違えたりしてな. しかし, これからは, サーバの設定をちょいと変えて, サーバプロセスを再起動 するだけだ. あとは勝手に設定が切り替わってくれるんだ! IP がカブって怒られることも決して無い. なんて楽勝なんだ!すげえぜ!