LAN向けのDNSキャッシュサーバ
経緯としてRTX1200 の DNS 機能が TCP フォールバックに対応してないのでオフにした、というのがある。直接 8.8.8.8 8.8.4.4 を DHCP で広告するようにしてみたが、RTT が 8ms ぐらいあるので、やはり LAN 内にキャッシュサーバがあったほうがいいかなと思いはじめた。
LAN内には常時動いている Raspberry Pi のホストがいるので、ついでにこのホストにDNS機能もやらせることにしてみた。
unbound
unbound がキャッシュサーバ専用でよさそうなのでこれにする。
sudo apt-get install unbound
#/etc/unbound/unbound.conf.d/my.conf
# See /usr/share/doc/unbound/examples/unbound.conf for a commented
server:
verbosity: 1
num-threads: 4
interface: 0.0.0.0
interface: ::
msg-cache-size: 64m
msg-cache-slabs: 4
rrset-roundrobin: yes
rrset-cache-size: 128m
rrset-cache-slabs: 4
infra-cache-slabs: 4
access-control: 192.168.0.0/16 allow
key-cache-size: 64m
key-cache-slabs: 4
neg-cache-size: 64m
prefetch: yes
minimal-responses: yes
incoming-num-tcp: 100
outgoing-num-tcp: 100
forward-zone:
name: "."
forward-addr: 8.8.8.8
forward-addr: 8.8.4.4
# 自動起動
sudo systemctl enable unbound
# 起動
sudo systemctl start unbound
# ステータス
sudo systemctl status unbound
# ログ
sudo journalctl -r
以下のようなコマンドでクエリ数やキャッシュヒット率が見れる。
unbound-control stats_noreset | grep total
今後
キャッシュヒット率を見つつ、あんまり意味がなさそうなら (数%ぐらいしかヒットしないとか) やめるつもり。
自宅は昼間は誰もいないので、このタイミングでTTLが短いほとんどのキャッシュは無効になってしまう。unbound の prefetch は TTL が残り10%になったときにクエリがくると再問合せする機能なので、クエリがこなければ一切 prefetch はされない。
さらには一番影響がでるブラウザでは、DNS prefetch が実装されているので、体感的にはネットワークの近くにDNSがあっても意味がないことが多い。
自分で DNS キャッシュサーバを運用するコストと釣り合わないかもしれない。
(備考)raspberry pi の ip アドレスを固定
raspi の IP アドレスを固定しておく
#/etc/dhcpcd.conf
interface eth0
static ip_address=192.168.0.222/24
static routers=192.168.0.1
static domain_name_servers=127.0.0.1
sudo systemctl daemon-reload
sudo systemctl stop dhcpcd
sudo ip addr flush dev eth0 ; sudo systemctl start dhcpcd
sudo systemctl restart avahi-daemon.service
確認
dig @192.168.0.222 example.com
同一ホストで
sudo unbound-control stats_noreset | grep total
sudo unbound-control dump_cache
- トップ
-
tech
-
RaspberryPi を家庭内 LAN の DNS キャッシュサーバーに