Безопасность DNS становится все более актуальной темой, поэтому появляется все больше DNS резолверов с шифрованием (TLS), которые позволяют предотвратить перехват DNS запросов.

Когда я узнал о запуске резолвера quad9.net, то сначала даже нормально не смог зайти на их сайт (да и сейчас порой ощущение, что он лагает), пинги до резолвера были не значительно лучше чем у гугловых…

Но вот когда Cloudflare объявил о запуске нового публичного DNS резолвера, то они сразу правильно расставили акценты и приложили интересующие бенчмарки.

Проще всего начать использовать TLS DNS при помощи stubby, который лучше поставить через brew (MacOS):

brew install stubby

Если хотите GUI, то есть альфа версия StubbyManager, он идет уже внутри со stubby, так что его можно не ставить через brew отдельно.

Несмотря, на то что stubby идет с нормальным полноценным конфигом и сразу готов к запуску, в нем нет нового резолвера, да и не все дефолтные настройки могут вас устроить. Я сразу приведу готовый конфиг (/usr/local/etc/stubby/stubby.yml), который использую (если вам интересно вникнуть, то лучше почитайте тут):


resolution_type: GETDNS_RESOLUTION_STUB
dns_transport_list:
  - GETDNS_TRANSPORT_TLS
tls_authentication: GETDNS_AUTHENTICATION_REQUIRED
tls_query_padding_blocksize: 128
edns_client_subnet_private : 0
idle_timeout: 10000
listen_addresses:
  - 127.0.0.1
  -  0::1
round_robin_upstreams: 0
dnssec_return_status: GETDNS_EXTENSION_TRUE
upstream_recursive_servers:
  - address_data: 1.1.1.1
    tls_auth_name: "1dot1dot1dot1.cloudflare-dns.com"
    tls_pubkey_pinset:
      - digest: "sha256"
        value: yioEpqeR4WtDwE9YxNVnCEkTxIjx6EEIwFSQW+lJsbc=
  - address_data: 1.0.0.1
    tls_auth_name: "1dot1dot1dot1.cloudflare-dns.com"
    tls_pubkey_pinset:
      - digest: "sha256"
        value: yioEpqeR4WtDwE9YxNVnCEkTxIjx6EEIwFSQW+lJsbc=
  - address_data: 9.9.9.9
    tls_auth_name: "dns.quad9.net"
    tls_pubkey_pinset:
      - digest: "sha256"
        value: ZMZ1T16d9Qc5uvRpUn/mu6fh4+IdoJGOEKjANut91Io=

Если со временем изменится ключ сертификата, то чтобы получить новый можно воспользоваться командой:


echo | openssl s_client -connect '1.1.1.1:853' 2>/dev/null | openssl x509 -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64

Чтобы проверить конфигурацию, можно запустить:

sudo /usr/local/opt/bin/stubby -C /usr/local/etc/stubby/stubby.yml -l

В самом начале интересно помониторить логи, всё ли работает:

sudo tail -f /usr/local/var/log/stubby/stubby.log

Чтобы запустить stubby как сервис:

sudo brew services start stubby

Если вам лениво лезть в настройки системы и менять настройки DNS, то можете просто запустить:

sudo /usr/local/opt/stubby/sbin/stubby-setdns-macos.sh

Откатить назад:

sudo /usr/local/opt/stubby/sbin/stubby-setdns-macos.sh -r

По умолчанию, stubby запускается c уровнем логирования DEBUG, чтобы изменить его, нужно в файле homebrew.mxcl.stubby.plist (внутри каталога /usr/local/Cellar/stubby/, в моем случае был usr/local/Cellar/stubby/0.2.2_1/homebrew.mxcl.stubby.plist) заменить -l на -v5 или любой другой уровень.
Уровни логирования:

-v Specify logging level (overrides -l option). Values are
0: EMERG - System is unusable
1: ALERT - Action must be taken immediately
2: CRIT - Critical conditions
3: ERROR - Error conditions
4: WARN - Warning conditions
5: NOTICE - Normal, but significant, condition
6: INFO - Informational message
7: DEBUG - Debug-level message

Безопасного интернета!