Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save s3rgeym/1a3aa215608ed389a6a9655d3b035e83 to your computer and use it in GitHub Desktop.

Select an option

Save s3rgeym/1a3aa215608ed389a6a9655d3b035e83 to your computer and use it in GitHub Desktop.

Цель: скрыть от провайдера и СОРМ DNS-запросы, которые по умолчанию не шифруются

Как написано в Arch Wiki, NetworkManager не умеет напрямую работать с DoT (DNS Over TLS). Для этого используется systemd-resolved (ставить его не надо — это часть пакета systemd).

Если он не включен:

sudo systemctl enable --now systemd-resolved

Так же нужно создать символическую ссылку:

sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

Делаем его резолвером по умолчанию:

echo '[main]\ndns=systemd-resolved' | sudo tee /etc/NetworkManager/conf.d/dns.conf

Применяем:

sudo systemctl restart NetworkManager

Теперь нужно отредактировать текущее соединение.

Ищем свое соединение:

nmcli connection show

У меня это New 802-3-ethernet connection.

Задаем настройки DNS соединению, а так же обязываем его работать через DoT:

sudo nmcli connection modify "New 802-3-ethernet connection" \
  ipv4.ignore-auto-dns yes \
  ipv4.dns "1.1.1.1#cloudflare-dns.com,1.0.0.1#cloudflare-dns.com" \
  ipv6.ignore-auto-dns yes \
  ipv6.dns "2606:4700:4700::1111#cloudflare-dns.com,2606:4700:4700::1001#cloudflare-dns.com" \
  connection.dns-over-tls 2

В файле настроек будет что-то типа этого:

/etc/NetworkManager/system-connections/New 802-3-ethernet connection.nmconnection

[connection]
id=New 802-3-ethernet connection
...
dns-over-tls=2

[ipv4]
...
dns=1.1.1.1#cloudflare-dns.com;1.0.0.1#cloudflare-dns.com;
ignore-auto-dns=true

[ipv6]
...
dns=2606:4700:4700::1111#cloudflare-dns.com;2606:4700:4700::1001#cloudflare-dns.com;
ignore-auto-dns=true

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

sudo nmcli connection reload
sudo nmcli connection down "New 802-3-ethernet connection"
sudo nmcli connection up "New 802-3-ethernet connection"

Должно в выводе быть что-то типа этого:

❯ resolvectl status
Global
           Protocols: +LLMNR +mDNS +DNSOverTLS DNSSEC=yes/supported
    resolv.conf mode: stub
  Current DNS Server: 1.1.1.1#cloudflare-dns.com
         DNS Servers: 1.1.1.1#cloudflare-dns.com
Fallback DNS Servers: 1.0.0.1#cloudflare-dns.com

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

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: 1.1.1.1#cloudflare-dns.com
       DNS Servers: 1.1.1.1#cloudflare-dns.com 1.0.0.1#cloudflare-dns.com
     Default Route: yes

Тестовый запрос:

❯ resolvectl query example.com
...
-- Data is authenticated: yes; Data was acquired via local or encrypted transport: yes
...

Ключевое тут: encrypted transport: yes

Ссылки:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment