Как и к НСДИ подключиться, и рыбку съесть
Коллеги, этот пост, в отличие от предыдущих, полезен будет не всем. Он даже на полноценный пост не очень тянет, это скорее подсказка.
Но есть большое количество компаний (обладателей номеров автономных систем), которых сейчас в принудительном порядке заставляют использовать «Национальную систему доменных имен» в качестве апстрим-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"})
Красиво и для оператора связи должно быть очень удобно. Хотя и не позволит использовать НСДИ по прямому назначению, но вряд ли это кого-то сильно обеспокоит.
Традиционный опрос
50% Полезно 17
5.88% Бесполезно 2
44.12% Я томат 15
Проголосовали 34 пользователя.
Воздержались 9 пользователей.