Всем привет.

Ранее уже писалось и о блокировках сайтов на Украине, и о способах обхода, и собственно о прекрасном ресурсе Zaborona.Help для решения этой проблемы ( zhovner большущий респект и спасибо!)

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

Итак, имеется небольшая сеть, работающая через роутер. В моём конкретном примере роутер Asus, бегабщий под кастомной прошивкой Merlin последней версии. Описание настроек этого роутера указано здесь — и это прекрасно работало до наступления 2018 года :)

Дело в том, что ряд провайдеров организовали новый тип блокировки — теперь на уровне DNS организовывается фейковый рессолв на внутренний ресурс — в итого пинги проходят, а ресурс не открывается. Наиболее продвинутые настроили DNS так, что фейковый рессолв происходит только для внутренней сети, например:

Для внешних запросов:
$ nslookup www.yandex.ru 194.50.85.5
DNS: dns-5.la.net.ua
Address: 194.50.85.5

www.YANDEX.ru
Addresses: 2a02:6b8:a::a
77.88.55.50
5.255.255.77
77.88.55.60
5.255.255.50
Для запросов внутри сети:
$ nslookup www.yandex.ru 194.50.85.5
DNS: dns-5.la.net.ua
Address: 194.50.85.5

www.yandex.ru
Address: 194.50.85.44
В исходной инструкции на Zaborona.Help для роутеров Asus нет никаких указаний про дополнительные настройки DNS (ни для Merlin, ни для оригинальной прошивки), хотя для тех же DD WRT такое есть. При этом, опция block-outside-dns настроек, которая решает проблему при запуске на Windows-клиенте, очевидно, не работает на *nix и прошивках роутеров.

Очевидным решением является простая замена провайдерского DNS на гугловские (8.8.8.8, 8.8.4.4) или даже предлагаемые самим Zaborona.Help (74.82.42.42, 77.88.8.8), однако в этом случае некоторые внутресетевые ресурсы (IPTV, например) станут работать с проблемами, а то и вовсе перестанут работать.

В прошивке Merlin для Asus (а возможно — и в других, не проверял) есть опция настройки VPN-клиента, называемая «Accept DNS Configuration». Согласно задумке авторов,
Disabled = DNS servers sent by VPN-provided DNS server are ignored
Relaxed = DNS servers sent by VPN-provided DNS server are prepended to the current list of DNS servers, of which any can be used
Strict = DNS servers sent by the VPN-provided DNS server are prepended to the current list of DNS servers, which are used in order (existing DNS servers are only used if VPN-provided ones don't respond)
Exclusive = only the VPN-provided DNS servers are used
— выглядит так, что всё наше решение проблемы заключается в переключении настройки на значение «Strict», а в таком случае DNS из VPN будет имет первостепенный приоритет, а провайдерский DNS — задействоваться только в случае отсутствия ответа от VPN, что по идее решит вопрос с внутрисетевыми ресурсами. Возможно, так работает в Tomato, но в настоящий момент у Merlin эта опция реально работает только назначения политики редиректа трафика (Redirect Internet traffic — Policy Rules).

ОК, я попробовал сделать двойную работу (сейчас маршрутизация автоматически настраивается сервером Zaborona.Help, но ок — пропишем и на роутере тоже) и использовал простой скрипт:

#!/bin/sh

#      $1 is the VPN Client instance  # Required
#      $2 is the LAN source/subnet    # Optional - default is 'all'

if [ -z "$1" ];then
   logger -st "($(basename $0))" $$ "Missing VPN Client arg1"
   exit 999
fi

SRC='all'
if [ ! -z "$2" ];then
   SRC=$2
fi

for IP in $(curl https://zaborona.help/ips.txt -s | grep -v ":" | grep -v "^#" | grep .)
 do
  ip rule del from $SRC to $IP table ovpnc$1 prio 8000 2> /dev/null > /dev/null
  ip rule add from $SRC to $IP table ovpnc$1 prio 8000
 done

Код автоматически запускался на роутере по событию подключения клиента OpenVPN, при этом Accept DNS Configuration = Strict. В этом случае всё работает.

Осталось двойственное чувство — проблема решена, но через костыли:

  1. Почему-то опция Accept DNS Configuration на прошивке Merlin работает непонятным образом: без настройки редиректа она бесполезна.
  2. Очень хочется верить, что zaborona.help/ips.txt всегда актуален.

P.S. О проблемах с настройками администрация Zaborona.Help уведомлена вчера, пока ответа не поступило, ничего не изменилось. О проблеме с Accept DNS Configuration авторы прошивки Merlin также уведомлены, реакции не последовало.
P.P.S. Большая просьба политизированным читателям прекратить писать мне чушь в личку, угрожать минусами в карме и т.д. Для вас существуют отдельные ресурсы, не имеющие отношения к ИТ. Спасибо.

Комментарии (3)


  1. zhovner
    10.01.2018 16:25
    +1

    Мы решаем проблему подмены DNS отправляя запросы внутри VPN тоннеля, поэтому важно использовать DNS сервера которые выдает VPN сервер (74.82.42.42, 77.88.8.8). Для них анонсируются маршруты и поэтому запросы к этим серверам идут внутри VPN тоннеля. Подробнее об этой проблемы у нас в блоге.

    Инструкции в нашу Wiki пишут сами пользователи. У меня нет возможности проверять их корректность, как и нет возможности тестировать работу каждой прошивки для роутеров.
    Проблемы в работе конкретной прошивки я советую решать только с авторами этой прошивки.
    Кстати пользователи забороны заставили Mikrotik исправить проблему с работой OpenVPN в прошивках RouterOS.

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


    1. gjf Автор
      10.01.2018 16:51

      Как я уже написал, про проблему прошивки автор уведомлен, однако никакой информации от него не поступило.

      По поводу DNS — понял, таким образом маршрутизация на роутере посредством скрипта не поможет, действительно нужно переназначать приоритеты DNS.

      Попробую всё-таки допинать разработчика Merlin.


    1. gjf Автор
      10.01.2018 17:23
      -1

      Да, и Wiki я тоже подправил, раз уж там всё делают пользователи. Надеюсь, это поможет остальным.