Open10

UnboundでローカルDNSを立てる

astkastk

unboundでローカルDNSを立てたところ local-data に設定した名前しか解決できず、例えば google.com などが解決できなくなってしまった。パッケージのインストールも行えず、またNTPの同期も行われずログやメトリクスのタイムスタンプもズレているので早々に解決したい。

astkastk

現状の設定は以下の通り。

pi@pi4a:~ $ cat /etc/unbound/unbound.conf
# Unbound configuration file for Debian.
#
# See the unbound.conf(5) man page.
#
# See /usr/share/doc/unbound/examples/unbound.conf for a commented
# reference config file.
#
# The following line includes additional configuration files from the
# /etc/unbound/unbound.conf.d directory.
include: "/etc/unbound/unbound.conf.d/*.conf"

server:
	interface: 0.0.0.0
	interface: ::0
	verbosity: 1

	access-control: 10.0.0.0/8 allow_snoop

	local-zone: "home." static
	local-zone: "1.0.10.in-addr.arpa." static

	local-data: "3.1.0.10.in-addr.arpa. 10800 IN PTR pi2a.home"
	local-data: "11.1.0.10.in-addr.arpa. 10800 IN PTR pi4a.home"
	local-data: "pi2a.home. 10800 IN A 10.0.1.10"
	local-data: "pi4a.home. 10800 IN A 10.0.1.111"
	local-data: "pi4b.home. 10800 IN A 10.0.1.112"
	local-data: "pi4c.home. 10800 IN A 10.0.1.113"
	local-data: "pi4d.home. 10800 IN A 10.0.1.114"
	local-data: "pi0a.home. 10800 IN A 10.0.1.120"

forward-zone:
	name: "."
	forward-addr: 8.8.8.8 # google DNS
	# forward-addr: 10.0.1.1. # ISP provided DNS

remote-control:
	control-enable: yes

DNSをISPやgoogleのものに指定してやると名前解決できる。

pi@pi4a:~ $ dig @10.0.1.1 google.com +short
172.217.31.174
astkastk

今試したら問題なく名前が引けたので、ルーティングの設定が悪かったのかもしれない。local-data もglobalの名前も問題なく引けている。

pi@pi4a:~ $ dig pi4a.home +short
10.0.1.111

pi@pi4a:~ $ dig google.com +short
142.250.76.142

pi@pi4a:~ $ timedatectl show-timesync
FallbackNTPServers=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org
ServerName=2.debian.pool.ntp.org
ServerAddress=91.236.251.24
RootDistanceMaxUSec=5s
PollIntervalMinUSec=32s
PollIntervalMaxUSec=34min 8s
PollIntervalUSec=34min 8s
NTPMessage={ Leap=0, Version=4, Mode=4, Stratum=2, Precision=-20, RootDelay=4.577ms, RootDispersion=20.629ms, Reference=1F1CA147, OriginateTimestamp=Sun 2021-06-06 15:59:09 JST, ReceiveTimestamp=Sun 2021-06-06 15:59:09 JST, TransmitTimestamp=Sun 2021-06-06 15:59:09 JST, DestinationTimestamp=Sun 2021-06-06 15:59:10 JST, Ignored=no PacketCount=44, Jitter=9.746ms }
Frequency=-1398795

NTPもちゃんと動いている。

astkastk

あ、いや動いていなかった。改めて確認してみると 10.0.1.1 というのは部屋の最上流で動いているApple TimeCuspleが提供しているDNSで、実態としてはISPのDNSをプロキシしているようなものだと推測。そしてなぜかそれだけunboundからの forward-addr が機能しない。

        forward-addr: 210.130.1.1 # OK: ISP Provided Primary DNS
        forward-addr: 210.130.0.1 # OK: ISP Provided Secondary DNS
        forward-addr: 10.0.1.1    # NG: Apple TimeCupsule proxied DNS toward of ISP
        forward-addr: 8.8.8.8     # OK: Google DNS

なのでそれを使わなければいいという話になるが、DHCPで配られるのがこのDNSになっているので、ちょっと調べておかないと落ち着かない。普通に名前を引く分には問題なく使えるので変なACLに引っかかっているとかはないと思う。

root@pi4a:~# dig +short @10.0.1.1 google.com
172.217.161.46
astkastk

なんか最近ネットワーク的引きこもりから脱却しつつある気がする。外のネットワークのことが気になり始めている。

astkastk

unboundのデバッグの仕方を調べてみる。

astkastk

https://nlnetlabs.nl/documentation/unbound/unbound.conf/

 verbosity: <number>
              The  verbosity  number, level 0 means no verbosity, only errors.
              Level 1 gives operational information. Level  2  gives  detailed
              operational  information. Level 3 gives query level information,
              output per query.  Level 4 gives  algorithm  level  information.
              Level 5 logs client identification for cache misses.  Default is
              level 1.  The verbosity can also be increased from the  command-
              line, see unbound(8).

