MENU

DNS暗号化! DNS over TLS (DoT) in Linux

今回は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 status

DHCPで配布された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=yes

DNSSEC=yesDNSOverTLS=yes で暗号化をONにしています。

DNS=1.1.1.1 1.0.0.1 ではCloudflareのDNSサーバを指定しています。

そしてフォールバック先としてFallbackDNS=8.8.8.8 8.8.4.4Googleの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: ens3

dhcp4: 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/supported

DHCPから配布された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::1001

https://one.one.one.one/help/ にアクセスすることでDoHやDoTを使っていることを確認できます。

ブラウザがある場合は是非お試しください。

まとめ

今回はLinuxでDoT設定をする方法をご紹介しました。

DoTを用いることで、セキュリティリスクを軽減できます。

DNSはインターネットを利用するにあたり必要不可欠な技術です

足元からセキュリティを固めるためにもぜひご活用ください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

所畑 聡一郎のアバター 所畑 聡一郎 ソフトウェアエンジニア

ソフトウェアエンジニアとして活動しています。
コーディングが大好きです。

目次