Содержание
- Введение
- Как вы будете управлять обходом блокировок после настройки?
- Принцип работы
- Настройка маршрутизатора с прошивкой Padavan
- Настройка маршрутизатора с Keenetic OS
- Основные методы диагностики ошибок после настройки.
- Дополнительный обход фильтрации DNS-запросов провайдером
Введение
Я около двух лет использовал вариант обхода блокировок от 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. Одна строка — один элемент. Допускаются пустые строки, и можно использовать символ # в начале строки для игнорирования.
###Торрент-трекеры
rutracker.org
rutor.info
rutor.is
mega-tor.org
kinozal.tv
nnm-club.me
nnm-club.ws
tfile.me
tfile-home.org
tfile1.cc
megapeer.org
megapeer.ru
tapochek.net
tparser.org
rustorka.com
uniongang.tv
fast-torrent.ru
#Каталоги медиаконтента для программ
hdrezka.ag
hdrezka.me
filmix.co
filmix.cc
###Книги
lib.rus.ec
flisland.net
flibusta.site
###Телеграм
telegram.org
web.telegram.org
desktop.telegram.org
tdesktop.com
updates.tdesktop.com
venus.web.telegram.org
flora.web.telegram.org
vesta.web.telegram.org
pluto.web.telegram.org
aurora.web.telegram.org
###Разное
edem.tv
crimerussia.com
4pna.com
2019.vote
###Проверка Tor
check.torproject.org
###Пример разблокировки по IP (убрать # в начале строки)
#195.82.146.214
###Пример разблокировки по CIDR (убрать # в начале строки)
#103.21.244.0/22
После редактирования этого файла вы просто выполняете команду для применения новой конфигурации:
unblock_update.sh
Все ресурсы из unblock.txt разблокируются без необходимости перезагружать маршрутизатор.
Принцип работы
- При инициализации маршрутизатора создаётся пустое множество IP-адресов ipset с именем unblock.
- В брандмауэр добавляется правило перенаправления всех пакетов с адресатами из unblock в сервис Tor.
- Запускается сервис Tor в режиме прозрачного прокси.
- Запускается специальный скрипт unblock_ipset.sh, который резолвит все домены из unblock.txt и добавляет их IP-адреса в множество unblock. IP-адреса и CIDR из этого файла тоже добавляются в unblock.
- Запускается dnsmasq с дополнительным конфигурационным файлом unblock.dnsmasq, в котором указано добавление IP-адресов доменов из unblock.txt в множество unblock при резолвинге.
- cron с определенной периодичностью запускает unblock_ipset.sh, чтобы частично компенсировать возможные случаи с нюансами.
- При необходимости все домены из unblock.txt (и только они) резолвятся через dnscrypt-proxy, если провайдер фильтрует DNS.
Настройка маршрутизатора с прошивкой Padavan
У вас должен быть маршрутизатор с установленной прошивкой Padavan и уже настроенным менеджером пакетов Entware. В Windows для подключения подключения к маршрутизатору по SSH вы можете использовать клиент PuTTY.
Убедитесь, что у вас используется Entware, а не устаревший Entware-ng. Посмотрите содержимое папки /opt/var/opkg-lists. Там будет присутствовать файл entware или entware-ng. Во втором случае вам нужно обновить прошивку Padavan вашего маршрутизатора до последней версии и заново установить менеджер пакетов Entware. Только после этого приступайте к пошаговой инструкции.
Для тестов я использовал популярный Xiaomi Mi Router 3G (Entware установлен во внутреннюю память) с самой свежей прошивкой — 32a93db. Всё будет работать даже на легендарном малыше WT3020 AD/F/H за 10$.
1. Установка необходимого ПО на маршрутизаторе
opkg update
opkg install mc tor tor-geoip bind-dig cron
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:
mcedit /etc/storage/start_script.sh
Добавьте в конце:
modprobe ip_set
modprobe ip_set_hash_ip
modprobe ip_set_hash_net
modprobe ip_set_bitmap_ip
modprobe ip_set_list_set
modprobe xt_set
ipset create unblock hash:net
Чтобы вставить из буфера, используйте Shift+Insert, сохранить — F2, выйти — F10.
При желании вы можете отредактировать файл start_script.sh через веб-интерфейс маршрутизатора — «Дополнительно» > «Персонализация» > «Скрипты» > «Выполнить перед инициализацией маршрутизатора». После редактирования нажмите «Применить».
3. Настройка Tor
Удалите содержимое конфигурационного файла Tor:
cat /dev/null > /opt/etc/tor/torrc
Откройте файл конфигурации Tor:
mcedit /opt/etc/tor/torrc
Вставьте (Shift+Insert) содержимое:
User admin
PidFile /opt/var/run/tor.pid
ExcludeExitNodes {RU},{UA},{AM},{KG},{BY}
StrictNodes 1
TransPort 192.168.0.1:9141
ExitRelay 0
ExitPolicy reject *:*
ExitPolicy reject6 *:*
GeoIPFile /opt/share/tor/geoip
GeoIPv6File /opt/share/tor/geoip6
DataDirectory /opt/var/lib/tor
Замените при необходимости 192.168.0.1 на внутренний адрес вашего маршрутизатора (LAN). Краткое описание конфигурации:
- Исключить выходные узлы: Россия, Украина, Армения Киргизия, Беларусь.
- Повесить «прозрачный» прокси на адрес 192.168.0.1, порт 9141.
- Запретить быть точкой выхода.
4. Список доменов (и не только) для обхода блокировки (unblock.txt)
unblock.txt — простой список для разблокировки. Вы можете разблокировать домен, IP-адрес или CIDR. Одна строка — один элемент. Пустые строки (в том числе с пробелами и табуляциями) игнорируются. Можно использовать символ # в начале строки для игнорирования.
Создайте файл /opt/etc/unblock.txt:
mcedit /opt/etc/unblock.txt
Каждая строка может содержать доменное имя, IP-адрес или CIDR. Можно использовать символ # для комментирования строк.
###Торрент-трекеры
rutracker.org
rutor.info
rutor.is
mega-tor.org
kinozal.tv
nnm-club.me
nnm-club.ws
tfile.me
tfile-home.org
tfile1.cc
megapeer.org
megapeer.ru
tapochek.net
tparser.org
rustorka.com
uniongang.tv
fast-torrent.ru
#Каталоги медиаконтента для программ
hdrezka.ag
hdrezka.me
filmix.co
filmix.cc
###Книги
lib.rus.ec
flisland.net
flibusta.site
###Телеграм
telegram.org
web.telegram.org
desktop.telegram.org
tdesktop.com
updates.tdesktop.com
venus.web.telegram.org
flora.web.telegram.org
vesta.web.telegram.org
pluto.web.telegram.org
aurora.web.telegram.org
###Разное
edem.tv
crimerussia.com
4pna.com
2019.vote
###Проверка Tor
check.torproject.org
###Пример разблокировки по IP (убрать # в начале строки)
#195.82.146.214
###Пример разблокировки по CIDR (убрать # в начале строки)
#103.21.244.0/22
5. Скрипт для заполнения множества unblock IP-адресами заданного списка доменов (unblock_ipset.sh)
Создайте скрипт /opt/bin/unblock_ipset.sh:
mcedit /opt/bin/unblock_ipset.sh
Вставьте (Shift+Insert) содержимое:
#!/bin/sh
until ADDRS=$(dig +short google.com @localhost) && [ -n "$ADDRS" ] > /dev/null 2>&1; do sleep 5; done
while read line || [ -n "$line" ]; do
[ -z "$line" ] && continue
[ "${line:0:1}" = "#" ] && continue
echo $line | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/[0-9]{1,2}' | awk '{system("ipset -exist add unblock "$1)}'
dig +short $line @localhost | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | awk '{system("ipset -exist add unblock "$1)}'
done < /opt/etc/unblock.txt
Дайте права на исполнение:
chmod +x /opt/bin/unblock_ipset.sh
Скрипт достаточно простой, вот суть его работы… Ждём, когда заработает резолвинг домена google.com (если этого не сделать, то при загрузке маршрутизатора не будет заполнено множество unblock, т.к. маршрутизатор будет находиться ещё в процессе инициализации). Читаем строки в файле unblock.txt. У прочитанных строк автоматически удалены пробелы и табуляция в начале и в конце. Пропускаем пустые строки. Пропускаем строки, которые начинают на символ #. Ищем в строке CIDR. Если CIDR найден, то добавляем его в unblock. Резолвим строку через dig. Все IP-адреса результата добавляем в unblock.
Если строка является CIDR (мы её уже внесли в unblock), то dig выдаст нулевой результат.
Если строка является IP-адресом, то dig выдаст этот же IP-адрес, и мы его добавим в unblock.
6. Скрипт для формирования дополнительного конфигурационного файла dnsmasq из заданного списка доменов (unblock_dnsmasq.sh)
Создайте скрипт /opt/bin/unblock_dnsmasq.sh:
mcedit /opt/bin/unblock_dnsmasq.sh
Вставьте (Shift+Insert) содержимое:
#!/bin/sh
cat /dev/null > /opt/etc/unblock.dnsmasq
while read line || [ -n "$line" ]; do
[ -z "$line" ] && continue
[ "${line:0:1}" = "#" ] && continue
echo $line | grep -Eq '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' && continue
echo "ipset=/$line/unblock" >> /opt/etc/unblock.dnsmasq
done < /opt/etc/unblock.txt
Дайте права на исполнение:
chmod +x /opt/bin/unblock_dnsmasq.sh
Скрипт достаточно простой, вот суть его работы… Последовательно читаем строки из /opt/etc/unblock.txt. У прочитанных строк автоматически удалены пробелы и табуляция в начале и в конце. Пропускаем пустые строки. Пропускаем строки, которые начинают на #. Пропускаем строки, которые содержат IP-адрес (IP или CIDR), т.е. нас интересуют только строки с именами доменов. В файл /opt/etc/unblock.dnsmasq вносим строки вида «ipset=/доменное_имя/unblock». Это означает, что после определения IP-адресов конкретного домена они будут автоматически добавлены во множество unblock.
Обязательно запустите скрипт для генерация файла unblock.dnsmasq:
unblock_dnsmasq.sh
Проверьте, что файл unblock.dnsmasq создался:
cat /opt/etc/unblock.dnsmasq
7. Скрипт ручного принудительного обновления системы после редактирования списка доменов (unblock_update.sh)
Создайте скрипт /opt/bin/unblock_update.sh:
mcedit /opt/bin/unblock_update.sh
Вставьте (Shift+Insert) содержимое:
#!/bin/sh
ipset flush unblock
/opt/bin/unblock_ipset.sh
/opt/bin/unblock_dnsmasq.sh
restart_dhcpd
Дайте права на исполнение:
chmod +x /opt/bin/unblock_update.sh
8. Скрипт автоматического заполнения множества unblock при загрузке маршрутизатора (S99unblock)
Создайте скрипт /opt/etc/init.d/S99unblock:
mcedit /opt/etc/init.d/S99unblock
Вставьте (Shift+Insert) содержимое:
#!/bin/sh
[ "$1" != "start" ] && exit 0
/opt/bin/unblock_ipset.sh &
Дайте права на исполнение:
chmod +x /opt/etc/init.d/S99unblock
9. Перенаправление пакетов с адресатами из unblock в Tor (post_iptables_script.sh)
Откройте в редакторе файл /etc/storage/post_iptables_script.sh:
mcedit /etc/storage/post_iptables_script.sh
Добавьте в конце:
iptables -t nat -A PREROUTING -i br0 -p tcp -m set --match-set unblock dst -j REDIRECT --to-port 9141
При желании вы можете отредактировать файл post_iptables_script.sh через веб-интерфейс маршрутизатора — «Дополнительно» > «Персонализация» > «Скрипты» > «Выполнить после перезапуска правил брандмауэра». После редактирования нажмите «Применить».
В этот же файл вы можете добавить (это необязательно) перенаправление всех запросов на внешний порт 53 на себя. Это нужно, чтобы клиенты в локальной сети не использовали сторонние DNS-сервисы. Запросы будут идти через штатный DNS-сервер.
iptables -t nat -I PREROUTING -i br0 -p udp --dport 53 -j DNAT --to 192.168.0.1
iptables -t nat -I PREROUTING -i br0 -p tcp --dport 53 -j DNAT --to 192.168.0.1
Замените при необходимости 192.168.0.1 на внутренний адрес вашего маршрутизатора (LAN).
10. Подключение дополнительного конфигурационного файла к dnsmasq
Нам необходимо подключить созданный файл unblock.dnsmasq к dnsmasq. Для этого откройте в редакторе файл /etc/storage/dnsmasq/dnsmasq.conf:
mcedit /etc/storage/dnsmasq/dnsmasq.conf
Добавьте в конце:
conf-file=/opt/etc/unblock.dnsmasq
Если хотите (это необязательно), можете добавить дополнительный сервер для резолвинга и надёжности:
server=8.8.8.8
При желании вы можете отредактировать файл dnsmasq.conf через веб-интерфейс маршрутизатора — «Дополнительно» > «LAN» > «DHCP-сервер» > «Пользовательский файл конфигурации dnsmasq.conf». После редактирования нажмите «Применить».
11. Добавление задачи в cron для периодического обновления содержимого множества unblock
Это дополнительная страховка на тот случай, если программы/устройства используют свой собственный метод резолвинга, а IP-адрес домена изменился. Всё, что нужно сделать, это с желаемой периодичностью запускать скрипт unblock_ipset.sh. Для примера будем запускать каждый день в 6 утра.
Замените в файле конфигурации cron имя root на admin:
sed -i 's/root/admin/g' /opt/etc/crontab
Откройте в редакторе файл /opt/etc/crontab:
mcedit /opt/etc/crontab
Добавьте в конце:
00 06 * * * admin /opt/bin/unblock_ipset.sh
При желании вы можете закомментировать все остальные шаблонные задачи. Вот, как будет выглядеть ваш файл crontab:
12. Перезагрузка маршрутизатора
Выполните команду:
reboot
После перезагрузки откройте в браузере сайт check.torproject.org (он должен быть добавлен в unblock.txt). Если вы всё сделали верно, то вы увидите:
Настройка маршрутизатора с 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». Если после этого не появляется, то пробуйте без него.
Для тестов я использовал Keenetic Ultra (KN-1810) с самой свежей прошивкой — 2.14.C.0.0-4.
Важное замечание. Вам придётся отключить штатный DNS-сервер в системе, мы будем использовать dnsmasq вместо него. Вы потеряете возможность назначать DNS-сервисы (Яндекс.DNS/SkyDNS/AdGuard DNS) индивидуально для клиентов, но без проблем сможете использовать их глобально через настройки dnsmasq при необходимости.
1. Установка необходимого ПО на маршрутизаторе
opkg update
opkg install mc tor tor-geoip bind-dig cron dnsmasq-full ipset iptables
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 она есть):
ipset create test hash:net
Если команда никаких ошибок и сообщений не выдала, значит поддержка есть, и просто следуйте инструкции дальше. В противном случае (есть ошибка) в следующем скрипте вам нужно заменить hash:net на hash:ip. При этом вы потеряете возможность разблокировки по CIDR.
Создайте пустое множество адресов с именем unblock при загрузке маршрутизатора. Для этого создайте файл /opt/etc/ndm/fs.d/100-ipset.sh:
mcedit /opt/etc/ndm/fs.d/100-ipset.sh
Вставьте (Shift+Insert) содержимое:
#!/bin/sh
[ "$1" != "start" ] && exit 0
ipset create unblock hash:net
exit 0
Чтобы вставить из буфера, используйте Shift+Insert, сохранить — F2, выйти — F10.
Дайте права на исполнение:
chmod +x /opt/etc/ndm/fs.d/100-ipset.sh
3. Настройка Tor
Удалите содержимое конфигурационного файла Tor:
cat /dev/null > /opt/etc/tor/torrc
Откройте файл конфигурации Tor:
mcedit /opt/etc/tor/torrc
Вставьте (Shift+Insert) содержимое:
User root
PidFile /opt/var/run/tor.pid
ExcludeExitNodes {RU},{UA},{AM},{KG},{BY}
StrictNodes 1
TransPort 192.168.0.1:9141
ExitRelay 0
ExitPolicy reject *:*
ExitPolicy reject6 *:*
GeoIPFile /opt/share/tor/geoip
GeoIPv6File /opt/share/tor/geoip6
DataDirectory /opt/var/lib/tor
Замените при необходимости 192.168.0.1 на внутренний адрес вашего маршрутизатора (LAN). Краткое описание конфигурации:
- Исключить выходные узлы: Россия, Украина, Армения Киргизия, Беларусь.
- Повесить «прозрачный» прокси на адрес 192.168.0.1, порт 9141.
- Запретить быть точкой выхода.
4. Список доменов (и не только) для обхода блокировки (unblock.txt)
unblock.txt — простой список для разблокировки. Вы можете разблокировать домен, IP-адрес или CIDR. Одна строка — один элемент. Пустые строки (в том числе с пробелами и табуляциями) игнорируются. Можно использовать символ # в начале строки для игнорирования.
Создайте файл /opt/etc/unblock.txt:
mcedit /opt/etc/unblock.txt
Каждая строка может содержать доменное имя, IP-адрес или CIDR. Можно использовать символ # для комментирования строк.
###Торрент-трекеры
rutracker.org
rutor.info
rutor.is
mega-tor.org
kinozal.tv
nnm-club.me
nnm-club.ws
tfile.me
tfile-home.org
tfile1.cc
megapeer.org
megapeer.ru
tapochek.net
tparser.org
rustorka.com
uniongang.tv
fast-torrent.ru
#Каталоги медиаконтента для программ
hdrezka.ag
hdrezka.me
filmix.co
filmix.cc
###Книги
lib.rus.ec
flisland.net
flibusta.site
###Телеграм
telegram.org
web.telegram.org
desktop.telegram.org
tdesktop.com
updates.tdesktop.com
venus.web.telegram.org
flora.web.telegram.org
vesta.web.telegram.org
pluto.web.telegram.org
aurora.web.telegram.org
###Разное
edem.tv
crimerussia.com
4pna.com
2019.vote
###Проверка Tor
check.torproject.org
###Пример разблокировки по IP (убрать # в начале строки)
#195.82.146.214
###Пример разблокировки по CIDR (убрать # в начале строки)
#103.21.244.0/22
5. Скрипт для заполнения множества unblock IP-адресами заданного списка доменов (unblock_ipset.sh)
Создайте скрипт /opt/bin/unblock_ipset.sh:
mcedit /opt/bin/unblock_ipset.sh
Вставьте (Shift+Insert) содержимое:
#!/bin/sh
until ADDRS=$(dig +short google.com @localhost) && [ -n "$ADDRS" ] > /dev/null 2>&1; do sleep 5; done
while read line || [ -n "$line" ]; do
[ -z "$line" ] && continue
[ "${line:0:1}" = "#" ] && continue
echo $line | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/[0-9]{1,2}' | awk '{system("ipset -exist add unblock "$1)}'
dig +short $line @localhost | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | awk '{system("ipset -exist add unblock "$1)}'
done < /opt/etc/unblock.txt
Дайте права на исполнение:
chmod +x /opt/bin/unblock_ipset.sh
Скрипт достаточно простой. Ждём, когда заработает резолвинг домена google.com (если этого не сделать, то при загрузке маршрутизатора не будет заполнено множество unblock, т.к. маршрутизатор будет находиться ещё в процессе инициализации). Читаем строки в файле unblock.txt. У прочитанных строк автоматически удалены пробелы и табуляция в начале и в конце. Пропускаем пустые строки. Пропускаем строки, которые начинают на символ #. Ищем в строке CIDR. Если CIDR найден, то добавляем его в unblock. Резолвим строку через dig. Все IP-адреса результата добавляем в unblock.
Если строка является CIDR (мы её уже внесли в unblock), то dig выдаст нулевой результат.
Если строка является IP-адресом, то dig выдаст этот же IP-адрес, и мы его добавим в unblock.
6. Скрипт для формирования дополнительного конфигурационного файла dnsmasq из заданного списка доменов (unblock_dnsmasq.sh)
Создайте скрипт /opt/bin/unblock_dnsmasq.sh:
mcedit /opt/bin/unblock_dnsmasq.sh
Вставьте (Shift+Insert) содержимое:
#!/bin/sh
cat /dev/null > /opt/etc/unblock.dnsmasq
while read line || [ -n "$line" ]; do
[ -z "$line" ] && continue
[ "${line:0:1}" = "#" ] && continue
echo $line | grep -Eq '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' && continue
echo "ipset=/$line/unblock" >> /opt/etc/unblock.dnsmasq
done < /opt/etc/unblock.txt
Дайте права на исполнение:
chmod +x /opt/bin/unblock_dnsmasq.sh
Скрипт достаточно простой. Последовательно читаем строки из /opt/etc/unblock.txt. У прочитанных строк автоматически удалены пробелы и табуляция в начале и в конце. Пропускаем пустые строки. Пропускаем строки, которые начинают на #. Пропускаем строки, которые содержат IP-адрес (IP или CIDR), т.е. нас интересуют только строки с именами доменов. В файл /opt/etc/unblock.dnsmasq вносим строки вида «ipset=/доменное_имя/unblock». Это означает, что после определения IP-адресов конкретного домена они будут автоматически добавлены во множество unblock.
Обязательно запустите скрипт для генерация файла unblock.dnsmasq:
unblock_dnsmasq.sh
Проверьте, что файл unblock.dnsmasq создался:
cat /opt/etc/unblock.dnsmasq
7. Скрипт ручного принудительного обновления системы после редактирования списка доменов (unblock_update.sh)
Создайте скрипт /opt/bin/unblock_update.sh:
mcedit /opt/bin/unblock_update.sh
Вставьте (Shift+Insert) содержимое:
#!/bin/sh
ipset flush unblock
/opt/bin/unblock_ipset.sh
/opt/bin/unblock_dnsmasq.sh
/opt/etc/init.d/S56dnsmasq restart
Дайте права на исполнение:
chmod +x /opt/bin/unblock_update.sh
8. Скрипт автоматического заполнения множества unblock при загрузке маршрутизатора (S99unblock)
Создайте скрипт /opt/etc/init.d/S99unblock:
mcedit /opt/etc/init.d/S99unblock
Вставьте (Shift+Insert) содержимое:
#!/bin/sh
[ "$1" != "start" ] && exit 0
/opt/bin/unblock_ipset.sh &
Дайте права на исполнение:
chmod +x /opt/etc/init.d/S99unblock
9. Перенаправление пакетов с адресатами из unblock в Tor (100-redirect.sh)
Для этого создайте файл /opt/etc/ndm/netfilter.d/100-redirect.sh:
mcedit /opt/etc/ndm/netfilter.d/100-redirect.sh
Вставьте (Shift+Insert) содержимое:
#!/bin/sh
[ "$type" == "ip6tables" ] && exit 0
[ -z "$(iptables -t nat -L | grep unblock)" ] || exit 0
iptables -w -t nat -A PREROUTING -i br0 -p tcp -m set --match-set unblock dst -j REDIRECT --to-port 9141
exit 0
В этот же файл вы можете добавить (это необязательно) перенаправление всех запросов на внешний порт 53 на себя. Это нужно, чтобы клиенты в локальной сети не использовали сторонние DNS-сервисы. Запросы будут идти через штатный DNS-сервер.
iptables -w -t nat -I PREROUTING -i br0 -p udp --dport 53 -j DNAT --to 192.168.0.1
iptables -w -t nat -I PREROUTING -i br0 -p tcp --dport 53 -j DNAT --to 192.168.0.1
Замените при необходимости 192.168.0.1 на внутренний адрес вашего маршрутизатора (LAN).
Дайте права на исполнение:
chmod +x /opt/etc/ndm/netfilter.d/100-redirect.sh
10. Настройка dnsmasq и подключение дополнительного конфигурационного файла к dnsmasq
Удалите содержимое конфигурационного файла dnsmasq:
cat /dev/null > /opt/etc/dnsmasq.conf
Откройте файл конфигурации dnsmasq:
mcedit /opt/etc/dnsmasq.conf
Вставьте (Shift+Insert) содержимое:
user=nobody
resolv-file=/etc/resolv.conf
no-poll
bogus-priv
no-negcache
clear-on-reload
bind-dynamic
listen-address=192.168.0.1
listen-address=127.0.0.1
min-port=4096
cache-size=1536
expand-hosts
log-facility=/dev/null
log-async
conf-file=/opt/etc/unblock.dnsmasq
server=8.8.8.8
Замените при необходимости 192.168.0.1 на внутренний адрес вашего маршрутизатора (LAN).
11. Добавление задачи в cron для периодического обновления содержимого множества unblock
Это дополнительная страховка на тот случай, если программы/устройства используют свой собственный метод резолвинга, а IP-адрес домена изменился. Всё, что нужно сделать, это с желаемой периодичностью запускать скрипт unblock_ipset.sh. Для примера будем запускать каждый день в 6 утра.
Откройте в редакторе файл /opt/etc/crontab:
mcedit /opt/etc/crontab
Добавьте в конце:
00 06 * * * root /opt/bin/unblock_ipset.sh
При желании вы можете закомментировать все остальные шаблонные задачи. Вот, как будет выглядеть ваш файл crontab:
12. Отключение штатного DNS-сервера и перезагрузка маршрутизатора
Подключитесь к CLI маршрутизатора Keenetic (порт 23 для Telnet и 22 для SSH, если в системе добавлен компонент «Сервер SSH»).
Выполните команду:
opkg dns-override
system configuration save
system reboot
Встроенный в прошивку DNS-сервер будет выключен, и вместо него будет использоваться dnsmasq из состава Entware. Маршрутизатор при загрузке проверяет, подмонтирована ли папка opt (есть ли флешка/диск с Entware). Если есть, то штатный DNS-сервер не используется. Если нет, используется. Т.е. вынув флешку и перезагрузив маршрутизатор, у вас всё будет работать, как и раньше (перед настройкой).
После перезагрузки откройте в браузере сайт check.torproject.org (он должен быть добавлен в unblock.txt). Если вы всё сделали верно, то вы увидите:
Основные методы диагностики ошибок после настройки
Если после настройки что-то работает не так, как нужно, используйте простые команды для определения проблемного этапа.
Отобразите содержимое множества unblock:
ipset list unblock
Если система сообщит, что такого множества нет, то ошибка на этапе 2 или вы не включили модуль Netfilter в системе (в случае с Keenetic).
Если множество окажется пустым, то не отработал скрипт unblock_ipset.sh, который в свою очередь должен быть запущен стартовым скриптом S99unblock. Запустите этот скрипт unblock_ipset.sh вручную. Если множество заполнилось, то ошибка на этапе 8. Если скрипт не может выполниться (скорее всего, ожидает резолвинга google.com), то ошибка где-то на стороне DNS-сервера, возможно, на этапе 10 или 6.
Проверьте наличие редиректа в iptables:
iptables-save | grep unblock
Если его нет, то ошибка на этапе 9.
Если все сайты из unblock.txt не работают (превышено время ожидания), но все другие работают, то проблема где-то на стороне Tor, ошибка на этапе 3.
Если проверка с сайтом check.torproject.org (он должен быть добавлен в unblock.txt) проходит, но для других ресурсов продолжает открываться заглушка от провайдера, скорее всего, провайдер вмешивается в DNS-трафик, подменяя ответы.
Дополнительный обход фильтрации DNS-запросов провайдером
Если провайдер вмешивается в DNS-трафик, подменяя ответы для заблокированных ресурсов, это очень просто обойти. Для этого мы будем использовать dnscrypt-proxy. dnscrypt будет использоваться только для тех доменов, которые перечислены в unblock.txt. Все остальные запросы будут идти через штатные DNS-серверы.
Если вы уверены, что ваш провайдер не фильтрует DNS-запросы, то эту дополнительную настройку делать не нужно.
У вас уже должен быть настроен описанный выше обход блокировок. Нижеследующие настройки идентичны для Padavan и Keenetic OS.
Установите дополнительное ПО на маршрутизаторе:
opkg update
opkg install dnscrypt-proxy2
Откройте файл конфигурации dnscrypt-proxy:
mcedit /opt/etc/dnscrypt-proxy.toml
Найдите параметры listen_addresses, fallback_resolver, cache и измените их:
listen_addresses = ['127.0.0.1:9153']
fallback_resolver = '77.88.8.8:1253'
cache = false
77.88.8.8:1253 — это адрес DNS-сервера Яндекс с нестандартным портом. Он является резервным на тот случай, если у dnscrypt-proxy возникнут какие-то проблемы.
Запустите dnscrypt-proxy:
/opt/etc/init.d/S09dnscrypt-proxy2 start
Убедитесь, что dnscrypt-proxy работает (вы должны в ответ увидеть список IP-адресов):
dig +short google.com @localhost -p 9153
Откройте в редакторе скрипт /opt/bin/unblock_ipset.sh:
mcedit /opt/bin/unblock_ipset.sh
Замените содержимое на:
#!/bin/sh
until ADDRS=$(dig +short google.com @localhost -p 9153) && [ -n "$ADDRS" ] > /dev/null 2>&1; do sleep 5; done
while read line || [ -n "$line" ]; do
[ -z "$line" ] && continue
[ "${line:0:1}" = "#" ] && continue
echo $line | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/[0-9]{1,2}' | awk '{system("ipset -exist add unblock "$1)}'
dig +short $line @localhost -p 9153 | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | awk '{system("ipset -exist add unblock "$1)}'
done < /opt/etc/unblock.txt
Мы внесли небольшое изменение — теперь dig для резолвинга использует не штатный DNS-сервер, а dnscrypt-proxy с портом 9153.
Откройте в редакторе скрипт /opt/bin/unblock_dnsmasq.sh:
mcedit /opt/bin/unblock_dnsmasq.sh
Замените содержимое на:
#!/bin/sh
cat /dev/null > /opt/etc/unblock.dnsmasq
while read line || [ -n "$line" ]; do
[ -z "$line" ] && continue
[ "${line:0:1}" = "#" ] && continue
echo $line | grep -Eq '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' && continue
echo "ipset=/$line/unblock" >> /opt/etc/unblock.dnsmasq
echo "server=/$line/127.0.0.1#9153" >> /opt/etc/unblock.dnsmasq
done < /opt/etc/unblock.txt
Мы внесли небольшое изменение — теперь при генерации файла unblock.dnsmasq дополнительно вносятся строки вида «server=/доменное_имя/127.0.0.1#9153». Это означает, что резолвинг доменов из списка будет происходить через dnscrypt-proxy.
Выполните unblock_update.sh:
unblock_update.sh
Готово. Все сложные настройки позади. Теперь вы будете только редактировать список unblock.txt при необходимости, добавляя или удаляя из него домены или IP-адреса для разблокировки, и командой unblock_update.sh активировать внесённые изменения.
Например, разблокировали торрент-трекеры и спокойно смотрите торренты напрямую на вашем любимом Android-боксе:
Дополнительная информация для тех, кто хочет блокировать рекламные домены на маршрутизаторе, в этом комментарии. Для тех, кто хочет использовать dnscrypt в качестве основного резолвера для всех доменов, в этом комментарии.
Комментарии (43)
rostislav-zp
04.01.2019 09:06А настройку блокировки рекламы не пробовали? сколько ни пытался-то вообще пропадает интернет, то ничего не блокирует.приходится pi-hole+vpn использовать. Прошивал падаван на xiaomi mi router, который с четырьмя антенами. Уже около года работает. Из всех моих роутеров, доволен этим больше всего
Kyrie1965 Автор
04.01.2019 10:57А что её пробовать? Берёте и блокируете. Самый идеальный вариант через дополнения для бразузере, в этом случае охватываются все нюансы и особенности, т.к. у блокировщика есть доступ к содержимому сайта. Если хотите на стороне маршрутизатора, то, применительно инструкции, на этапе 10 (редактирование конфигурационного файла dnsmasq) добавляете:
no-resolv
server=176.103.130.130
server=176.103.130.131
Удаляете все другие записи server в файле, если они есть. Всё. В роли серверов DNS будет использоваться AdGuard DNS с блокировокой рекламы.ValdikSS
04.01.2019 15:36+1Зачем использовать сторонние DNS, блокирующие рекламу, когда можно сделать то же самое локально, буквально одной строкой?
curl --compressed https://cdn.raletag.gq/rueasyhosts.txt https://adaway.org/hosts.txt | awk '{sub("\r$", ""); sub("^www\\.", "", $2); if ($0 && $0 !~ /^#/ && $2 && $2 !~ /^$/ && $2 != "localhost") print "server=/." $2 "/";}' | sort -u > /etc/dnsmasq-adblock-list.conf
Kyrie1965 Автор
06.01.2019 16:21Спасибо.
Вот вариант для тех, кто действует по инструкции из статьи (единый вариант для Padavan и Keenetic OS)Выполните команды:
opkg update opkg install curl ca-certificates ca-bundle touch /opt/etc/adblock.dnsmasq
В 10-м шаге инструкции (уже после того, как вы проделаете все действия по инструкции и у вас всё работает, как нужно) добавьте в конфигурационный файл dnsmasq.conf строку:
conf-file=/opt/etc/adblock.dnsmasq
Создайте скрипт adblock_update.sh:
mcedit /opt/bin/adblock_update.sh
Вставьте (Shift+Insert) содержимое:
#!/bin/sh curl --compressed https://cdn.raletag.gq/rueasyhosts.txt https://adaway.org/hosts.txt | awk '{sub("\r$", ""); sub("^www\\.", "", $2); if ($0 && $0 !~ /^#/ && $2 && $2 !~ /^$/ && $2 != "localhost") print "server=/." $2 "/";}' | sort -u > /opt/etc/adblock.dnsmasq if [ ! -e "/opt/etc/init.d/S56dnsmasq" ]; then restart_dhcpd else /opt/etc/init.d/S56dnsmasq restart fi
Дайте права на исполнение:
chmod +x /opt/bin/adblock_update.sh
Запустите скрипт adblock_update.sh (вы можете запускать его при необходимости обновления списка доменов с рекламой):
adblock_update.sh
Чтобы отключить блокировку рекламных доменов, удалите строку conf-file=/opt/etc/adblock.dnsmasq из dnsmasq.conf.jryj
06.01.2019 20:44Я же правильно понимаю, что сайты из списка: /opt/etc/adblock.dnsmasq не должны открываться?
Kyrie1965 Автор
06.01.2019 21:11Всё верно. Они перестанут работать (не будут резолвиться на стороне клиентов), как и реклама, которая на них ссылается.
Тут нужно быть аккуратным, потому что список рубит лишнее, и что-то нужное может перестать работать. Например, у меня kinozal.tv отвалился с таким подходом.
Renaissance
04.01.2019 12:05Немного личной практики, если кому интересно:
перепробовал множество вариантов обхода блокировок прямо на маршрутизаторе, но в итоге остановился на варианте Shadowsocks на конечных устройствах. Весь трафик по умолчанию в браузере гоняю через SS, а исключения контролируются через расширение SwitchyOmega. На смартфонах SS тоже настроен и включается в случае необходимости, оно просто работает и удобно вполне.
В случае, если чему-то кроме браузера требуется доступ к заблокированным ресурсам, в SS просто включается режим System Proxy и можно спокойно работать дальше.
В итоге, получил 2-в-1: обход блокировок и хотя бы какая-то «анонимность» в сети.
Точечный обход для себя я признал малоэффективным и слишком затратным по соотношению к результату.ClearAirTurbulence
04.01.2019 13:12Красота! Теперь такое же для микротика )
Renaissance
04.01.2019 13:21Подобное уже было для MikroTik: habr.com/post/413049
P.S. Я так понял, кто-то промахнулся веткой для ответа.
Но если все же речь идет о Shadowsocks для RouterOS, то увы, его нет.
Единственный вариант (как я и сделал) — сменить прошивку на LEDE/OpenWrt 18, там есть поддержка SS.
Kyrie1965 Автор
04.01.2019 17:36Случайно нажал «Отклонить» на комментарии человека (автоматом воспринял кнопку, как «Ответить»). Прошу прощения у него.
У него всё заработло на Padavan, но был вопрос относительно dnscrypt-proxy2 — его нет в Entware. В чём дело?
У вас используется старая версия Entware-ng, в которой пакеты и их список уже не обновляются. И пакета dnscrypt-proxy2 там нет (только первая версия). Вам нужно обновить прошивку до последней (Entware-ng было переключено на Entware в прошивке от 10.05.2018, commit 8ec3a10) и заново настроить Entware, удалив предыдущую установку Entware-ng. Пакет dnscrypt-proxy2 появится.ATmegAdriVeR
04.01.2019 17:47Спасибо, это я писал)
Прошивку, видимо, руками нужно собирать обновлённую?
У Padavan-а на официальной странице последнее обновление аж в 2016.
https://bitbucket.org/padavan/rt-n56u/wiki/HomeKyrie1965 Автор
04.01.2019 17:51Самая свежая версия от 05.11.2018 (commit 32a93db). Установка стандартная — запускаете PROMETHEUS, обновляете исходный код, собираете прошивку и устанавливаете её. Буквально несколько кликов и минуту времени (не считая несколько десятков минут, зависящие от мощности вашего компьютера, которые будут потрачены на компиляцию прошивки). Всё очень просто.
Затем форматируете (чтобы избавиться от старой версии Entware-ng) раздел/диск/внутреннюю память под Entware для установки свежей версии.ATmegAdriVeR
05.01.2019 20:21Спасибо, получилось, правда, не за 10 минут)
Возможно, стоит добавить ссылку на процедуры сборки прошивки в статью? Или указать, что работа с dnscrypt-proxy2 возможно только на свежесобранных образах.
Вопрос не по теме — подскажите, пожалуйста, где поискать скрипт автоматического переключения между Wi-Fi сетями в режиме AP-Client (WISP)? Нашёл множество статей по автоматическому переключению между WAN<->3G модемом, а по перебору Wi-Fi сетей ничего толкового нет.Kyrie1965 Автор
05.01.2019 20:39Тема прошивки Padavan очень обширная, ещё есть особенности на разных устройствах, ещё есть особенности ранних версий. Все это напрямую не относится к самой статье. Тема Keenetic тоже обширная, и тоже в своё время была поддержка Entware-ng (и остаётся без переустановки). В общем, достаточно знать, что на свежих прошивках обоих типов устройств всё отрабатывается по инструкции идеально. Кто захочет, найдёт упоминание тут в комментариях.
По второму вопросу не подскажу.
dartraiden
05.01.2019 00:00Самая свежая версия от 05.11.2018 (commit 32a93db).
Если хочется ещё свежее — есть форк. Там обновлён некоторый софт, добавлена поддержка SMB 3, исправлены некоторые мелкие ошибки…
Собирается всё тем же PROMETHEUS, только тестовой версией и на свежих дистрибутивах Linux, в отличие от Padavan.
Bonio
04.01.2019 18:58Слишком геморойно вручную списки наполнять, да и в текущих условиях полезнее весь трафик через vpn пропускать, а белые списки делать не для заблокированных ресурсов, а для тех, куда надо получать доступ напрямую через провайдера. Я так и сделал. Pfsense позволяет все это настроить вообще не заглядывая в консоль, но такие игрушечные роутеры для этого уже не подойдут, нужно железо посерьезнее.
dartraiden
04.01.2019 19:54Ещё стоит как-то обрабатывать обращения к адресам из заблокированных диапазонов. Это уберёт приличное количество случаев «домен не числится в реестре, но заблокирован».
Но всё чаще я натыкаюсь на ситуации, когда провайдер, не умеющий обнюхать HTTPS и прочитать в SNI, на какой домен обращается пользователь, рубит все HTTPS-соединения на IP-адрес, на котором кроме «запрещёнки» висит и непричастный ресурс. Руками добавлять откровенно лень, видимо, пора полностью обернуться в VPN.
Сейчас у меня комбинированная схема: заблокированные ресурсы пущены через VPN, заблокированные «за компанию» — через Tor, поднятый там же, на роутере, а реклама режется с помощью dnsmasq, список рекламных доменов формируется громадным bash-скриптом, который я всё никак не дополирую.rostislav-zp
05.01.2019 02:20А на скрипт как-то можно взглянуть? сколько ни читал мануалов, не подтягиваются списки блокировки.точнее роутер их качает, но не видит что блокировать. Кстати насчет списков есть очень толковый ресурс- tspprs.com
dartraiden
05.01.2019 04:08Скриптsleep 9 PATH=/opt/sbin:/opt/bin:/opt/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin # 0.0.0.0 is defined as a non-routable meta-address used to designate an invalid, unknown, or non applicable target. Using 0.0.0.0 is empirically faster, possibly because there's no wait for a timeout resolution ENDPOINT_IP4=0.0.0.0 # Download and process the files needed to make the lists (enable/add more, if you want) # broad blocklist wget -qO- "https://www.mvps.org/winhelp2002/hosts.txt" | awk -v r="$ENDPOINT_IP4" '{sub(/^0.0.0.0/, r)} $0 ~ "^"r' > /tmp/block.build.list # focus on ad related domains wget -qO- "https://pgl.yoyo.org/as/serverlist.php?hostformat=hosts&showintro=1&mimetype=plaintext" | awk -v r="$ENDPOINT_IP4" '{sub(/^127.0.0.1/, r)} $0 ~ "^"r' >> /tmp/block.build.list # focus on malware wget -qO- "https://www.malwaredomainlist.com/hostslist/hosts.txt" | awk -v r="$ENDPOINT_IP4" '{sub(/^127.0.0.1/, r)} $0 ~ "^"r' >> /tmp/block.build.list # focus on mobile ads wget -qO- "https://adaway.org/hosts.txt" | awk -v r="$ENDPOINT_IP4" '{sub(/^127.0.0.1/, r)} $0 ~ "^"r' >> /tmp/block.build.list # broad blocklist wget -qO- "https://someonewhocares.org/hosts/hosts" | awk -v r="$ENDPOINT_IP4" '{sub(/^127.0.0.1/, r)} $0 ~ "^"r' >> /tmp/block.build.list # focus on malicious bitcoin mining sites wget -qO- "https://raw.githubusercontent.com/hoshsadiq/adblock-nocoin-list/master/hosts.txt" | awk -v r="$ENDPOINT_IP4" '{sub(/^0.0.0.0/, r)} $0 ~ "^"r' >> /tmp/block.build.list # focus on zeus botnet by abuse.ch wget -qO- "https://zeustracker.abuse.ch/blocklist.php?download=hostfile" | awk -v r="$ENDPOINT_IP4" '{sub(/^127.0.0.1/, r)} $0 ~ "^"r' >> /tmp/block.build.list # focus on malware wget -qO- "https://mirror1.malwaredomains.com/files/justdomains" | grep -v -e ^# -e ^$ | awk -v r="$ENDPOINT_IP4 " '{sub(//, r)} $0 ~ "^"r' >> /tmp/block.build.list # focus on malvertising by disconnect.me wget -qO- "https://s3.amazonaws.com/lists.disconnect.me/simple_malvertising.txt" | grep -v -e ^# -e ^$ | awk -v r="$ENDPOINT_IP4 " '{sub(//, r)} $0 ~ "^"r' >> /tmp/block.build.list # focus on ad by disconnect.me wget -qO- "https://s3.amazonaws.com/lists.disconnect.me/simple_ad.txt" | grep -v -e ^# -e ^$ | awk -v r="$ENDPOINT_IP4 " '{sub(//, r)} $0 ~ "^"r' >> /tmp/block.build.list # focus on tracking by disconnect.me (Last-Modified: 31 Jul 2015) # wget -qO- "https://s3.amazonaws.com/lists.disconnect.me/simple_tracking.txt" | grep -v -e ^# -e ^$ | awk -v r="$ENDPOINT_IP4 " '{sub(//, r)} $0 ~ "^"r' >> /tmp/block.build.list # focus on ransomware by abuse.ch wget -qO- "https://ransomwaretracker.abuse.ch/downloads/RW_DOMBL.txt" | grep -v -e ^# -e ^$ | awk -v r="$ENDPOINT_IP4 " '{sub(//, r)} $0 ~ "^"r' >> /tmp/block.build.list # focus on sites which have used DMCA takedowns to force removal from other blacklists (Last-Modified: 20 Aug 2017) # wget -qO- "https://ssl.bblck.me/blacklists/domain-list.txt" | grep -v -e ^# -e ^$ | awk -v r="$ENDPOINT_IP4 " '{sub(//, r)} $0 ~ "^"r' >> /tmp/block.build.list # generic blocklist, fewer false positives down to the low sensitivity list with more false positives wget -qO- "https://dshield.org/feeds/suspiciousdomains_High.txt" | grep -v -e ^# -e ^$ | awk -v r="$ENDPOINT_IP4 " '{sub(//, r)} $0 ~ "^"r' >> /tmp/block.build.list # focus on ad related domains (Last-Modified: 14 Feb 2018) # wget -qO- "https://hostsfile.mine.nu/Hosts" | awk -v r="$ENDPOINT_IP4" '{sub(/^127.0.0.1/, r)} $0 ~ "^"r' >> /tmp/block.build.list # broad blocklist # wget -qO- "https://hosts-file.net/ad_servers.txt" | awk -v r="$ENDPOINT_IP4" '{sub(/^127.0.0.1/, r)} $0 ~ "^"r' >> /tmp/block.build.list # broad blocklist (Last-Modified: 18 Mar 2018) # wget -qO- "http://sysctl.org/cameleon/hosts" | awk -v r="$ENDPOINT_IP4" '{sub(/^127.0.0.1/, r)} $0 ~ "^"r' >> /tmp/block.build.list # generic blocklist # wget -qO- "https://dshield.org/feeds/suspiciousdomains_Medium.txt" | grep -v -e ^# -e ^$ | awk -v r="$ENDPOINT_IP4 " '{sub(//, r)} $0 ~ "^"r' >> /tmp/block.build.list # generic blocklist # wget -qO- "https://dshield.org/feeds/suspiciousdomains_Low.txt" | grep -v -e ^# -e ^$ | awk -v r="$ENDPOINT_IP4 " '{sub(//, r)} $0 ~ "^"r' >> /tmp/block.build.list # focus on feodo botnet # wget -qO- "https://feodotracker.abuse.ch/blocklist/?download=domainblocklist" | grep -v -e ^# -e ^$ | awk -v r="$ENDPOINT_IP4 " '{sub(//, r)} $0 ~ "^"r' >> /tmp/block.build.list # generic blocklist (Last-Modified: 15 Apr 2018) # wget -qO- "https://raw.githubusercontent.com/Dawsey21/Lists/master/main-blacklist.txt" | grep -v -e ^# -e ^$ | awk -v r="$ENDPOINT_IP4 " '{sub(//, r)} $0 ~ "^"r' >> /tmp/block.build.list # focus on windows telemetry domains # wget -qO- "https://raw.githubusercontent.com/crazy-max/WindowsSpyBlocker/master/data/hosts/spy.txt" | awk -v r="$ENDPOINT_IP4" '{sub(/^0.0.0.0/, r)} $0 ~ "^"r' >> /tmp/block.build.list # focus on malware by disconnect.me # wget -qO- "https://s3.amazonaws.com/lists.disconnect.me/simple_malware.txt" | grep -v -e ^# -e ^$ | awk -v r="$ENDPOINT_IP4 " '{sub(//, r)} $0 ~ "^"r' >> /tmp/block.build.list # focus on intrusive online consultants and callback widgets # wget -qO- "https://raw.githubusercontent.com/pafnuty/onlineConsultantBlocker/master/hosts" | awk -v r="$ENDPOINT_IP4" '{sub(/^0.0.0.0/, r)} $0 ~ "^"r' >> /tmp/block.build.list # focus on malicious bitcoin mining sites # wget -qO- "https://raw.githubusercontent.com/greatis/Anti-WebMiner/master/hosts" | awk -v r="$ENDPOINT_IP4" '{sub(/^0.0.0.0/, r)} $0 ~ "^"r' >> /tmp/block.build.list # focus on dead websites (against typos in URLs) # wget -qO- "https://raw.githubusercontent.com/FadeMind/hosts.extras/master/add.Dead/hosts" | awk -v r="$ENDPOINT_IP4" '{sub(/^0.0.0.0/, r)} $0 ~ "^"r' >> /tmp/block.build.list # focus on spam # wget -qO- "https://raw.githubusercontent.com/FadeMind/hosts.extras/master/add.Spam/hosts" | awk -v r="$ENDPOINT_IP4" '{sub(/^0.0.0.0/, r)} $0 ~ "^"r' >> /tmp/block.build.list # focus on malicious bitcoin mining sites # wget -qO- "https://gitlab.com/ZeroDot1/CoinBlockerLists/raw/master/hosts" | awk -v r="$ENDPOINT_IP4" '{sub(/^0.0.0.0/, r)} $0 ~ "^"r' >> /tmp/block.build.list # broad blocklist # wget -qO- "https://raw.githubusercontent.com/mitchellkrogza/Badd-Boyz-Hosts/master/hosts" | awk -v r="$ENDPOINT_IP4" '{sub(/^0.0.0.0/, r)} $0 ~ "^"r' >> /tmp/block.build.list # focus on ads and tracking domains # wget -qO- "https://raw.githubusercontent.com/lightswitch05/hosts/master/ads-and-tracking-extended.txt" | awk -v r="$ENDPOINT_IP4" '{sub(/^0.0.0.0/, r)} $0 ~ "^"r' >> /tmp/block.build.list # focus on Windows installers ads sources # wget -qO- "https://raw.githubusercontent.com/FadeMind/hosts.extras/master/UncheckyAds/hosts" | awk -v r="$ENDPOINT_IP4" '{sub(/^0.0.0.0/, r)} $0 ~ "^"r' >> /tmp/block.build.list # focus on 2o7 network tracking # wget -qO- "https://raw.githubusercontent.com/FadeMind/hosts.extras/master/add.2o7Net/hosts" | awk -v r="$ENDPOINT_IP4" '{sub(/^0.0.0.0/, r)} $0 ~ "^"r' >> /tmp/block.build.list # focus on 2o7 network tracking # wget -qO- "https://raw.githubusercontent.com/azet12/KADhosts/master/KADhosts.txt" | awk -v r="$ENDPOINT_IP4" '{sub(/^0.0.0.0/, r)} $0 ~ "^"r' >> /tmp/block.build.list # Add black list, if non-empty if [ -s "/etc/storage/black.list" ] then awk -v r="$ENDPOINT_IP4" '/^[^#]/ { print r,$1 }' /etc/storage/black.list >> /tmp/block.build.list fi # Sort the download/black lists awk '{sub(/\r$/,"");print $1,$2}' /tmp/block.build.list | sort -u > /tmp/block.build.before # Filter (if applicable) if [ -s "/etc/storage/white.list" ] then # Filter the blacklist, suppressing whitelist matches # This is relatively slow egrep -v "^[[:space:]]*$" /etc/storage/white.list | awk '/^[^#]/ {sub(/\r$/,"");print $1}' | grep -vf - /tmp/block.build.before > /tmp/block.hosts else cat /tmp/block.build.before > /tmp/block.hosts fi # Delete files used to build list to free up the limited space rm -f /tmp/block.build.list rm -f /tmp/block.build.before killall dnsmasq /usr/sbin/dnsmasq
valeramalko
05.01.2019 21:11спасибо все получилось, только на мобильном устройстве (android) при включенном на роутере ip v6 от провайдера, rutracker ни в какую не открывается, идет «заглушка» от провайдера, отключаю ip v6 — на мобильном начинает работать, (остальные из списка работают), на ПК все норм
Kyrie1965 Автор
05.01.2019 21:15Инструкция заточена под IPv4 (под IPv6 требуется доработка). У rutracker есть адрес IPv6 2a02:4680:22::214. Если обратиться к нему, то запрос пойдёт мимо обхода блокировок и будет заблокирован провайдером (если провайдер умеет блокировать IPv6).
snizovtsev
06.01.2019 01:45На Xiaomi R3G прекрасно работает OpenWrt, где всё вообще можно буквально мышкой настроить. В отличие от Padavan там используется свежее upstream ядро с нормально написанными драйверами, а не китайские утекшие поделки через ndiswrapper.
Kyrie1965 Автор
06.01.2019 02:01Расскажите, пожалуйста, как реализовать указанный в статье (или подобный) метод выборочного обхода блокировок «буквально мышкой» в OpenWrt.
snizovtsev
06.01.2019 11:41Поднимаете сервер с shadowsocks, устанавливаете OpenWrt (самая сложная часть), открываете 192.168.1.1, устанавливаете пакеты shadowsocks-libev-ss-redir и shadowsocks-libev-ss-rules, открываете вкладку Services->shadowsocks-libev, вводите адрес сервера и пароль, открываете вкладку "Redir rules", ставите политику "local-out default" в "checkdst", в destinantion settings заливаете файл со списком IP (можно с подсетями в формате ipset), dst default "bypass", для надёжности ставите галку в "forward recentrst" для автодобавления правил после получения нескольких TCP RST с одного адреса.
Готово, жмёте кнопку apply и радуетесь интернету.Kyrie1965 Автор
06.01.2019 12:45Если не учитывать, что это банальный ввод в заблуждение, аналогично, можно сказать, что обход блокировок делается в два клика не любом маршрутизаторе вообще — покупаете быстрый VPN-сервер и добавляете его в настройки маршрутизатора и гоните весь трафик через него — готово.
А что вы будете делать с сайтами, которые меняют свой IP (и вы их заведомо не знаете)?snizovtsev
06.01.2019 13:07Регулярно обновлять список IP, у LuCi (веб интерфейс OpenWrt) есть прекрасный API для всего, чего можно сделать "мышкой". Не вижу смысла резолвить баш скриптами на встроенной системе (роутере), когда это можно без ограничений на используемые инструменты делать на сервере (этакий SDN-way). Да и всё уже зарезолвили, конвертируйте из csv и пользуйтесь. Для пущей подстраховки есть автодобоваление айпишников в ipset по многократному tcp rst (что делают провайдеры для https).
Есть ещё вариант по публичным данным один раз в полгода генерировать таблицу всех нероссийских IP — в любом случае трафик пойдёт через европу, в азии мало полезного контента для нас. Скрипты есть на гитхабе.Kyrie1965 Автор
06.01.2019 13:28Т.е. это выльется в реальности в кучку скриптов и никаких «буквально настроить мышкой» там нет. В итоге, мы имеем, что человеку, у которого уже есть маршрутизатор Keenetic или с прошивкой Padavan, на свой маршрутизатор надо поставить OpenWrt, арендовать сервер с ежемесячной оплатой, настроить его, настроить маршрутизатора с OpwenWrt (по инструкции, которой по сути нет, при этом действий будет не меньше и не проще, чем описанное в статья, и не охватывает существенные частные случаи, т.к. из ваших же данных вы оперируете только IP, а не доменами, например нет внесения IP во множество при резолвинге). Вывод — ваши слова не соответствуют действительности, и OpenWrt никакой выгоды не несёт для конкретной реализации, описанной в статье (затрата большего количества усилий, времени, денег, и при этом получите результат по эффективности хуже или, как максимум, не лучше). Какое бы крутое ядро с upstream там не было, это не играет никакой роли для конкретной задачи. Скрипач не нужен.
snizovtsev
06.01.2019 13:57Для прокси достаточно самого слабого инстанса, который стоит копейки. И даже их можно без ущерба разделить на знакомых, есть даже готовый набор ansible рецептов для поднятие всех мыслимых сервисов сразу с порталом раздачи доступов для знакомых. У Tor низкая скорость и высокая задержка by design, для ежедневного неосознанного использования это не годится. Учитывая, что скоро гуглить придётся тоже через прокси для нормальной выдачи — tor не вариант. Кстати, как с ним рекапча дружит?
snizovtsev
06.01.2019 14:27Ах, да, совсем забыл. Китайцы уже давно придумали технические решения для автоматического распространения списков блокировки — гуглится по слову gfwlist. Например в клиенте shadowsocks для macos достаточно просто указать url, для openwrt наверняка тоже есть готовый пакет. Нужно просто нам тоже взять и адаптировать это к РКН.
jryj
06.01.2019 13:45А не подскажите, как сделать, что бы dnscrypt работал не только для адресов в unblock.txt, а вообще для всей системы?
Kyrie1965 Автор
06.01.2019 13:52После того, как настроите dnscrypt, выполните 10-й шаг настроек повторно. Только удалите поле «server=8.8.8.8» и добавьте:
no-resolv server=127.0.0.1#9153
Перезапустите dnsmasq.
На Padavan:
restart_dhcpd
На Keenetic:
/opt/etc/init.d/S56dnsmasq restart
dnsmasq начнёт использовать только dnscrypt для резолвинга.
epishman
Наркотики через Тор, даже не знаю… их же вылавливают пачками на контрольных закупках, особенно по тем адресам, что на заборах. А статья хорошая.