Skip to content

Instantly share code, notes, and snippets.

@s3rgeym
Last active February 24, 2025 10:53
Show Gist options
  • Save s3rgeym/a593357060abde1025d1203e71631de4 to your computer and use it in GitHub Desktop.
Save s3rgeym/a593357060abde1025d1203e71631de4 to your computer and use it in GitHub Desktop.

DNS Over TLS

Какую проблему решает: протокол UDP, используемый для DNS-запросов, не использует шифрование.

Для начала запретим NetworkManager изменять конфиги:

$ sudo -e /etc/NetworkManager/conf.d/99-dns.conf
[main]
dns=none

Перезапустим NetworkManager для применения настроек:

$ sudo systemctl restart NetworkManager

Для проверки:

$ sudo NetworkManager --print-config

В /etc/resolv.conf или /etc/resolv.conf.d/head пропишем:

nameserver 127.0.0.53

NetworkManager не умеет делать запросы через TLS, поэтому нужно использовать для этого проксирующий DNS-сервер systemd-resolved. 127.0.0.53 - это используемый им адрес по умолчанию.

Пропишем кастомный DNS-сервер:

$ sudo mkdir /etc/systemd/resolved.conf.d/
$ sudo -e /etc/systemd/resolved.conf.d/99-dns-over-tls.conf
[Resolve]
DNS=1.1.1.1
FallbackDNS=1.0.0.1
DNSSEC=yes
DNSOverTLS=yes

Запустим сервис:

$ sudo systemctl enable --now systemd-resolved.service

Проверим настройки:

$ systemd-resolve --status
Global
           Protocols: +LLMNR +mDNS +DNSOverTLS DNSSEC=yes/supported
    resolv.conf mode: foreign
         DNS Servers: 1.1.1.1
Fallback DNS Servers: 1.0.0.1

Link 2 (enp4s0)
    Current Scopes: DNS LLMNR/IPv4 LLMNR/IPv6 mDNS/IPv4 mDNS/IPv6
         Protocols: +DefaultRoute +LLMNR +mDNS +DNSOverTLS DNSSEC=yes/supported
Current DNS Server: 192.168.0.1
       DNS Servers: 192.168.0.1
     Default Route: yes

Link 3 (docker0)
    Current Scopes: none
         Protocols: -DefaultRoute +LLMNR +mDNS +DNSOverTLS DNSSEC=yes/supported
     Default Route: no

Проверим используется ли резолвер. В выводе должен быть SERVER: 127.0.0.53#53(127.0.0.53) (UDP)

$ dig example.com

; <<>> DiG 9.20.6 <<>> example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32802
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;example.com.                   IN      A

;; ANSWER SECTION:
example.com.            98      IN      A       23.192.228.84
example.com.            98      IN      A       23.192.228.80
example.com.            98      IN      A       23.215.0.136
example.com.            98      IN      A       96.7.128.175
example.com.            98      IN      A       96.7.128.198
example.com.            98      IN      A       23.215.0.138

;; Query time: 128 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Mon Feb 24 13:23:29 MSK 2025
;; MSG SIZE  rcvd: 136
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment