Коллеги, этот пост, в отличие от предыдущих, полезен будет не всем. Он даже на полноценный пост не очень тянет, это скорее подсказка.
Но есть большое количество компаний (обладателей номеров автономных систем), которых сейчас в принудительном порядке заставляют использовать "Национальную систему доменных имен" в качестве апстрим-DNS, мотивируя это, конечно же, необходимостью повышения стабильности работы российского сегмента сети Интернет в условиях, когда коварный запад только и думает, как оборвать России связность (а мы их опережаем и обрываем ее изнутри). А побочная функция, что НСДИ не резолвит заблокированные в РФ домены - это так, случайность, неожиданная фича.
Можно было бы, конечно, порадоваться за такое беспокойство о качестве, но немного смущает, что владелец автономной системы обязан использовать только НСДИ, что напоминает складывание всех яиц в одну корзину, а учитывая качество работы НСДИ - и не в очень-то крепкую корзину. А за неподключение предусмотрены штрафы.
Я всецело поддерживаю повышение стабильности работы российского сегмента сети Интернет и предлагаю компаниям, попавшим под такое требование, решение, которое повысит стабильность еще больше, чем при подключении к НСДИ, но при этом со стороны НСДИ к вам претензий не будет.
Решение простое как блин, в общем-то. НСДИ детектирует подключение к ней по наличию запросов, но совершенно не может определить, что вы делаете с ответами.
Поэтому для тех компаний, масштаб которых позволяет использовать в качестве рекурсивного DNS-сервера dnsmasq, все становится просто и легко:
указываете в списке серверов сервера НСДИ (если кто не в курсе - в ipv4 это 195.208.4.1 и 195.208.5.1), но не вместо, а вместе с теми, которые вы используете без давления на вас со стороны государства (гугловые, клаудфлерные, опенднсные, да мало ли чьи).
кастуете на dnsmasq волшебную опцию --all-servers. Эта опция заставляет dnsmasq отправлять запросы на все серверы параллельно и использовать быстрейший из ответов.
опционально (если почему-то не очень доверяете НСДИ) - закрываете на вашей системе входящие пакеты от адресов НСДИ с портов 53/udp/tcp. Например, дропаете (не реджектите) через iptables.
И все счастливы. Все запросы из вашей сети честно летят в НСДИ, если НСДИ упадет или затупит - вы получите ответы от ваших постоянных серверов, если вы выполнили п.3, то манипуляция ответами со стороны НСДИ не повлияет на ваше использование сети.
Просто, но очень удобно. Надеюсь, кому-нибудь поможет.
Если кто-то знает, как реализовать такое же поведение резолвера на базе bind, unbound, powerdns или других более серьезных серверов - напишите в комментариях. Я сходу решения для них не нашел.
UPD. Для компаний с большой нагрузкой и отдельными любыми собственными резолверами @prometheus_ru предложил красивый метод. Ставим между клиентами и уже имеющимися резолверами балансировщик (например, https://dnsdist.org/) и используем его https://dnsdist.org/advanced/teeaction.html, чтобы сбрасывать запросы на НСДИ:
addAction(AllRule(), TeeAction("195.208.4.1"))
newServer({address="127.0.0.1:9053", name="Backend1"})
Красиво и для оператора связи должно быть очень удобно. Хотя и не позволит использовать НСДИ по прямому назначению, но вряд ли это кого-то сильно обеспокоит.
Комментарии (14)

Elsajalee
23.09.2021 18:13Так продолжаем цепочку: "НСДИ детектирует подключение к ней по наличию запросов, но совершенно не может определить, что вы делаете с ответами." Соответственно, НСДИ не знает сколько из вашей сети реально было запросов к DNS и сколько % вы направили на эти NS.
При использовании bind: forwarders честные, и forward first (пытаемся запросить самостоятельно, начиная с корневых).
forwarders {ip порт, ip порт...} - указывает адреса хостов и если нужно порты, куда переадресовывать запросы (обычно тут указываются DNS провайдеров ISP).
forward ONLY или forward FIRST - параметр first указывает, DNS-серверу пытаться разрешать имена с помощью DNS-серверов, указанных в параметре forwarders, и лишь в случае, если разрешить имя с помощью данных серверов не удалось, то будет осуществлять попытки разрешения имени самостоятельно.
Кстати, и мой вариант и ваш - отправка запросов на 53 куда не надо "детектируются ТСПУ без сложностей."

Furriest Автор
23.09.2021 18:17Ваш вариант тоже хорош, надо не забыть только заблокировать ответы от НСДИ.
А что ТСПУ - в моем варианте для нормального резолва мы тоже используем форвардеры, которые нам известны и, как следствие, перенаправляемы в VPN, который через ТСПУ уже полетит в шифрованном виде.

dartraiden
23.09.2021 18:28+9опционально (если почему-то не очень доверяете НСДИ)
Давайте подумаем, почему же мы не очень доверяем НСДИ.
Возможно, потому что она резолвит не все домены?
"
Список нерукопожатых доменов, как и в случае с ТСПУ, непубличен.
А может потому, что этот говна кусок порой резолвит аж целых 3 секунды?
Нет, если бы они сделали такой клёвый, устойчивый к отключению от корня и обрубанию снаружи DNS, который отвечает за 1-10 мс, то мы бы с радостью. Но ведь сделали в точности наоборот: ещё один уровень фильтрации, к тому же тормозной.
edo1h
27.09.2021 04:56Возможно, потому что она резолвит не все домены?
ну а домру отдаёт свои ответы на dns-запросы по «не всем» доменам (независимо от адреса сервера, к которому изначально был адресован запрос)
$ dig +short navalny.com @8.8.8.8 188.186.157.49 $ dig +short navalny.com @11.12.13.14 188.186.157.49так лучше? )