コマンドでレベルを設定できるらしい。でも何回か再起動する気がするのでunbound.confで指定する。キャッシュしないように cache-max-ttl を1秒に指定してログレベルを上げる。

server:
        ...
        verbosity: 5
        cache-max-ttl: 1
astkastk

dig google.com しながらログを見てみる。

Jun 06 16:47:40 pi4a unbound[5622]: [5622:0] info: iterator operate: query . DNSKEY IN
Jun 06 16:47:40 pi4a unbound[5622]: [5622:0] info: scrub for . NS IN
Jun 06 16:47:40 pi4a unbound[5622]: [5622:0] info: response for . DNSKEY IN
Jun 06 16:47:40 pi4a unbound[5622]: [5622:0] info: reply from <.> 10.0.1.1#53
Jun 06 16:47:40 pi4a unbound[5622]: [5622:0] info: incoming scrubbed packet: ;; ->>HEADER<<- opcode: QUERY, rcode: NOERROR, id: 0
Jun 06 16:47:40 pi4a unbound[5622]: [5622:0] info: query response was ANSWER
Jun 06 16:47:40 pi4a unbound[5622]: [5622:0] info: finishing processing for . DNSKEY IN
Jun 06 16:47:40 pi4a unbound[5622]: [5622:0] info: validator operate: query . DNSKEY IN
Jun 06 16:47:40 pi4a unbound[5622]: [5622:0] info: subnet operate: query . DNSKEY IN
Jun 06 16:47:40 pi4a unbound[5622]: [5622:0] info: validator: inform_super, sub is . DNSKEY IN
Jun 06 16:47:40 pi4a unbound[5622]: [5622:0] info: super is google.com. A IN
Jun 06 16:47:40 pi4a unbound[5622]: [5622:0] info: autotrust process for . DNSKEY IN
Jun 06 16:47:40 pi4a unbound[5622]: [5622:0] info: validate keys with anchor(DS): sec_status_bogus
Jun 06 16:47:40 pi4a unbound[5622]: [5622:0] info: failed to prime trust anchor -- DNSKEY rrset is not secure . DNSKEY IN
Jun 06 16:47:40 pi4a unbound[5622]: [5622:0] info: validator operate: query google.com. A IN
Jun 06 16:47:40 pi4a unbound[5622]: [5622:0] info: Could not establish a chain of trust to keys for . DNSKEY IN
Jun 06 16:47:40 pi4a unbound[5622]: [5622:0] info: subnet operate: query google.com. A IN
Jun 06 16:47:40 pi4a unbound[5622]: [5622:0] info: mesh_run: end 3 recursion states (3 with reply, 0 detached), 3 waiting replies, 2 recursion replies sent, 0 replies
 dropped, 0 states jostled out

Could not establish a chain of trust to keys for . DNSKEY IN

DNSKEYというものが怪しそう。Aレコード自体は直前のログで取得できていることが確認できたが、その後信頼できないDNSとみなされているような雰囲気。

astkastk

forward-addrをISPのDNSに向け変えて、正しく動いているとこんな感じ。

Jun 06 16:42:45 pi4a unbound[5471]: [5471:0] info: finishing processing for com. DNSKEY IN
Jun 06 16:42:45 pi4a unbound[5471]: [5471:0] info: validator operate: query com. DNSKEY IN
Jun 06 16:42:45 pi4a unbound[5471]: [5471:0] info: subnet operate: query com. DNSKEY IN
Jun 06 16:42:45 pi4a unbound[5471]: [5471:0] info: validator: inform_super, sub is com. DNSKEY IN
Jun 06 16:42:45 pi4a unbound[5471]: [5471:0] info: super is google.com. A IN
Jun 06 16:42:45 pi4a unbound[5471]: [5471:0] info: validated DNSKEY com. DNSKEY IN
Jun 06 16:42:45 pi4a unbound[5471]: [5471:0] info: validator operate: query google.com. A IN
Jun 06 16:42:45 pi4a unbound[5471]: [5471:0] info: validator: FindKey google.com. A IN
Jun 06 16:42:45 pi4a unbound[5471]: [5471:0] info: current keyname com. DNSKEY IN
Jun 06 16:42:45 pi4a unbound[5471]: [5471:0] info: target keyname google.com. DNSKEY IN
Jun 06 16:42:45 pi4a unbound[5471]: [5471:0] info: next keyname google.com. DNSKEY IN
Jun 06 16:42:45 pi4a unbound[5471]: [5471:0] info: DS RRset com. DS IN

RRset って上でも出てきたけどなんだろう。

astkastk

DNSSECのやつか、教えてもらったことがある。