dns proxyがいるというので立ててみる

今回はより軽いdnsproxyにしようと思ったが、名前解決先として、resolv.confを自動で見てくれないようなのでステ。dnsmasqを選択した。
dnsmasq:http://www.thekelleys.org.uk/dnsmasq/
だーいぶ前に使ったことある。なつかしー感じ。
DNS proxyだけでなく、名前解決のキャッシュ、ローカルの名前解決、DHCPサーバーの機能がある。
しかし、機能が多いだけにマニュアルの設定項目が多い。
http://www.thekelleys.org.uk/dnsmasq/docs/dnsmasq-man.html


マシン側の設定。
マシンはVIA EPIA。C3 600MHz。いまさら感があるけど、このくらいで十分。
メモリは256M。オンボードビデオと共有。
PCIIntelNICが刺さっている。HDDは7GBくらいの骨董品。遅い。
lennyでtaskselになにも指定しないミニマムインストール環境。vimとdropbearを追加。
NICの設定。オンボードのvia-rhineとPCIのe100がいる。VIAをLAN側で。

proxy:~# vi /etc/network/interfaces 
auto lo
iface lo inet loopback
allow-hotplug eth0
iface eth0 inet dhcp
allow-hotplug eth1
iface eth1 inet dhcp

と、今回は、どちらも固定IPオーダーなのだった。

auto lo
iface lo inet loopback
allow-hotplug eth0
allow-hotplug eth1
iface eth0 inet static
        address 192.168.2.45
        network 192.168.2.0
        netmask 255.255.255.0
        broadcast 192.168.0.255
        #gateway 192.168.2.1
        auto eth0

iface eth1 inet static
        address 192.168.0.30
        network 192.168.0.0
        netmask 255.255.255.0
        broadcast 192.168.0.255
        gateway 192.168.0.1
        auto eth1


インストール。

proxy:~# apt-get install dnsmasq
The following NEW packages will be installed:
  dbus dbus-x11 dnsmasq dnsmasq-base libdbus-1-3 libx11-6 libx11-data libxau6
  libxcb-xlib0 libxcb1 libxdmcp6
Starting DNS forwarder and DHCP server: dnsmasq.

依存パッケージが結構ある。


名前検索は/etc/hostsが優先。なので、外部DNS情報のオーバーライド可能。
なければ/etc/resolv.confのDNSに問い合わせ。データのキャッシュも行う。


設定。

proxy:~# vi /etc/dnsmasq.conf

デフォルトの設定ファイルは解説が細かいのでかなり長い。
名前解決用のサーバーをどこから見つけるか設定。指定しなくてもデフォルトでこれを見る。

resolv-file=/etc/resolv.conf

名前解決を受けるNICの指定。指定しないとどこからでも受けるのかな?

interface=eth0

DHCPサーバーは、今回は不要。
使わないことはできないようなので、アナウンスを流さないよう指定。

no-dhcp-interface=eth0
no-dhcp-interface=eth1

キャッシュサイズの変更。面白いことに容量ではなく解決する名前数になっている。デフォルトは150かな?

cache-size=500


使う場合は、こんな感じだったような。
DHCPのレンジ設定。開始アドレス、終了アドレス、リリース時間の順。

dhcp-range=192.168.0.200,192.168.0.254,12h

domain設定。ローカルネット内でのドメインを設定。

domain=example.com

通知情報の設定。最初の3がgw設定を表す。6が通知DNSサーバー。番号はRFC2132のコード番号。

dhcp-option=3,192.168.0.1
dhcp-option=6,192.168.0.1

固定アドレスの割り当て。MAC、割り当てIP、名前。

dchp-host=00:A0:B0:xx:xx:xx,192.168.0.199,mymac

syslogに割り当てログを吐く。

log-dhcp


動作確認。
再起動して設定を反映。

proxy:~# /etc/init.d/dnsmasq restart 
Restarting DNS forwarder and DHCP server: dnsmasq.

ミニマム環境なので、digすらいないので入れる。

proxy:~# apt-get install dnsutils
The following NEW packages will be installed:
  bind9-host dnsutils libbind9-40 libcap2 libdns45 libisc45 libisccc40
  libisccfg40 liblwres40 libxml2 sgml-base xml-core

引いてみる。

proxy:~# dig @127.0.0.1 www.debian.org

; <<>> DiG 9.5.1-P3 <<>> @127.0.0.1 www.debian.org
; (1 server found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56197
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 3, ADDITIONAL: 1

;; QUESTION SECTION:
;www.debian.org.			IN	A

;; ANSWER SECTION:
www.debian.org.		20	IN	A	128.31.0.51
www.debian.org.		20	IN	A	194.109.137.218

;; AUTHORITY SECTION:
debian.org.		1653	IN	NS	klecker.debian.org.
debian.org.		1653	IN	NS	raff.debian.org.
debian.org.		1653	IN	NS	rietz.debian.org.

;; ADDITIONAL SECTION:
klecker.debian.org.	1653	IN	AAAA	2001:888:2000:12::2

;; Query time: 383 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Wed Aug 19 11:08:50 2009
;; MSG SIZE  rcvd: 153

ちゃんと引けている。


マシンローカルでも使用する場合は/etc/resolv.conf先頭に

nameserver 127.0.0.1

を追記。
キャッシュを強制クリアするには。

proxy:~# /etc/init.d/dnsmasq force-reload
Restarting DNS forwarder and DHCP server: dnsmasq.

DHCPでresolv.confが書き換えられたとき、決め打ちのDNSサーバーが上書きで消えないよう設定。OpenDNSなどをデフォルトで使いたい時。

proxy:~# vi /etc/dhcp3/dhclient.conf       
prepend domain-name-servers 192.168.0.1;