今回はDNS over TLS (DoT)を使ったDNS暗号化の設定方法をご紹介します。
DNS通信は平文でされているという脆弱性を持ちます。
そのまま使うと盗聴・なりすまし・改ざんの危険が生じます。
そして最悪の場合IDとパスワードを窃盗されることになります。
DoTはこうした危険性から身を守る技術です。
DNSとは?
ドメインの情報からIPアドレスを教えてくれる電話帳みたいな存在です。
DNSがなければIPアドレスで直接アクセスしなければなりません。
またSSLサーバ証明書の取得に必要な認証もできません。
つまりDNSはインターネットと切っても切り離せない存在です。
DNSの危険性
DNSは平文で通信しています。
つまり、暗号化されていないため、盗聴・なりすまし・改ざんの危険が生じます。
改ざんされた場合、同じドメインでも全く異なるIPアドレスに接続されます。
つまり、意図しないサーバに接続されるのです。
もし改ざん先でログインすると、IDとパスワードを窃盗されることになるわけです。
DNS over TLS (DoT) とは?
DNS over TLS (DoT)とはDNSクエリを暗号化する技術です。
これにより盗聴・なりすまし・改ざんを防ぐことが可能です。
つまりDNSキャッシュポイズニングなどから部分的に身を守ることが可能になるのです。
DNS over HTTPS (DoH) とは?
DoTに類似した技術としてDNS over HTTPS (DoH)も存在します。
DoHはHTTPS暗号化通信を利用しますが、目的や効果などは同様です。
違いとして利用するポートが挙げられます。
DoTはポート853を利用します。
それに対しDoHはHTTPSと同じポート443を使用するのが違いです。
Ubuntu 24.04でのDoT設定
実際にサーバでどのようにDoTを設定するかご紹介します。
ここでUbuntu 24.04を例に実例を示します。
DNS設定確認
まず、DNS設定を確認します。
resolvectl statusDHCPで配布されたDNSが設定されていると思います。
ここからDNS設定を変えていきます。
systemd-resolvedを設定するため、現在の設定ファイルの記述を確認します。
cat /etc/systemd/resolved.confこのような記述になっています。
[Resolve]
#DNS=
#FallbackDNS=
#Domains=
#LLMNR=no
#MulticastDNS=no
#DNSSEC=no
#DNSOverTLS=no
#Cache=yes
#DNSStubListener=yes
#ReadEtcHosts=yesデフォルトでは何も設定されていないですね。
ここから暗号化の設定をしていきます。
DNS設定変更
ここから/etc/systemd/resolved.confを変更していきます。
[Resolve]
DNS=1.1.1.1 1.0.0.1
FallbackDNS=8.8.8.8 8.8.4.4
#Domains=
#LLMNR=no
#MulticastDNS=no
DNSSEC=yes
DNSOverTLS=yes
#Cache=yes
#DNSStubListener=yes
#ReadEtcHosts=yesDNSSEC=yes とDNSOverTLS=yes で暗号化をONにしています。
DNS=1.1.1.1 1.0.0.1 ではCloudflareのDNSサーバを指定しています。
そしてフォールバック先としてFallbackDNS=8.8.8.8 8.8.4.4でGoogleのDNSサーバを指定しています。
設定が終わったのでサービスを再起動します。
sudo systemctl restart systemd-networkd
sudo systemctl restart systemd-resolvedしっかり設定できているか、再びDNS設定を確認します。
resolvectl status結果はこのようになっているはずです。
Global
Protocols: -LLMNR -mDNS +DNSOverTLS DNSSEC=yes/supported
resolv.conf mode: stub
Current DNS Server: 1.1.1.1
DNS Servers: 1.1.1.1 1.0.0.1
Fallback DNS Servers: 8.8.8.8 8.8.4.4
Link 2 (ens3)
Current Scopes: DNS
Protocols: +DefaultRoute -LLMNR -mDNS +DNSOverTLS DNSSEC=yes/supported
Current DNS Server: 172.25.252.9
DNS Servers: 172.25.252.9 172.25.252.8
DNS Domain: openstacklocal見事DoT設定が反映されました。
DHCPが配布するDNS設定の無効化
DoT設定がGlobalで設定されています。
それとは別にインターフェースens3でDNS設定がされています。
この設定はDHCPが配布した設定です。
このままではせっかくのDNS設定が上書きされてしまいます。
配布されたDNSサーバがDoTに対応していれば問題はありません。
しかし、そうでない場合は暗号化はされません。
そこでDHCPが配布しているDNS設定を無効化していきます。
組織内のサーバは多くの場合、ローカルDNSサーバをDHCPから配布されています。
この設定を変更すると、ローカルな名前解決ができなくなるので注意してください。
netplanで現在の設定を確認します。
sudo cat /etc/netplan/50-cloud-init.yamlこのような設定になっていました(macaddressは変更してあります)。
network:
version: 2
ethernets:
ens3:
dhcp4: true
match:
macaddress: ff:ff:ff:ff:ff:ff
mtu: 1450
set-name: ens3dhcp4: trueとなっているので、DHCPサーバの配布を受け付けていることがわかります。
新しく/etc/netplan/99-dns.yamlファイルを作成しdhcp4の設定を上書きします。
network:
version: 2
ethernets:
ens3:
dhcp4-overrides:
use-dns: false
use-domains: false/etc/netplan/配下のYAMLファイル全て読み込みます。
設定を変更する場合は新しくYAMLファイルを作るようにしましょう。
先頭の数字の順に読み込むことも押さえておきましょう。
DHCPサーバはIPアドレスを振る役割を持ちます。
単純にdhcp4:falseとすると不具合が起きます。
そのため、dhcp4-overridesを利用します。
先ほどの設定を適応します。
sudo chmod 600 /etc/netplan/99-dns.yaml
sudo netplan apply再びDNS設定を確認します。
resolvectl statusこのようになっているはずです。
Global
Protocols: -LLMNR -mDNS +DNSOverTLS DNSSEC=yes/supported
resolv.conf mode: stub
Current DNS Server: 1.1.1.1
DNS Servers: 1.1.1.1 1.0.0.1
Fallback DNS Servers: 8.8.8.8 8.8.4.4
Link 2 (ens3)
Current Scopes: none
Protocols: -DefaultRoute -LLMNR -mDNS +DNSOverTLS DNSSEC=yes/supportedDHCPから配布されたDNS設定の無効化が完了しました。
これでGlobal設定がens3にも適応されます。
名前解決の確認
DNSが使えるか名前解決をして確認します。
nslookup one.one.one.oneこのようにCloudflareのIPアドレスが取得できれば正常に稼働しています。
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
Name: one.one.one.one
Address: 1.1.1.1
Name: one.one.one.one
Address: 1.0.0.1
Name: one.one.one.one
Address: 2606:4700:4700::1111
Name: one.one.one.one
Address: 2606:4700:4700::1001https://one.one.one.one/help/ にアクセスすることでDoHやDoTを使っていることを確認できます。
ブラウザがある場合は是非お試しください。
まとめ
今回はLinuxでDoT設定をする方法をご紹介しました。
DoTを用いることで、セキュリティリスクを軽減できます。
DNSはインターネットを利用するにあたり必要不可欠な技術です
足元からセキュリティを固めるためにもぜひご活用ください。

