- Используем пакеты на основе OpenWRT в рутерах ZyXel Keenetic
- Выборочный обход блокировок на маршрутизаторах с прошивкой Padavan и Keenetic OS
- Содержание
- Введение
- Как вы будете управлять обходом блокировок после настройки?
- Принцип работы
- Настройка маршрутизатора с прошивкой Padavan
- 1. Установка необходимого ПО на маршрутизаторе
- 2. Инициализация ipset, создание множества IP-адресов unblock (start_script.sh)
- 3. Настройка Tor
- 4. Список доменов (и не только) для обхода блокировки (unblock.txt)
- 5. Скрипт для заполнения множества unblock IP-адресами заданного списка доменов (unblock_ipset.sh)
- 6. Скрипт для формирования дополнительного конфигурационного файла dnsmasq из заданного списка доменов (unblock_dnsmasq.sh)
- 7. Скрипт ручного принудительного обновления системы после редактирования списка доменов (unblock_update.sh)
- 8. Скрипт автоматического заполнения множества unblock при загрузке маршрутизатора (S99unblock)
- 9. Перенаправление пакетов с адресатами из unblock в Tor (post_iptables_script.sh)
- 10. Подключение дополнительного конфигурационного файла к dnsmasq
- 11. Добавление задачи в cron для периодического обновления содержимого множества unblock
- 12. Перезагрузка маршрутизатора
- Настройка маршрутизатора с Keenetic OS
- 1. Установка необходимого ПО на маршрутизаторе
- 2. Инициализация ipset, создание множества IP-адресов unblock (100-ipset.sh)
- 3. Настройка Tor
- 4. Список доменов (и не только) для обхода блокировки (unblock.txt)
- 5. Скрипт для заполнения множества unblock IP-адресами заданного списка доменов (unblock_ipset.sh)
- 6. Скрипт для формирования дополнительного конфигурационного файла dnsmasq из заданного списка доменов (unblock_dnsmasq.sh)
- 7. Скрипт ручного принудительного обновления системы после редактирования списка доменов (unblock_update.sh)
- 8. Скрипт автоматического заполнения множества unblock при загрузке маршрутизатора (S99unblock)
- 9. Перенаправление пакетов с адресатами из unblock в Tor (100-redirect.sh)
- 10. Настройка dnsmasq и подключение дополнительного конфигурационного файла к dnsmasq
- 11. Добавление задачи в cron для периодического обновления содержимого множества unblock
- 12. Отключение штатного DNS-сервера и перезагрузка маршрутизатора
- Основные методы диагностики ошибок после настройки
- Дополнительный обход фильтрации DNS-запросов провайдером
Используем пакеты на основе OpenWRT в рутерах ZyXel Keenetic
Не так давно компания ZyXel с помощью модуля открытых пакетов поддержала OPKG — пакеты из популярной ОС OpenWRT, предназначенной для домашних маршрутизаторов. Это значит, что часть из них теперь можно ставить на ZyXel Keenetic. В этой статье я опишу процесс включения пакета, настройки репозитория Entware с тысячами пакетов, а также настройки рутера как OpenVPN клиента.
На данный момент проект обитает и обсуждается на этом форуме.
Требования — любой кинетик с последней версией NDMSv2 и USB — портом, кроме моделей 4GII/III. Возможно, на некоторых устройствах для появления нужных компонентов потребуется перейти на бета-ветку прошивки.
Первым делом идём в настройки рутера, и там в обновлениях устанавливаем, выбрав нужные опции, компоненты Open Package support, IPv6, а также все компоненты из секции USB storage. IPv6 нужен для корректной работы netfilter, когда будем загонять трафик в туннель. Также потребуется компонент FTP на устройстве, если файлы конфигурации будут загружаться не на флешку напрямую, а по сети.
На флешке создать ext2/ext3 раздел с любой меткой на латинке (например, keendev), подключить к рутеру и на разделе с меткой keendev создать папку install.
Далее в эту папку надо закинуть файл установки:
— для Keenetic DSL, LTE, VOX — mips;
— для остальных Keenetic`ов — mipsel;
Потом на странице «Приложения > OPKG» поставить галку «Включить». Затем выбрать из списка нужный USB-носитель, в поле «Сценарий initrc:» вписать /opt/etc/init.d/rc.unslung и нажать «Применить».
Если все сделали правильно, то в системном журнале через некоторое время появится строчка «… Установка Entware-Keenetic завершена!»
Теперь можно зайти на кинетик по ssh, логин root, пароль zyxel.
Пароль никак не связан с паролем кинетика. Меняется он, если необходимо, командой passwd.
Первым делом обновим список пакетов: opkg update
Установка пакетов происходит командой opkg install %commandname%
Для работы OpenVPN — клиента необходимы следующие пакеты:
Узнать уже установленные можно с помощью opkg list-installed, неустановленные нужно доустановить, не указывая версию в конце, только имя пакета.
В папку /opt/etc/openvpn необходимо создать файл openvpn.conf, в помощь touch и vi, примерно следующего формата:
client
dev tun
fast-io
persist-key
persist-tun
nobind
remote %serverIP% %port%
remote-random
pull
comp-lzo
tls-client
verify-x509-name Server name-prefix
ns-cert-type server
key-direction 1
route-method exe
route-delay 2
tun-mtu 1500
fragment 1300
mssfix 1450
verb 3
cipher AES-256-CBC
keysize 256
auth SHA512
sndbuf 524288
rcvbuf 524288
——BEGIN CERTIFICATE——
%сертификат%
——END CERTIFICATE——
——BEGIN RSA PRIVATE KEY——
%ключ rsa%
——END RSA PRIVATE KEY——
#
# 2048 bit OpenVPN static key
#
——BEGIN OpenVPN Static key V1——
%ключ%
——END OpenVPN Static key V1——
——BEGIN CERTIFICATE——
%сертификат%
——END CERTIFICATE——
Если ваш провайдер OpenVPN даёт файл router.ovpn, его также можно использовать. Тогда в скрипте запуска /opt/etc/init.d/S20openvpn нужно его указать в строке:
ARGS=»—daemon —cd /opt/etc/openvpn —config router.ovpn»
Для указания в скрипте iptables, какие интерфейсы нужно использовать, нужно их выяснить с помощью команды ifconfig.
Ищем в списке интерфейс с inet addr, совпадающим с локальным адресом вашего рутера. Например, он будет br0.
Теперь нужно прописать скрипт iptables в папке cd /opt/etc/ndm/netfilter.d. Назовём его openvpnfil.sh:
[ «$table» != filter ] && exit 0
iptables -I FORWARD -i br0 -o tun+ -j ACCEPT
iptables -I FORWARD -i tun+ -o br0 -j ACCEPT
iptables -t nat -A POSTROUTING -o tun+ -j MASQUERADE
Теперь рутер надо перезагрузить.
После перезагрузки идём опять по ssh и включаем OpenVPN, если он сам не включился при загрузке:
В логах кинетика (уже в веб-конфигураторе) можно будет посмотреть, всё ли хорошо. Там же будет написано, где и в чём плохо, если что-то пойдёт не так.
Источник
Выборочный обход блокировок на маршрутизаторах с прошивкой Padavan и Keenetic OS
Инструкций с разными вариантами обхода блокировок Интернет-ресурсов опубликовано огромное количество. Но тема не теряет актуальности. Даже всё чаще звучат инициативы на законодательном уровне заблокировать статьи о методах обхода блокировок. И появились слухи, что Роскомнадзор получит ещё одну пачку денег налогоплательщиков на «более лучшие» блокировки. Опытные пользователи ничего нового и полезного из статьи не узнают. А вот другие получат готовые пошаговые инструкции для простого и эффективного выборочного обхода блокировок на популярных маршрутизаторах с прошивкой Padavan и Keenetic.
Содержание
Введение
Я около двух лет использовал вариант обхода блокировок от Zolg. На нём основываются многие инструкций в сети. Моя в том числе.
Всё было хорошо, но «лучшее всегда враг хорошего». Во-первых, некоторые новые программы стали слишком «умными» и резолвят домены собственными методами, минуя DNS-сервер маршрутизатора. Это не позволяет dnsmasq на маршрутизаторе добавить адрес во множество ipset для разблокировки и приводит к закономерному результату — ресурс остаётся заблокированным. В Android 9 вообще появилась штатная поддержка DNS-over-TLS, т.е. этот метод обхода блокировки перестаёт работать (если другое устройство ранее не обращалось к dnsmasq). Во-вторых, обновление всего списка доменов из antizapret приводит к непредсказуемым результатам каждый раз. В список могут попасть домены, которые в реальности не заблокированы, и работа которых важна через основной канал. Нужно постоянно быть начеку и руками править сгенерированные файлы. В-третьих, надоело «таскать за собой» огромный список доменов с десятком тысяч казино и подобные, которые просто не нужны. Со временем я понял, что мне нужен лишь небольшой конкретный список заблокированных ресурсов.
Так что я год уже использую немного изменённый метод разблокировки, которым полностью удовлетворён:
- Простота и лёгкость управления (после настройки).
- Полный контроль над тем, какие ресурсы нужно разблокировать.
- Минимальные требования к ресурсам процессора и ОЗУ маршрутизатора.
- Широкий охват нюансов при обходе блокировок.
Важно отметить, что мой вариант не предназначен для случая, когда вам нужно разблокировать сотни и тысячи доменов. Потому что при старте маршрутизатора происходит резолвинг каждого домена из заданного списка. Чем больше доменов в списке, тем дольше будет происходить инициализация множества ipset для разблокировки.
Основа обхода блокировок та же — сеть Tor. Её использование обусловлено двумя простыми факторами— бесплатность, и вероятность того, что Tor будет заблокирован в России, близка к нолю, в отличие от любого VPN-сервиса. Tor является фундаментом наркотрафика в России от среднего звена до самых низов. Блокировка Tor приведёт к поиску новых инструментов для рынка и снижению уровню анонимности, что повлечёт за собой успешную активизацию работы локальных правоохранительных органов. В конечном итоге это, как вирус, начнёт негативно влиять на верхнее звено. Учитывая последние удивительные новости о связях высших должностных лиц государства с глобальным наркотрафиком в Россию, блокировка Tor в России — это просто табу, хоть она и тривиальная. Ни Роскомнадзор, какие бы миллиарды не выделялись этому ведомству, ни один суд в России не имеют разрешения «сверху» для блокировки Tor. И это уже даже никого не удивляет и не пугает, хоть Россия просто утопает в наркотиках (любой школьник знает, что такое «дакнет», и через 30 минут имеет фактическую возможность в любом городе с населением от 10 тыс. человек беспрепятственно получить любые наркотики практически в любых количествах — такая злая правда жизни). При текущем режиме вероятность блокировки сети Tor ниже, чем вероятность блокировки сайта музея Эрмитаж.
Приведённую инструкцию легко адаптировать для маршрутизаторов с OpenWrt. Также, небольшими изменениям легко заменить Tor на OpenVPN.
Как вы будете управлять обходом блокировок после настройки?
Всё очень просто. У вас есть файл /opt/etc/unblock.txt — простой список для разблокировки. Вы можете разблокировать домен, IP-адрес, диапазон адресов или CIDR. Одна строка — один элемент. Допускаются пустые строки, и можно использовать символ # в начале строки для игнорирования.
После редактирования этого файла вы просто выполняете команду для применения новой конфигурации:
Все ресурсы из unblock.txt разблокируются без необходимости перезагружать маршрутизатор.
Принцип работы
Настройка маршрутизатора с прошивкой Padavan
У вас должен быть маршрутизатор с установленной прошивкой Padavan и уже настроенным менеджером пакетов Entware. В Windows для подключения подключения к маршрутизатору по SSH вы можете использовать клиент PuTTY.
Убедитесь, что у вас используется Entware, а не устаревший Entware-ng. Посмотрите содержимое папки /opt/var/opkg-lists. Там будет присутствовать файл entware или entware-ng. Во втором случае вам нужно обновить прошивку Padavan вашего маршрутизатора до последней версии и заново установить менеджер пакетов Entware. Только после этого приступайте к пошаговой инструкции.
Как показали отзывы, в основном проблемы возникают у тех, у кого Entware настроен неверно изначально (т.е. не загружаются скрипты из init.d) во внутренней памяти маршрутизатора. Если у вас Xiaomi Mi Router 3 или 3G, и вы не уверены, что Entware во внутренней памяти у вас работает корректно (автоматический запуск), то просто всё настройте заново. Берёте PROMETHEUS. Обновляет скрипт (1). Обновляете исходный код (2). Собираете и прошиваете самую актуальную прошивку (4). Сбрасываете настройки прошивки (NVRAM и хранилище файлов) — Дополнительно > Администрирование > Настройки. Настраиваете доступ в Интернет на маршрутизаторе и включаете SSH. Выполняете в PROMETHEUS Firmware > Форматирование RWFS. Выбираете Дополнительно > Администрирование > Настройки > Монтировать файловую систему в R/W раздел > UBIFS. Перезагрузите маршрутизатор. Все актуальные скрипты запускаа Entware из внутренней памяти будут прописаны автоматически, и всё будет работать как часы.
Для тестов я использовал популярный Xiaomi Mi Router 3G (Entware установлен во внутреннюю память) с самой свежей прошивкой — 32a93db. Всё будет работать даже на легендарном малыше WT3020 AD/F/H за 10$.
1. Установка необходимого ПО на маршрутизаторе
mc — файловый менеджер Midnight Commander. Он нужен лишь из-за удобного редактора mcedit. Если вы привыкли пользоваться другим текстовым редактором, то mc можно не устанавливать.
tor — сервис Tor.
tor-geoip — база гео-IP для Tor.
bind-dig — DNS-клиент (аналог nslookup и host).
cron — планировщик заданий.
2. Инициализация ipset, создание множества IP-адресов unblock (start_script.sh)
Подключите необходимые модули и создайте пустое множество адресов с именем unblock при загрузке маршрутизатора. Для этого откройте в редакторе файл /etc/storage/start_script.sh:
Добавьте в конце:
Чтобы вставить из буфера, используйте Shift+Insert, сохранить — F2, выйти — F10.
При желании вы можете отредактировать файл start_script.sh через веб-интерфейс маршрутизатора — «Дополнительно» > «Персонализация» > «Скрипты» > «Выполнить перед инициализацией маршрутизатора». После редактирования нажмите «Применить».
3. Настройка Tor
Удалите содержимое конфигурационного файла Tor:
Откройте файл конфигурации Tor:
Вставьте (Shift+Insert) содержимое:
Замените при необходимости 192.168.0.1 на внутренний адрес вашего маршрутизатора (LAN). Краткое описание конфигурации:
- Исключить выходные узлы: Россия, Украина, Армения Киргизия, Беларусь.
- Повесить «прозрачный» прокси на адрес 192.168.0.1, порт 9141.
- Запретить быть точкой выхода.
4. Список доменов (и не только) для обхода блокировки (unblock.txt)
unblock.txt — простой список для разблокировки. Вы можете разблокировать домен, IP-адрес, диапазон или CIDR. Одна строка — один элемент. Пустые строки (в том числе с пробелами и табуляциями) игнорируются. Можно использовать символ # в начале строки для игнорирования.
Создайте файл /opt/etc/unblock.txt:
Каждая строка может содержать доменное имя, IP-адрес, диапазон или CIDR. Можно использовать символ # для комментирования строк.
5. Скрипт для заполнения множества unblock IP-адресами заданного списка доменов (unblock_ipset.sh)
Создайте скрипт /opt/bin/unblock_ipset.sh:
Вставьте (Shift+Insert) содержимое:
Дайте права на исполнение:
Скрипт достаточно простой, вот суть его работы… Ждём, когда заработает резолвинг домена google.com (если этого не сделать, то при загрузке маршрутизатора не будет заполнено множество unblock, т.к. маршрутизатор будет находиться ещё в процессе инициализации). Читаем строки в файле unblock.txt. У прочитанных строк автоматически удалены пробелы и табуляция в начале и в конце. Пропускаем пустые строки. Пропускаем строки, которые начинают на символ #. Ищем в строке CIDR. Если CIDR найден, то добавляем его в unblock. Ищем в строке диапазон. Если он найден, то добавляем его в unblock. Ищем в строке IP-адрес. Если IP найден, то добавляем его в unblock. Резолвим строку через dig. Все IP-адреса результата добавляем в unblock.
6. Скрипт для формирования дополнительного конфигурационного файла dnsmasq из заданного списка доменов (unblock_dnsmasq.sh)
Создайте скрипт /opt/bin/unblock_dnsmasq.sh:
Вставьте (Shift+Insert) содержимое:
Дайте права на исполнение:
Скрипт достаточно простой, вот суть его работы… Последовательно читаем строки из /opt/etc/unblock.txt. У прочитанных строк автоматически удалены пробелы и табуляция в начале и в конце. Пропускаем пустые строки. Пропускаем строки, которые начинают на #. Пропускаем строки, которые содержат IP-адрес (IP, диапазон, CIDR), т.е. нас интересуют только строки с именами доменов. В файл /opt/etc/unblock.dnsmasq вносим строки вида «ipset=/доменное_имя/unblock». Это означает, что после определения IP-адресов конкретного домена они будут автоматически добавлены во множество unblock.
Обязательно запустите скрипт для генерация файла unblock.dnsmasq:
Проверьте, что файл unblock.dnsmasq создался:
7. Скрипт ручного принудительного обновления системы после редактирования списка доменов (unblock_update.sh)
Создайте скрипт /opt/bin/unblock_update.sh:
Вставьте (Shift+Insert) содержимое:
Дайте права на исполнение:
8. Скрипт автоматического заполнения множества unblock при загрузке маршрутизатора (S99unblock)
Создайте скрипт /opt/etc/init.d/S99unblock:
Вставьте (Shift+Insert) содержимое:
Дайте права на исполнение:
9. Перенаправление пакетов с адресатами из unblock в Tor (post_iptables_script.sh)
Откройте в редакторе файл /etc/storage/post_iptables_script.sh:
Добавьте в конце:
При желании вы можете отредактировать файл post_iptables_script.sh через веб-интерфейс маршрутизатора — «Дополнительно» > «Персонализация» > «Скрипты» > «Выполнить после перезапуска правил брандмауэра». После редактирования нажмите «Применить».
В этот же файл вы можете добавить (это необязательно) перенаправление всех запросов на внешний порт 53 на себя. Это нужно, чтобы клиенты в локальной сети не использовали сторонние DNS-сервисы. Запросы будут идти через штатный DNS-сервер.
Замените при необходимости 192.168.0.1 на внутренний адрес вашего маршрутизатора (LAN).
10. Подключение дополнительного конфигурационного файла к dnsmasq
Нам необходимо подключить созданный файл unblock.dnsmasq к dnsmasq. Для этого откройте в редакторе файл /etc/storage/dnsmasq/dnsmasq.conf:
Добавьте в конце:
Если хотите (это необязательно), можете добавить дополнительный сервер для резолвинга и надёжности:
При желании вы можете отредактировать файл dnsmasq.conf через веб-интерфейс маршрутизатора — «Дополнительно» > «LAN» > «DHCP-сервер» > «Пользовательский файл конфигурации dnsmasq.conf». После редактирования нажмите «Применить».
11. Добавление задачи в cron для периодического обновления содержимого множества unblock
Это дополнительная страховка на тот случай, если программы/устройства используют свой собственный метод резолвинга, а IP-адрес домена изменился. Всё, что нужно сделать, это с желаемой периодичностью запускать скрипт unblock_ipset.sh. Для примера будем запускать каждый день в 6 утра.
Замените в файле конфигурации cron имя root на admin:
Откройте в редакторе файл /opt/etc/crontab:
Добавьте в конце:
При желании вы можете закомментировать все остальные шаблонные задачи. Вот, как будет выглядеть ваш файл crontab:
12. Перезагрузка маршрутизатора
После перезагрузки откройте в браузере сайт check.torproject.org (он должен быть добавлен в unblock.txt). Если вы всё сделали верно, то вы увидите надпись «Congratulations. This browser is configured to use Tor.»:
Настройка маршрутизатора с Keenetic OS
У вас должен быть маршрутизатор Keenetic/Zyxel с уже настроенным менеджером пакетов Entware (OPKG). Например, вот список некоторых маршрутизаторов, которые поддерживают Entware: Keenetic II, Keenetic III, Extra, Extra II, Giga II, Giga III, Omni, Omni II, Viva, Ultra, Ultra II, Omni (KN-1410), Extra (KN-1710), Giga (KN-1010), Ultra (KN-1810), Viva (KN-1910), DSL (KN-2010), Duo (KN-2110). Инструкцию по настройке Entware можно посмотреть тут (до 10 пункта).
Если ранее (с прошивкой младше 2.07) вы уже добавляли поддержку Entware, то убедитесь, что у вас используется не устаревший Entware-ng.
Обязательно включите «Модули ядра подсистемы Netfilter» — Общие настройки > Изменить набор компонентов. Если его нет в списке доступных, то пробуйте установить сначала компонент «Протокол IPv6». Если после этого не появляется, то пробуйте без него, но высокая вероятность, что у вас не будет работать разблокировка по диапазону и CIDR (т.к. не будет поддержки множества hash:net).
Для тестов я использовал Keenetic Ultra (KN-1810) с самой свежей прошивкой — 2.14.C.0.0-4.
Важное замечание. Вам придётся отключить штатный DNS-сервер в системе, мы будем использовать dnsmasq вместо него. Вы потеряете возможность назначать DNS-сервисы (Яндекс.DNS/SkyDNS/AdGuard DNS) индивидуально для клиентов, но без проблем сможете использовать их глобально через настройки dnsmasq при необходимости.
1. Установка необходимого ПО на маршрутизаторе
mc — файловый менеджер Midnight Commander. Он нужен лишь из-за удобного редактора mcedit. Если вы привыкли пользоваться другим текстовым редактором, то mc можно не устанавливать.
tor — сервис Tor.
tor-geoip — база гео-IP для Tor.
bind-dig — DNS-клиент (аналог nslookup и host).
cron — планировщик заданий.
dnsmasq-full — DNS-сервер.
ipset и iptables — консольные утилиты ipset и iptables (возможно, они уже есть в системе и не нужны, я добавил их для подстраховки).
2. Инициализация ipset, создание множества IP-адресов unblock (100-ipset.sh)
Проверьте, что в системе вашего маршрутизатора есть поддержка множества hash:net (как оказалась, не во всех маршрутизаторах Keenetic она есть):
Если команда никаких ошибок и сообщений не выдала, значит поддержка есть, и просто следуйте инструкции дальше. В противном случае (есть ошибка) в следующем скрипте вам нужно заменить hash:net на hash:ip. При этом вы потеряете возможность разблокировки по диапазону и CIDR.
Создайте пустое множество адресов с именем unblock при загрузке маршрутизатора. Для этого создайте файл /opt/etc/ndm/fs.d/100-ipset.sh:
Вставьте (Shift+Insert) содержимое:
Чтобы вставить из буфера, используйте Shift+Insert, сохранить — F2, выйти — F10.
Дайте права на исполнение:
3. Настройка Tor
Удалите содержимое конфигурационного файла Tor:
Откройте файл конфигурации Tor:
Вставьте (Shift+Insert) содержимое:
Замените при необходимости 192.168.0.1 на внутренний адрес вашего маршрутизатора (LAN). Краткое описание конфигурации:
- Исключить выходные узлы: Россия, Украина, Армения Киргизия, Беларусь.
- Повесить «прозрачный» прокси на адрес 192.168.0.1, порт 9141.
- Запретить быть точкой выхода.
4. Список доменов (и не только) для обхода блокировки (unblock.txt)
unblock.txt — простой список для разблокировки. Вы можете разблокировать домен, IP-адрес, диапазон или CIDR. Одна строка — один элемент. Пустые строки (в том числе с пробелами и табуляциями) игнорируются. Можно использовать символ # в начале строки для игнорирования.
Создайте файл /opt/etc/unblock.txt:
Каждая строка может содержать доменное имя, IP-адрес, диапазон или CIDR. Можно использовать символ # для комментирования строк.
5. Скрипт для заполнения множества unblock IP-адресами заданного списка доменов (unblock_ipset.sh)
Создайте скрипт /opt/bin/unblock_ipset.sh:
Вставьте (Shift+Insert) содержимое:
Дайте права на исполнение:
Скрипт достаточно простой, вот суть его работы… Ждём, когда заработает резолвинг домена google.com (если этого не сделать, то при загрузке маршрутизатора не будет заполнено множество unblock, т.к. маршрутизатор будет находиться ещё в процессе инициализации). Читаем строки в файле unblock.txt. У прочитанных строк автоматически удалены пробелы и табуляция в начале и в конце. Пропускаем пустые строки. Пропускаем строки, которые начинают на символ #. Ищем в строке CIDR. Если CIDR найден, то добавляем его в unblock. Ищем в строке диапазон. Если он найден, то добавляем его в unblock. Ищем в строке IP-адрес. Если IP найден, то добавляем его в unblock. Резолвим строку через dig. Все IP-адреса результата добавляем в unblock.
6. Скрипт для формирования дополнительного конфигурационного файла dnsmasq из заданного списка доменов (unblock_dnsmasq.sh)
Создайте скрипт /opt/bin/unblock_dnsmasq.sh:
Вставьте (Shift+Insert) содержимое:
Дайте права на исполнение:
Скрипт достаточно простой. Последовательно читаем строки из /opt/etc/unblock.txt. У прочитанных строк автоматически удалены пробелы и табуляция в начале и в конце. Пропускаем пустые строки. Пропускаем строки, которые начинают на #. Пропускаем строки, которые содержат IP-адрес (IP или CIDR), т.е. нас интересуют только строки с именами доменов. В файл /opt/etc/unblock.dnsmasq вносим строки вида «ipset=/доменное_имя/unblock». Это означает, что после определения IP-адресов конкретного домена они будут автоматически добавлены во множество unblock.
Обязательно запустите скрипт для генерация файла unblock.dnsmasq:
Проверьте, что файл unblock.dnsmasq создался:
7. Скрипт ручного принудительного обновления системы после редактирования списка доменов (unblock_update.sh)
Создайте скрипт /opt/bin/unblock_update.sh:
Вставьте (Shift+Insert) содержимое:
Дайте права на исполнение:
8. Скрипт автоматического заполнения множества unblock при загрузке маршрутизатора (S99unblock)
Создайте скрипт /opt/etc/init.d/S99unblock:
Вставьте (Shift+Insert) содержимое:
Дайте права на исполнение:
9. Перенаправление пакетов с адресатами из unblock в Tor (100-redirect.sh)
Для этого создайте файл /opt/etc/ndm/netfilter.d/100-redirect.sh:
Вставьте (Shift+Insert) содержимое:
Если вы в шаге 2 использовали hash:ip, а не hash:net, то замените hash:net на hash:ip. Фактически мы дополнительно дублируем функцию создания множества unblock из 2 шага. Это нужно для подстраховки, если скрипты из fs.d ещё не начали запускаться, а скрипты netfilter.d уже запускаются. Ничего страшного, если unblock уже было создано ранее, команда просто будет проигнорирована.
В этот же файл вы можете добавить (это необязательно) перенаправление всех запросов на внешний порт 53 на себя. Это нужно, чтобы клиенты в локальной сети не использовали сторонние DNS-сервисы. Запросы будут идти через штатный DNS-сервер. Перед последним exit добавьте:
Замените при необходимости 192.168.0.1 на внутренний адрес вашего маршрутизатора (LAN).
Дайте права на исполнение:
10. Настройка dnsmasq и подключение дополнительного конфигурационного файла к dnsmasq
Удалите содержимое конфигурационного файла dnsmasq:
Откройте файл конфигурации dnsmasq:
Вставьте (Shift+Insert) содержимое:
Замените при необходимости 192.168.0.1 на внутренний адрес вашего маршрутизатора (LAN).
11. Добавление задачи в cron для периодического обновления содержимого множества unblock
Это дополнительная страховка на тот случай, если программы/устройства используют свой собственный метод резолвинга, а IP-адрес домена изменился. Всё, что нужно сделать, это с желаемой периодичностью запускать скрипт unblock_ipset.sh. Для примера будем запускать каждый день в 6 утра.
Откройте в редакторе файл /opt/etc/crontab:
Добавьте в конце:
При желании вы можете закомментировать все остальные шаблонные задачи. Вот, как будет выглядеть ваш файл crontab:
12. Отключение штатного DNS-сервера и перезагрузка маршрутизатора
Подключитесь к CLI маршрутизатора Keenetic (порт 23 для Telnet и 22 для SSH, если в системе добавлен компонент «Сервер SSH»).
Встроенный в прошивку DNS-сервер будет выключен, и вместо него будет использоваться dnsmasq из состава Entware. Маршрутизатор при загрузке проверяет, подмонтирована ли папка opt (есть ли флешка/диск с Entware). Если есть, то штатный DNS-сервер не используется. Если нет, используется. Т.е. вынув флешку и перезагрузив маршрутизатор, у вас всё будет работать, как и раньше (перед настройкой).
После перезагрузки откройте в браузере сайт check.torproject.org (он должен быть добавлен в unblock.txt). Если вы всё сделали верно, то вы увидите надпись «Congratulations. This browser is configured to use Tor.»:
Основные методы диагностики ошибок после настройки
Если проверка с сайтом check.torproject.org (он должен быть добавлен в unblock.txt) проходит, но для других ресурсов продолжает открываться заглушка от провайдера (или не открываются), скорее всего, провайдер вмешивается в DNS-трафик, подменяя ответы — вам нужно сделать дополнительный обход фильтрации DNS-запросов.
Если после настройки что-то работает не так, как нужно, используйте простые команды для определения проблемного этапа.
Отобразите содержимое множества unblock:
Если система сообщит, что такого множества нет, то ошибка на этапе 2 или вы не включили модуль Netfilter в системе (в случае с Keenetic).
Если множество окажется пустым, то не отработал скрипт unblock_ipset.sh, который в свою очередь должен быть запущен стартовым скриптом S99unblock. Запустите этот скрипт unblock_ipset.sh вручную. Если множество заполнилось, то ошибка на этапе 8. Если скрипт не может выполниться (скорее всего, ожидает резолвинга google.com), то ошибка где-то на стороне DNS-сервера, возможно, на этапе 10 или 6.
Проверьте наличие редиректа в iptables:
Если его нет, то ошибка на этапе 9.
Если вообще все сайты не работают, т.е. не работает DNS, ошибка где-то в этапе 6 или 10. Возможно, на этапе 9.
Если все сайты из unblock.txt не работают (превышено время ожидания), но все другие работают, то проблема где-то на стороне Tor, ошибка на этапе 3.
Дополнительный обход фильтрации DNS-запросов провайдером
Если провайдер вмешивается в DNS-трафик, подменяя ответы для заблокированных ресурсов, это очень просто обойти. Для этого мы будем использовать dnscrypt-proxy. При желании и опыте вы легко можете заменить dnscrypt на stubby (DNS over TLS).
dnscrypt будет использоваться только для тех доменов, которые перечислены в unblock.txt. Все остальные запросы будут идти через штатные DNS-серверы.
Если вы уверены, что ваш провайдер не фильтрует DNS-запросы, то эту дополнительную настройку делать не нужно.
У вас уже должен быть настроен описанный выше обход блокировок. Нижеследующие настройки идентичны для Padavan и Keenetic OS.
Установите дополнительное ПО на маршрутизаторе:
Откройте файл конфигурации dnscrypt-proxy:
Найдите параметры listen_addresses, fallback_resolver, cache и измените их:
77.88.8.8:1253 — это адрес DNS-сервера Яндекс с нестандартным портом. Он является резервным на тот случай, если у dnscrypt-proxy возникнут какие-то проблемы.
Убедитесь, что dnscrypt-proxy работает (вы должны в ответ увидеть список IP-адресов):
Откройте в редакторе скрипт /opt/bin/unblock_ipset.sh:
Замените содержимое на:
Мы внесли небольшое изменение — теперь dig для резолвинга использует не штатный DNS-сервер, а dnscrypt-proxy с портом 9153.
Откройте в редакторе скрипт /opt/bin/unblock_dnsmasq.sh:
Замените содержимое на:
Мы внесли небольшое изменение — теперь при генерации файла unblock.dnsmasq дополнительно вносятся строки вида «server=/доменное_имя/127.0.0.1#9153». Это означает, что резолвинг доменов из списка будет происходить через dnscrypt-proxy.
Готово. Все сложные настройки позади. Теперь вы будете только редактировать список unblock.txt при необходимости, добавляя или удаляя из него домены или IP-адреса для разблокировки, и командой unblock_update.sh активировать внесённые изменения.
UPDATE 01.04.2019. Часто приходят личные сообщения по статье с типовыми вопросами. Отвечу тут на самые распространённые.
Как сделать доступными сайты доменной зоны .onion?
В torrc добавить:
Для доступа ко всем доменам зоны onion добавьте в dnsmasq.conf:
Если вы не хотите открывать доступ ко всем доменам зоны onion, а лишь к определённым, то в dnsmasq.conf добавьте записи следущего вида:
Как сделать обход блокировок для клиентов VPN-сервера, запущенного на маршрутизаторе?
В torrc строку с TransPort замените на:
Добавьте дополнительный редирект с необходимымм интерфейсом (ИНТЕРФЕЙС — интерфейс VPN-сети):
Источник