Обход блокировки сайтов с OpenWrt

На просторах сети изложено немало способов, как можно обходить запрет доступа к интернет-ресурсам, попавшим под раздачу известного закона о бесконтрольных блокировках, прославившегося своей идиотичностью и тем, что малосознательные работники Роскомнадзора даже в нынешней его редакции не в состоянии выполнять его условия без безмерных злоупотреблений со своей стороны.

Итак, рассмотрим еще один вариант, не требующий никакого дополнительного софта, помимо роутера с 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…

This entry was posted in Сеть и интернет and tagged , , . Bookmark the permalink.

One Response to Обход блокировки сайтов с OpenWrt

  1. pisya says:

    Приветы, нынче проще уже использовать модификацию запросов прямо на роутере через https://github.com/bol-van/zapret плюс dns-proxy2 или dns over tls\https. Без какой-либо необходимости в прокси в 99% случаев. Плюсом еще добавить в дроп rst и 302 ошибки с заглушек. Может обновите статью, а то данная реализация мало где представлена и люди все еще городят огород с проксями и тором.

Leave a Reply to pisya Cancel reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>