Furriest Автор
27.09.2021 09:45Так не лучше, поэтому если это для вас важно - трафик до 8.8.8.8 нужно убирать в туннель.

dartraiden
23.09.2021 18:39+2Решение простое как блин, в общем-то. НСДИ детектирует подключение к ней по наличию запросов
А если, грубо говоря, в файлик напихать 100500 доменов и бомбардировать НСДИ запросами в случайном порядке. Нехай жрут. К боевой системе этот эмулятор никак не подключать.
Furriest Автор
23.09.2021 18:41Можно так, но если они начнут профиль трафика смотреть в перспективе - могут возникнуть вопросы. Ну, условно, вся страна в едином порыве бросилась смотреть пресс-конференцию Путина - а у нас в резолве что-то из далекого прошлого запрашивается. Я бы на их месте такой анализатор запилил, это не очень сложно.

dredd_krd
24.09.2021 10:28Вся страна бросилась смотреть одно и то же, а наш резолвер закэшировал один раз, и отдаёт всем абонентам из кэша. Никакая "массовость" не будет заметна на НСДИ, если конечно TTL записи не 10 минут

Furriest Автор
25.09.2021 09:39Сейчас активно применяются низкие значения TTL. У amazon.com, например, 1 минута.
В целом для описанного варианта "100500 доменов из файла" решение есть, оно простое - https://dns-shotgun.readthedocs.io/en/stable/Но мне чисто интуитивно оно некомфортно, я предпочту сливать живой поток запросов через один из описанных методов.

Kirikekeks
23.09.2021 18:43+2Эй, ямщик, поворачивай к черту, этой дорогой поедем домой. Заказали бы у Яндекса нормальный НСДИ, с красивым адресом, самый быстрый. У них опыт, не пропьешь. И потихоньку стали бы cdn ить, маршруты бы пошли.
За такое НСДИ 90 лет назад могли бы административно наказать. Холостым, то есть абсолютно одиноким, патроном, как говаривал Жванецкий, земля ему пухом.
"
ky0
Использования любого незашифрованного коннекта к DNS-серверам в связи с последними событиями, имхо, стоит избегать.
Сегодня они рекомендуют использовать те серверы, которые ближе к телу, завтра начнут требовать, а послезавтра светлые умы, пилящие ПО для фсбшных коробок, доделают подмену запросов на лету. Нет уж, спасибо — лучше мы потерпим лишние 20 мсек и получим данные устойчивым к шаловливым ручкам способом.
Furriest Автор
Ну тут кейс не отрицает шифрованные каналы к альтернативным серверам. VPN в цивилизацию в наше время - суровая необходимость.
Надо помнить, что DoH/DoT (если речь шла про них), к сожалению, детектируются ТСПУ без сложностей.
Furriest Автор
И кстати да, они не рекомендуют, они требуют. Штрафы на неподключение уже выставляются.