Unbound がルートサーバーに DNS 問い合わせしていたっぽい

ふと思った

先日に LMDE を再インストールした際に、DNS キャッシュのために Unbound も再インストールしました。resolv.conf も Unbound を使用するような設定に編集し、unbound-control stats_norest でも DNS キャッシュにヒットしていることが確認できたのでセットアップ完了な気でいました。

$ cat /etc/resolv.conf

nameserver ::1
nameserver 127.0.0.1
options edns0 trust-ad
search .

そう言えば、前は /etc/unbound/unbound.conf.d にカスタム定義を作って置いてた気がするけど、今回はそういうのがなくてもちゃんと動作しているね?Unbound はキャッシュに存在しない DNS レコードはどこに問い合わせてるんだろう?プロバイダーの DNS サーバーかしら?


調べてみた

Gemini くんに相談してみると「世界に 13 台設置されている DNS ルートサーバーだよ」と教えてくれました。ウソでしょ?

dig コマンドに +trace オプションを指定すると確認できるらしいので半信半疑で試してみました。

$ dig +trace yahoo.co.jp

; <<>> DiG 9.20.29-1~deb13u1-Debian <<>> +trace yahoo.co.jp
;; global options: +cmd
.			13529	IN	NS	c.root-servers.net.
.			13529	IN	NS	d.root-servers.net.
.			13529	IN	NS	e.root-servers.net.
.			13529	IN	NS	f.root-servers.net.
.			13529	IN	NS	g.root-servers.net.
.			13529	IN	NS	h.root-servers.net.
.			13529	IN	NS	i.root-servers.net.
.			13529	IN	NS	j.root-servers.net.
.			13529	IN	NS	k.root-servers.net.
.			13529	IN	NS	l.root-servers.net.
.			13529	IN	NS	m.root-servers.net.
.			13529	IN	NS	a.root-servers.net.
.			13529	IN	NS	b.root-servers.net.

マジかぁぁぁ。

なんかこれはマズイ気がして、カスタム定義で他の DNS サーバーに問い合わせるように変更することにしました。


調整してみた

いつもなら Google や Cloudflare の Public DNS を指定するのですが、今日はたまたま某社のインターネット接続が DNS サーバーの障害でトラブっていたようなので、プロバイダーの DNS サーバーを指定してみようと思ったのでした。サーバーの物理的な距離が近い方がいいのではないかという思いもありました。

$ cat my-unbound.conf 
forward-zone:
    name: "."
    forward-addr: 192.168.1.1

完成したカスタム定義です。プロバイダーの DNS サーバーの IP アドレスを探してみたのですがよくわかりませんでした。ルーターの管理画面で IPv6 の DNS サーバーの IP アドレスを見つけたのですが、この IP アドレスがもしも変わったら追従しないといけないので、いっそのことルーターを指定しまえ、という作戦です。

$ sudo systemctl restart unbound

Unbound を再起動させてカスタム定義を反映させました。

が、dig +trace の結果は変わらずルートサーバーに問い合わせているようです。なんで?

またまた Gemini くんに相談すると、+trace を付与すると無視してルートサーバーを目指すらしいです。ホントに?

server:
    verbosity: 2

forward-zone:
    name: "."
    forward-addr: 192.168.1.1

こんな感じで一時的に問い合わせの詳細をログに書き出す設定に変更すれば確認できるとのことでした。やってみます。

reply from <.> 192.168.1.1#53

おぉ、確かにルーターに向かっているようです。

これにて一件落着です。