Jump to content
b1st

Обход блокировок на роутере!

Recommended Posts

Начиная с версии 2.13.A.3.0-1 в ядре появилась поддержка NFQUEUE и стало возможно использовать наработки от bol-van. Делюсь своим вариантом настройки с нуля.

Устанавливаем компоненты системы (через веб интерфейс) :

  1. Протокол IPv6. Поддержка открытых пакетов. Перезагрузка.
  2. Подключаем entware. Модули ядра подсистемы Netfilter. Перезагрузка.
  3. Пакет расширения Xtables-addons для Netfilter. Перезагрузка.

Далее работаем по ssh:

ssh root@192.168.1.1

Ставим необходимые пакеты:

opkg install ipset curl bind-tools iptables cron nano git-http

Для того чтобы можно было пользоваться crontab -e в /opt/etc/profile добавляем строку (это не обязательно):

export EDITOR='/opt/bin/nano'

В файле /opt/etc/init.d/S10cron вместо ARGS="-s" оставляем просто ARGS="" иначе в логах будет мусор каждую минуту.

Скачиваем сам скрипт;

git clone https://github.com/LukyanovM/zapret.git /opt/zapret

в файл  /opt/zapret/ipset/zapret-hosts-user.txt добавляем те сайты для которых хотим отключить блокировки:

rutracker.org
kinozal.tv

Генерируем список IP для обхода, эту команду нужно выполнять каждый раз когда вы хотите изменить перечень сайтов в /opt/zapret/ipset/zapret-hosts-user.txt:

/opt/zapret/ipset/get_user.sh

Делаем пробный запуск:

/opt/zapret/init.d/keenetic/S99zapret start

Если всё хорошо, то в консоли должно быть примерно так:

iptable_raw.ko is already loaded
xt_string.ko is already loaded
nfqws is installed
tpws is installed
Restoring ipset
Adding iptables rule
Starting anti-zapret: zapret.

На данном этапе за роутером должны заработать рутрекер и кинозал. Если тут всё нормально делаем симлинк на автозапуск:

ln -s /opt/zapret/init.d/keenetic/S99zapret /opt/etc/init.d/S99zapret

У скрипта 3 режима работы

  1. Fragmentation - принудительно выставляется малый размер TCP окна, в результате чего пакеты фрагментируются и не попадают под анализ DPI. Используется NFQUEUE. Самый быстрый режим. Установлен по умолчанию. Работает в IPv4 для HTTP и для HTTPS (не всегда)
  2. Modification - прозрачное HTTP проксирование с модификацией HTTP заголовков. Работает в IPv4 и в IPv6 но только для HTTP
  3. Combined - комбинированный режим. Для HTTP используется проксирование(tpws), для HTTPS - фрагментирование пакетов(nfqws).

Обязательная часть на этом закончена. Дальнейшее касается выгрузки из РКН и может быть пропущено. Для этой цели есть два скрипта: get_reestr.sh и get_antizapret.sh. Первый берет оригинал реестра и парсит его в айпи самостоятельно - нагрузка низкая, но парсить может сутками. Второй берет готовый список айпи с antizapret.prostovpn.org, отрабатывает за полминуты. Я использовал второй вариант:

/opt/zapret/ipset/get_antizapret.sh

Cейчас за роутером должно заработать всё. Осталось только вставить в cron актуализацию выгрузки:

cp /opt/zapret/ipset/get_antizapret.sh /opt/etc/cron.daily/get_antizapret.sh

Правим cron скрипт /opt/etc/cron.daily/get_antizapret.sh:

Строку 

SCRIPT=$(readlink -f $0)

удаляем, а строку

EXEDIR=$(dirname $SCRIPT)

меняем на 

EXEDIR=/opt/zapret/ipset

Теперь роутер сам каждую ночь будет обновлять выгрузку. Чтобы отключить обход блокировок достаточно выполнить команду (действует до перезагрузки) :

/opt/etc/init.d/S99zapret stop

UPD: Если протокол HTTPS так и не заработал можно настроить прозрачное проксирование через тор или пустить заблокированный трафик через штатный openvpn.

Edited by Михаил Лукьянов
Установка через git. Комбинированный режим работы.
  • Thanks 6
  • Upvote 3

Share this post


Link to post
Share on other sites
В 26.09.2018 в 18:18, Nuck-TH сказал:

