DNS over HTTPS (DoH) на микротик
1. Отключаем использование DNS серверов, полученных от провайдера.
/ip dhcp-client set ether1 use-peer-dns=no
2. Далее редиректим трафик, идущий на 53й порт DNS сервера, на порт нашего роутера. Чтоб все запросы от клиентов шли на 53й порт роутера, а не в эти ваши интернеты
/ip firewall nat add chain=dstnat action=redirect protocol=tcp dst-port=53 comment="Redirect port 53"
/ip firewall nat add chain=dstnat action=redirect protocol=udp dst-port=53
3. Добавляем статические адреса DNS серверов
/ip dns static
add address=1.1.1.1 name=cloudflare-dns.com
add address=1.0.0.1 name=cloudflare-dns.com
add address=104.16.248.249 name=cloudflare-dns.com
add address=104.16.249.249 name=cloudflare-dns.com
add address=1.1.1.2 name=security.cloudflare-dns.com
add address=1.0.0.2 name=security.cloudflare-dns.com
add address=1.1.1.3 name=family.cloudflare-dns.com
add address=1.0.0.3 name=family.cloudflare-dns.com
4. Определяемся чьи серверы будем использовать (приведены для Cloudflare, Google и NextDNS):
4.1. Cloudflare
/ip dns set servers=1.1.1.1
/ip dns static add name=cloudflare-dns.com address=1.1.1.1
/ip dns static add name=cloudflare-dns.com address=1.0.0.1
/tool fetch url="https://cacerts.digicert.com/DigiCertGlobalRootCA.crt.pem"
/certificate import file-name=DigiCertGlobalRootCA.crt.pem passphrase=""
/ip dns set verify-doh-cert=yes use-doh-server=https://cloudflare-dns.com/dns-query
/system ntp client set enabled=yes servers=time.cloudflare.com
/ip dns set servers=""
/file/remove DigiCertGlobalRootCA.crt.pem
Проверка:
Если в браузере не указан другой DNS, то проверяем настройки на
https://1.1.1.1/help
нас интересуют строки
Connected to 1.1.1.1 Yes
Using DNS over HTTPS (DoH) Yes
4.2. Google DOH
/ip dns set servers=8.8.8.8,8.8.4.4
/system ntp client set enabled=yes primary-ntp=time.google.com
/tool fetch url=https://pki.goog/roots.pem
/certificate import file-name=roots.pem passphrase=""
/ip dns set use-doh-server=https://dns.google/dns-query verify-doh-cert=yes
/ip dns set allow-remote-requests=yes cache-max-ttl=1d use-doh-server=https://dns.google/dns-query verify-doh-cert=yes
/ip dns static
add address=8.8.8.8 name=dns.google
add address=8.8.4.4 name=dns.google
/ip dns set servers=""
/file/remove roots.pem
Скрипты для для беспроблемной работы. Обновление сертификатов и очистка кеша:
Обновление сертификата:
Скрипт
/system script add dont-require-permissions=no name=Certificate_Google policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/tool fetch url=https://pki.goog/roots.pem\r\n/certificate import file-name=roots.pem passphrase=\"\""
Задание на обновление сертификата Google раз в неделю.
/system scheduler add comment="Google Certificate Update" interval=1w name=Certificate_Google_Update on-event=Certificate_Google policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon start-date=dec/06/2019 start-time=05:20:00
Очистка кэша DNS:
Скрипт
/system script add dont-require-permissions=no name=DNS_Flush_Cache policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/ip dns cache flush"
Задание на ежедневную очистку кэша DNS
/system scheduler add comment="DoH Cache Flush" interval=1d name="DNS Cache Flush" on-event=DNS_Flush_Cache policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon start-date=dec/06/2019 start-time=05:30:00
4.3. NextDNS DOH
4.3.1. Идем на https://my.nextdns.io/ и регаемся. Логинимся и на главной странице видим ссылки для DOH и DOT.
Для Микротика нам необходима ссылка вида https://dns.nextdns.io/asdf23 (DOH), к ней мы можем добавить имя клиента для лучшей статистики на сайте NextDNS. Выглядит она примерно так https://dns.nextdns.io/asdf23/mikrotik.lite22
4.3.2. Проходим по вкладкам и включаем необходимые адрес-листы для блокировки.
4.3.3. В Фаервоксе открываем https://dns.nextdns.io/ и просматриваем сертификат. Сохраняем цепочку (Защита — Посмотреть сертификат — dns.nextdns.io — PEM (цепочка сертификатов)). Сохраняем, загружаем на Микрот и импортируем.
4.3.4. Настраиваем Микротик:
/tool fetch url=https://curl.se/ca/cacert.pem
/certificate import file-name=cacert.pem passphrase=""
/ip dns static add name=dns.nextdns.io address=45.90.28.0 type=A
/ip dns static add name=dns.nextdns.io address=45.90.30.0 type=A
/ip dns set use-doh-server=“https://dns.nextdns.io/asdf23/mikrotik.lite22” verify-doh-cert=yes
/ip dns set servers=""
/ip/dns/cache flush
Важное замечание. Сервис платный, но можно пользоваться бесплатно до 300 000 запросов в месяц, после этого все фильтрации перестают работать и nextdns отвечает как обычный DNS сервер. До следующего месяца…
Потестить можно тут
https://test.nextdns.io
Частые ошибки после настройки.
1) "DoH max concurrent queries reached, ignoring query" - если у Вас большие адрес-листы фаервола с доменами внутри, то они будут постоянно резолвится и Микрот будет регулярно стучать к DOH серверу. Если таких листов нет, то необходимо увеличить «DNS max server connections» и «Max concurent connections.
2) Ошибки SSL - это проблема с сертификатами, они или отсутствуют или время на роутере не настроено.