На просторах сети изложено немало способов, как можно обходить запрет доступа к интернет-ресурсам, попавшим под раздачу известного закона о бесконтрольных блокировках, прославившегося своей идиотичностью и тем, что малосознательные работники Роскомнадзора даже в нынешней его редакции не в состоянии выполнять его условия без безмерных злоупотреблений со своей стороны.
Итак, рассмотрим еще один вариант, не требующий никакого дополнительного софта, помимо роутера с OpenWrt. Одним из очевидных способов обхода блокировки с минимальным использованием сторонних средств является следующая система:
1. Перестаем использовать провайдерские DNS и переходим на свободные (напр., от Google: 8.8.8.8, 8.8.4.4);
2. Устанавливаем на роутере прокси-сервер (напр., tinyproxy);
3. Заворачиваем при помощи iptables все запросы к заблокированным ресурсам на прокси, выделяя такие запросы по целевому IP-адресу;
4. Задаем в конфиге прокси любой заграничный апстрим-прокси, на котором отсутствует блокировка.
Плюсы:
+ На прокси заворачиваются только обращения к заблокированным ресурсам, все остальные работают как раньше;
+ Не нужно вообще ничего настраивать на всех подключаемых к роутеру устройствах;
+ Мы лично всё контролируем. :)
Минусы:
– Неудобство по ручному составлению списка блокированных ресурсов;
– Неудобство поиска живых и достаточно быстрых апстрим-прокси;
– Необходимость установки лишнего софта на роутер и потенциально его частая перенастройка.
Для многих минусы значительно перевесят все возможные плюсы. Тем не менее рассмотрим, как реализовать изложенное и, кроме того, обойтись без установки собственного прокси на роутере.
Идея в том, что раз мы поднимаем у себя на роутере transparent-прокси и прозрачно заворачиваем на него часть трафика, чтобы затем переправить его на другой прокси в интернете, то можно задаться вопросом: а, собственно, зачем нам создавать каскад из прокси, если можно сразу найти внешние прокси-сервера, поддерживающие transparent-режим? Все, что потребуется – это отыскать таковой и сразу завернуть нужный трафик туда, без локального прокси-сервера.
Для того, чтобы немного автоматизировать настройку и добавить минимальных удобств, напишем скрипт:
#!/bin/ash ### # Erinome proxyPass v.1 ### proxy="1.1.1.1:23456" bhosts="188.190.124.85/32 185.10.208.40/32" enableProxy() { cleanRules for bhost in $bhosts do cmd="iptables -A prerouting_lan_rule -t nat -p tcp -d ${bhost} --dport 80 -m comment --comment "ErinomePP" -j DNAT --to-destination ${proxy}" echo $cmd; $cmd done } disableProxy() { cleanRules } cleanRules() { iptables -S prerouting_lan_rule -t nat | grep "comment ErinomePP" | while read iptfind do cmd="iptables -t nat -D `echo $iptfind | cut -d' ' -f2-`" echo $cmd; $cmd done } case "$1" in ena*) enableProxy ;; dis*) disableProxy ;; *) echo 'not recognized' ;; esac
В переменной “bhosts” должны быть перечислены заблокированные хосты, в переменной “proxy” – указан адрес и порт анонимного прокси-сервера с поддержкой transparent-режима. При внесении каких-либо изменений в список заблокированных хостов или при необходимости сменить адрес прокси, всё, что требуется сделать – это обновить данные в скрипте и набрать в консоли “./proxyPass.sh enable”. Старые правила iptables будут вычищены автоматически и заменены новыми.
PS: При использовании типа подключения DHCP необходимо указать опцию “option peerdns ‘0’” в /etc/config/network, чтобы провайдерские DNS-серверы, получаемые с DHCP, полностью игнорировались.
PPS: Также может возникнуть вопрос о том, как завернуть в прозрачный прокси тот трафик, который не проходит через роутер транзитом, а генерируется софтом непосредственно на роутере. Правила рассмотренные для PREROUTING для этих целей не подходят, а нужно добавить правила для OUTPUT:
iptables -t nat -A OUTPUT -d <dest IP>/32 -p tcp -m tcp --dport 80 -m comment --comment ErinomePP -j DNAT --to-destination <proxy IP>:<proxy port>
В терминологии OpenWrt, вероятно, вместо “-А OUTPUT” следует указать более корректный блок правил, определяющий именно OUTPUT зоны WAN…
Приветы, нынче проще уже использовать модификацию запросов прямо на роутере через https://github.com/bol-van/zapret плюс dns-proxy2 или dns over tls\https. Без какой-либо необходимости в прокси в 99% случаев. Плюсом еще добавить в дроп rst и 302 ошибки с заглушек. Может обновите статью, а то данная реализация мало где представлена и люди все еще городят огород с проксями и тором.