Коллеги, этот пост, в отличие от предыдущих, полезен будет не всем. Он даже на полноценный пост не очень тянет, это скорее подсказка.

Но есть большое количество компаний (обладателей номеров автономных систем), которых сейчас в принудительном порядке заставляют использовать "Национальную систему доменных имен" в качестве апстрим-DNS, мотивируя это, конечно же, необходимостью повышения стабильности работы российского сегмента сети Интернет в условиях, когда коварный запад только и думает, как оборвать России связность (а мы их опережаем и обрываем ее изнутри). А побочная функция, что НСДИ не резолвит заблокированные в РФ домены - это так, случайность, неожиданная фича.

Можно было бы, конечно, порадоваться за такое беспокойство о качестве, но немного смущает, что владелец автономной системы обязан использовать только НСДИ, что напоминает складывание всех яиц в одну корзину, а учитывая качество работы НСДИ - и не в очень-то крепкую корзину. А за неподключение предусмотрены штрафы.

Я всецело поддерживаю повышение стабильности работы российского сегмента сети Интернет и предлагаю компаниям, попавшим под такое требование, решение, которое повысит стабильность еще больше, чем при подключении к НСДИ, но при этом со стороны НСДИ к вам претензий не будет.

Решение простое как блин, в общем-то. НСДИ детектирует подключение к ней по наличию запросов, но совершенно не может определить, что вы делаете с ответами.

Поэтому для тех компаний, масштаб которых позволяет использовать в качестве рекурсивного DNS-сервера dnsmasq, все становится просто и легко:

  1. указываете в списке серверов сервера НСДИ (если кто не в курсе - в ipv4 это 195.208.4.1 и 195.208.5.1), но не вместо, а вместе с теми, которые вы используете без давления на вас со стороны государства (гугловые, клаудфлерные, опенднсные, да мало ли чьи).

  2. кастуете на dnsmasq волшебную опцию --all-servers. Эта опция заставляет dnsmasq отправлять запросы на все серверы параллельно и использовать быстрейший из ответов.

  3. опционально (если почему-то не очень доверяете НСДИ) - закрываете на вашей системе входящие пакеты от адресов НСДИ с портов 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)


  1. ky0
    23.09.2021 18:02
    +1

    Использования любого незашифрованного коннекта к DNS-серверам в связи с последними событиями, имхо, стоит избегать.

    Сегодня они рекомендуют использовать те серверы, которые ближе к телу, завтра начнут требовать, а послезавтра светлые умы, пилящие ПО для фсбшных коробок, доделают подмену запросов на лету. Нет уж, спасибо — лучше мы потерпим лишние 20 мсек и получим данные устойчивым к шаловливым ручкам способом.


    1. Furriest Автор
      23.09.2021 18:04

      Ну тут кейс не отрицает шифрованные каналы к альтернативным серверам. VPN в цивилизацию в наше время - суровая необходимость.

      Надо помнить, что DoH/DoT (если речь шла про них), к сожалению, детектируются ТСПУ без сложностей.


    1. Furriest Автор
      23.09.2021 19:27

      И кстати да, они не рекомендуют, они требуют. Штрафы на неподключение уже выставляются.


  1. 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 куда не надо "детектируются ТСПУ без сложностей."


    1. Furriest Автор
      23.09.2021 18:17

      Ваш вариант тоже хорош, надо не забыть только заблокировать ответы от НСДИ.

      А что ТСПУ - в моем варианте для нормального резолва мы тоже используем форвардеры, которые нам известны и, как следствие, перенаправляемы в VPN, который через ТСПУ уже полетит в шифрованном виде.


  1. dartraiden
    23.09.2021 18:28
    +9

    опционально (если почему-то не очень доверяете НСДИ)

    Давайте подумаем, почему же мы не очень доверяем НСДИ.

    Возможно, потому что она резолвит не все домены?

    "

    Список нерукопожатых доменов, как и в случае с ТСПУ, непубличен.

    А может потому, что этот говна кусок порой резолвит аж целых 3 секунды?



    Нет, если бы они сделали такой клёвый, устойчивый к отключению от корня и обрубанию снаружи DNS, который отвечает за 1-10 мс, то мы бы с радостью. Но ведь сделали в точности наоборот: ещё один уровень фильтрации, к тому же тормозной.


    1. 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

      так лучше? )


      1. Furriest Автор
        27.09.2021 09:45

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


  1. dartraiden
    23.09.2021 18:39
    +2

    Решение простое как блин, в общем-то. НСДИ детектирует подключение к ней по наличию запросов
    А если, грубо говоря, в файлик напихать 100500 доменов и бомбардировать НСДИ запросами в случайном порядке. Нехай жрут. К боевой системе этот эмулятор никак не подключать.


    1. Furriest Автор
      23.09.2021 18:41

      Можно так, но если они начнут профиль трафика смотреть в перспективе - могут возникнуть вопросы. Ну, условно, вся страна в едином порыве бросилась смотреть пресс-конференцию Путина - а у нас в резолве что-то из далекого прошлого запрашивается. Я бы на их месте такой анализатор запилил, это не очень сложно.


      1. dredd_krd
        24.09.2021 10:28

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


        1. Furriest Автор
          25.09.2021 09:39

          Сейчас активно применяются низкие значения TTL. У amazon.com, например, 1 минута.

          В целом для описанного варианта "100500 доменов из файла" решение есть, оно простое - https://dns-shotgun.readthedocs.io/en/stable/

          Но мне чисто интуитивно оно некомфортно, я предпочту сливать живой поток запросов через один из описанных методов.


  1. Kirikekeks
    23.09.2021 18:43
    +2

    Эй, ямщик, поворачивай к черту, этой дорогой поедем домой. Заказали бы у Яндекса нормальный НСДИ, с красивым адресом, самый быстрый. У них опыт, не пропьешь. И потихоньку стали бы cdn ить, маршруты бы пошли.

    За такое НСДИ 90 лет назад могли бы административно наказать. Холостым, то есть абсолютно одиноким, патроном, как говаривал Жванецкий, земля ему пухом.


    1. Furriest Автор
      23.09.2021 18:45
      +1

      Торопятся. Блокировка мира не за горами.