Коллеги, этот пост, в отличие от предыдущих, полезен будет не всем. Он даже на полноценный пост не очень тянет, это скорее подсказка.
Но есть большое количество компаний (обладателей номеров автономных систем), которых сейчас в принудительном порядке заставляют использовать "Национальную систему доменных имен" в качестве апстрим-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 Автор
И кстати да, они не рекомендуют, они требуют. Штрафы на неподключение уже выставляются.