На просторах сети изложено немало способов, как можно обходить запрет доступа к интернет-ресурсам, попавшим под раздачу известного закона о бесконтрольных блокировках, прославившегося своей идиотичностью и тем, что малосознательные работники Роскомнадзора даже в нынешней его редакции не в состоянии выполнять его условия без безмерных злоупотреблений со своей стороны.
Итак, рассмотрим еще один вариант, не требующий никакого дополнительного софта, помимо роутера с 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 ошибки с заглушек. Может обновите статью, а то данная реализация мало где представлена и люди все еще городят огород с проксями и тором.