この記事を作った動機

 named が名前解決時に参照する上流の DNS サーバのアクセスについて、SSL/TLSの暗号化を適用する設定をしたので、それについて記録したい。前提としてすでに named の設定が済んでいて通常の非暗号化状態の8.8.8.8#53などにおいて、動作していることを想定する。

設定方法

/etc/named.confを編集する

tls tls-forwarder

 optionsブロックの外に記述するtls [設定名]からなる、TLS 設定である。

  • ca-file
     デフォルトでインストールされている証明書を使っている。
  • remote-hostname
     DoH 先の DNS サーバのホスト名を設定する。今回は Google DNS を使うので、dns.googleとした。

forwarders

 [DNSサーバのIP] port [DoH先のポート番号] tls [tls設定名]という形で設定する。通常の DoH ポート番号は853であり、HTTPSの443ではない。

設定例

tls tls-forwarder {
     ca-file "/etc/ssl/certs/ca-certificates.crt";
     remote-hostname "dns.google";
};
...
options {
    ...
    forwarders {
        8.8.8.8 port 853 tls tls-forwarder;
        8.8.4.4 port 853 tls tls-forwarder;
    };
    ...
};
...

動作確認

 tcpdumpを使って確認する。以下は Google DNS が動いている様子を確認するために、8.8.8.8 の IP のホストの 853 番にアクセスしているか確認する例である。

sudo tcpdump -i [named自体が動いているサーバのNICインターフェース名] port 853 and host 8.8.8.8

# ...
# 22:45:41.875687 IP HOSTNAME.37559 > dns.google.domain-s: Flags [P.], seq 1855:1935, ack 5339, win 66, options [nop,nop,TS val 2014914753 ecr 370418067], length 80
# 22:45:41.875766 IP HOSTNAME.37559 > dns.google.domain-s: Flags [P.], seq 1935:2007, ack 5339, win 66, options [nop,nop,TS val 2014914753 ecr 370418067], length 72
# 22:45:41.894084 IP dns.google.domain-s > HOSTNAME.37559: Flags [.], ack 2007, win 1043, options [nop,nop,TS val 370418089 ecr 2014914753], length 0
# 22:45:41.895451 IP dns.google.domain-s > HOSTNAME.37559: Flags [.], seq 5339:6547, ack 2007, win 1043, options [nop,nop,TS val 370418090 ecr 2014914753], length 1208
# 22:45:41.895498 IP dns.google.domain-s > HOSTNAME.37559: Flags [P.], seq 6547:6691, ack 2007, win 1043, options [nop,nop,TS val 370418090 ecr 2014914753], length 144
# 22:45:41.895553 IP HOSTNAME.37559 > dns.google.domain-s: Flags [.], ack 6691, win 66, options [nop,nop,TS val 2014914773 ecr 370418090], length 0
# ...

参考にしたサイトとか