И как быть с HTTPS? NDM вроде как постоянно перезаписывает таблицу NAT, да и моего понимания работы сетевых интерфесов не хватает, чтобы переписать правила iptables под местные условия :(

С HTTPS вариантов немного - tor, прокси и vpn. С tor всё оказалось просто. Так как не нужно прозрачное проксирование на прикладном уровне (что умеет только squid с peek&slice), то достаточно просто инкапсуляции одного транспортного протокола в другой (TLS в SOCKS5). С этой задачей легко справляется tor+redsocks:

opkg install redsocks tor

Что поменять в дефолтном /opt/etc/tor/torrc:

Log notice syslog
RunAsDaemon 1
DataDirectory /opt/var/lib/tor

Что поменять в дефолтном /opt/etc/redsocks.conf:

в секции base:

log_info = off;
log = "syslog:local7";
daemon = on;
redirector = iptables;

в секции redsocks:

local_ip = 192.168.1.1;
local_port = 8888;
ip = 127.0.0.1;
port = 9050;
type = socks5;

В скрипт S99zapret добавлено правило для перенаправления запрещенного HTTPS трафика в redsocks, скрипт нужно перекачать с гитхаба. Для того чтобы NDM не сбрасывало правило в таблице nat нужно создать следующий файл /opt/etc/ndm/netfilter.d/redsocks.sh:

#!/opt/bin/sh
[ "$type" == "ip6tables" ] && exit 0
[ "$table" != "nat" ] && exit 0   # check the table name
iptables -t nat -I PREROUTING -p tcp --dport 443 -m set --match-set zapret dst -j REDIRECT --to-port 8888
/opt/bin/logger "redsocks redirected https rule created for zapret via netfilter hook"

не забыть конечно:

chmod +x /opt/etc/ndm/netfilter.d/redsocks.sh

Проверяем:

/opt/etc/init.d/S35tor start
/opt/etc/init.d/S23redsocks start
/opt/etc/init.d/S99zapret stop
/opt/etc/init.d/S99zapret start

Что интересно у меня https://2ip.ru/ и https://yandex.ru/internet/ часто показывают выход через tor, а не напрямую. Видимо какой-то не тот диапазон IP попал в реестр:(

Edited by Михаил Лукьянов
  • Thanks 4
  • Upvote 1

Share this post


Link to post
Share on other sites
15 minutes ago, Михаил Лукьянов said:

Кроме тора и vpn есть ещё shadowsocks и wireguard.

Спасибо за подсказки!!! С тором понятно, завтра настрою, а вот достоинства/недостатки решения на базе OpenVPN, shadowsocks и wireguard пока буду изучать. 

Share this post


Link to post
Share on other sites

Настроил по инструкции, был рад, но заметил странность

рутрекер который по хттпс у меня открывается нормально, а вот кинозал по хттп сразу после старта скрипта S99zapret работает, а потом отваливается через какое-то время. При этом попадаю не на заглушку провайдера, а просто пишет, что не удалось установить соединение. Пробовал режимы fragmentation, но с ним у меня работал только рутрекер и combined, на котором все заработало, но похоже хттп обход отваливается через какое-то время. В скрипте поменял еще BLACKHOLE=blocked.netbynet.ru меня туда провайдер заворачивает.

Share this post


Link to post
Share on other sites
2 часа назад, Dennon сказал:

Настроил по инструкции, был рад, но заметил странность

рутрекер который по хттпс у меня открывается нормально, а вот кинозал по хттп сразу после старта скрипта S99zapret работает, а потом отваливается через какое-то время. При этом попадаю не на заглушку провайдера, а просто пишет, что не удалось установить соединение. Пробовал режимы fragmentation, но с ним у меня работал только рутрекер и combined, на котором все заработало, но похоже хттп обход отваливается через какое-то время. В скрипте поменял еще BLACKHOLE=blocked.netbynet.ru меня туда провайдер заворачивает.

Оставьте combined. Создайте перехватчик для ndm /opt/etc/ndm/netfilter.d/zapret.sh:

#!/opt/bin/sh
[ "$type" == "ip6tables" ] && exit 0
[ "$table" != "nat" ] && exit 0   # check the table name
iptables -t nat -I PREROUTING -p tcp --dport 80 -i br0 -m set --match-set zapret dst -j DNAT --to 127.0.0.1:1188
iptables -t nat -I OUTPUT -p tcp --dport 80 -m owner ! --uid-owner nobody -m set --match-set zapret dst -j DNAT --to 127.0.0.1:1188
/opt/bin/logger "http redirection rule created for zapret via netfilter hook"

Не забудьте

chmod +x /opt/etc/ndm/netfilter.d/zapret.sh

Я всё хотел автоматизировать создание перехватчика из скриптов, но  тут автор(bol-van) внезапно обновление выпустил. Наверное теперь наши наработки ему нужно влить в git, и заодно с перехватчиками ndm решить вопрос.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   1 member

×
×
  • Create New...