UnboundでローカルDNSを立てる
unboundでローカルDNSを立てたところ local-data
に設定した名前しか解決できず、例えば google.com
などが解決できなくなってしまった。パッケージのインストールも行えず、またNTPの同期も行われずログやメトリクスのタイムスタンプもズレているので早々に解決したい。
現状の設定は以下の通り。
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
今試したら問題なく名前が引けたので、ルーティングの設定が悪かったのかもしれない。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もちゃんと動いている。
あ、いや動いていなかった。改めて確認してみると 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
なんか最近ネットワーク的引きこもりから脱却しつつある気がする。外のネットワークのことが気になり始めている。
unboundのデバッグの仕方を調べてみる。
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
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とみなされているような雰囲気。
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 って上でも出てきたけどなんだろう。
DNSSECのやつか、教えてもらったことがある。