DHCPサーバを簡便に構築したい時に本資料は参考になると思います。
dnsmasqを利用したDHCPサーバの構築方法を以下に記します。
dnsmasqは簡便なネームサーバです。
/etc/hostsの内容をDNSレコードとして、ホスト名の問い合せを解決する
(ホスト名に対応するIPアドレスを返す)ことができます。
/etc/hostsの内容だけでなく、自分のレコード以外の問い合わせを、
外部のDNSサーバに問い合わせをフォワードすることも可能です。
小規模なネットワークでの利用に特化しているソフトウェアです。
(最近ではkvmやxenなどが作る仮想環境のパーツとしても使われています。)
これに加えて、dnsmasqはDHCPサーバやTFTPサーバの機能も持っています。
bindや、ISCのDHCPなど大掛かりな製品を使わずとも、
単体で小規模なネットワーク管理に必要なサービスを全て提供することができるようになっています。
この記事ではDHCPサーバとして機能させるための最小限の設定をまとめます。
対象とするdnsmasqのバージョンは、Ubuntu12.04上のバージョン2.59です。
dnsmasqはすべての設定値をコマンドラインオプションとしても、
設定ファイルとしても持つことができます。
(kvmやxenなどの内部で使われるのは、この特長からでもあるでしょう。)
例えば、dhcp-rangeという設定を行なうには、dnsmasqの起動時のオプションとして、
dnsmasq -F dhcp-range=192.168.10.10,192.168.10.30,12h
と指定するか、もしくは、
dnsmasq --dhcp-range=192.168.10.10,192.168.10.30,12h
と指定します。
これは、設定ファイルに、
dhcp-range=192.168.10.10,192.168.10.30,12h
と書くのと同じです。
また、設定ファイルは、/etc/dnsmasq.confですが、
コマンドラインオプション
dnsmasq -C /etc/dnsmasq.more.conf dnsmasq --conf-file=/etc/dnsmasq.more.conf
設定ファイル
conf-file=/etc/dnsmasq.more.conf
と指定することで、/etc/dnsmasq.more.confも設定ファイルとして使用できます。さらに、
コマンドラインオプション
dnsmasq -7 /etc/dnsmasq.d dnsmasq --conf-dir=/etc/dnsmasq.d
設定ファイル
conf-dir=/etc/dnsmasq.d
と指定すれば、ディレクトリ/etc/dnsmasq.dの下のファイルが全て設定ファイルとして扱われます。
DHCPサーバとしてのもっとも単純な設定は以下になります。
これを上記の設定方法で設定します。
(継続して運用するのなら、コマンドラインオプションによる設定はやめたほうがいいですが。)
dhcp-range=192.168.10.10,192.168.10.30,12h dhcp-host=98:fe:94:3e:4e:2e,192.168.10.15 dhcp-option=optioin:ntp-server,192.168.10.1 dhcp-option=option:netmask,255.255.255.0 dhcp-option=option:router,192.168.10.254 dhcp-option=option:dns-server,192.168.10.1,8.8.8.8 dhcp-leasefile=/var/lib/misc/dnsmasq.leases log-dhcp
それぞれの設定句を簡単に説明します。
dhcp-rangeは、リースするIPアドレスの範囲とリース期間を設定します。
dhcp-range=リースする最初のアドレス,リースする最後のアドレス,リース期間
で、上記の設定例では、192.168.10.10から192.168.10.30までがDHCPクライアントに配布されるアドレスです。
そのリース期間は、12時間となっています。
dhcp-hostは、MACアドレスと対応づけて、常に同じIPアドレスを配布したいときに設定します。
dhcp-host=MACアドレス,IPアドレス
(当然ですが)この設定は複数もつことが可能です。
DHCPではIPアドレスの配布の他に、ネットワークを利用する上で必要な情報も同時に配布することができます。
dhcp-option=option:配布する情報,値
これも複数指定可能です。
一般的には上記の設定例のように、ネットマスク(netmask)・デフォルトゲートウェイ(router)・ネームサーバ(dns-server)は必須でしょう。
どのような情報が配布可能であるかは、 dnsmasq --help dhcpを実行すると表示されます。
# dnsmasq --help dhcp Known DHCP options: 1 netmask 2 time-offset 3 router 6 dns-server 7 log-server 9 lpr-server 13 boot-file-size 15 domain-name (略)
IPのリース状況が出力されます。
dhcp-leasefile=リース状況ファイル
以下のような内容です。
# cat /var/lib/misc/dnsmasq.leases 1378954177 e6:8d:28:f3:e4:58 192.168.10.13 * 01:e8:8d:28:f3:e4:58 1378955470 00:26:dc:67:de:9d 192.168.10.17 * 01:00:25:dc:67:de:9d 1378954926 97:fe:94:3e:4e:2e 192.168.10.15 ubuntu 01:98:fe:94:3e:4e:2e 1378955086 a7:e3:ee:27:53:7b 192.168.10.29 * 01:a8:e3:ee:27:53:7b 1378946526 f1:cb:a1:b2:6d:8b 192.168.10.10 * 01:f0:cb:a1:b2:6d:8b #
dnsmasqのログ出力の中に、dhcp関連の詳細なログを含めるようになります。
これは通常運用時には詳細過ぎるので、運用開始時や不具合発生時以外には無効にしておいたほうが良いと思います。
ログの出力例です。
Sep 12 00:11:10 server1 dnsmasq-dhcp[24864]: 425029492 available DHCP range: 192.168.10.10 -- 192.168.10.30 Sep 12 00:11:10 server1 dnsmasq-dhcp[24864]: 425029492 vendor class: nasne Sep 12 00:11:10 server1 dnsmasq-dhcp[24864]: 425029492 DHCPREQUEST(eth0) 192.168.10.17 00:25:dc:67:de:9d Sep 12 00:11:10 server1 dnsmasq-dhcp[24864]: 425029492 DHCPACK(eth0) 192.168.10.17 00:25:dc:67:de:9d Sep 12 00:11:10 server1 dnsmasq-dhcp[24864]: 425029492 requested options: 1:netmask, 3:router, 6:dns-server, 12:hostname, Sep 12 00:11:10 server1 dnsmasq-dhcp[24864]: 425029492 requested options: 15:domain-name, 28:broadcast, 42:ntp-server Sep 12 00:11:10 server1 dnsmasq-dhcp[24864]: 425029492 tags: eth0 Sep 12 00:11:10 server1 dnsmasq-dhcp[24864]: 425029492 next server: 192.168.10.1 Sep 12 00:11:10 server1 dnsmasq-dhcp[24864]: 425029492 broadcast response Sep 12 00:11:10 server1 dnsmasq-dhcp[24864]: 425029492 sent size: 1 option: 53:message-type 05 Sep 12 00:11:10 server1 dnsmasq-dhcp[24864]: 425029492 sent size: 4 option: 54:server-identifier 192.168.10.1 Sep 12 00:11:10 server1 dnsmasq-dhcp[24864]: 425029492 sent size: 4 option: 51:lease-time 00:00:a8:c0 Sep 12 00:11:10 server1 dnsmasq-dhcp[24864]: 425029492 sent size: 4 option: 58:T1 00:00:54:60 Sep 12 00:11:10 server1 dnsmasq-dhcp[24864]: 425029492 sent size: 4 option: 59:T2 00:00:93:a8 Sep 12 00:11:10 server1 dnsmasq-dhcp[24864]: 425029492 sent size: 4 option: 28:broadcast 192.168.10.255 Sep 12 00:11:10 server1 dnsmasq-dhcp[24864]: 425029492 sent size: 18 option: 15:domain-name example.tld Sep 12 00:11:10 server1 dnsmasq-dhcp[24864]: 425029492 sent size: 8 option: 6:dns-server 192.168.10.1, 8.8.8.8 Sep 12 00:11:10 server1 dnsmasq-dhcp[24864]: 425029492 sent size: 4 option: 3:router 192.168.10.254 Sep 12 00:11:10 server1 dnsmasq-dhcp[24864]: 425029492 sent size: 4 option: 1:netmask 255.255.255.0
他にも複数のインターフェイスごとに個別のネットワークのレンジを提供することや、
dhcp proxyへの対応など機能は豊富です。それらについては、manページを参照して下さい。
以上、dnsmasqをDHCPサーバとして使う場合の最小限の設定例についてでした。