Вы здесь

Прозрачный обход блокировок при помощи Mikrotik и Tor

Аватар пользователя sanglyb
Опубликовано ср, 21/12/2016 - 18:38 пользователем sanglyb

Прозрачный обход блокировок при помощи Mikrotik и Tor

Привет. Всем известно что каждый день Роскомнадзор блокирует десятки или даже сотни сайтов. Как же быть если в бан попал ваш любимый сайт? Вариантов решения данного вопроса может быть несколько. Например купить VPS за границей, куда цепкие лапы Роскомнадзора не дотянутся, и сделать VPN или SSH туннель до вашего сервера. Либо можно использовать различные анонимайзеры. Либо можно использовать Тор сеть для доступа к заблокированным ресурсам, например можно поставить Tor Browser и радоваться жизни. Все эти методы хороши, но требуют от пользователя дополнительных действий, или дополнительных затрат на VPS.

В общем долго я пользовался Tor Browserом, но в итоге надоело что то дополнительно запускать, буть то даже другой браузер. И решил я подумать, как бы сделать так, что бы блокировки обходились прозрачно. В итоге надумал, что можно поставить tor как прокси, и заворачивать трафик из локальной сети на заблокированные ресурсы, на этот прокси.

Т.к. у меня стоит роутер Mikrotik, на нем эту задачу решить совсем не сложно, правда с одной оговоркой, работать так будут только http сайты, https по этой схеме работать не будет, нужно думать что то еще.

Но даже так — уже большое облегчение жизни. Т.к. можно заходить абсолютно с любого устройства из домашней сети на заблокированные сайты.

О том как это сделать, спешу рассказать вам, может кому пригодится.

Я все ставил на Ubuntu Server 16.04. Для других систем процедура не должна сильно отличаться.

Для начала нужно поставить Tor, но одного Tor в качестве прокси будет недостаточно, т. к. он работает в режиме socks. А для осуществления прозачного обхода блокировок нужен http прокси. В этом нам поможет privoxy. В общем обновляем систему и ставим tor и privoxy:

sudo su
apt-get update
apt-get upgrade
apt-get install tor
apt-get install privoxy

Далее нужно поправить конфиг privoxy:

nano /etc/privoxy/config

находим строчку listen-address, она должна выглядеть примерно так:

listen-address 192.168.1.10:8118

Соответсвенно за место 192.168.1.10 нужно вписать адрес вашего сервера, куда ставиться privoxy.
Так же находим следующую строчку, и задаем значение 1 (это нужно для прозрачного проксирования):

accept-intercepted-requests 1

И в конец файла добаляем строчки, что бы privoxy подключался к tor proxy.

forward-socks5 / localhost:9050 .
forward-socks4 / localhost:9050 .
forward-socks4a / localhost:9050 .

Обратите внимание, на точки в конце строк. Они обязательны.

Перезапускаем tor и privoxy

/etc/init.d/tor restart
/etc/init.d/privoxy restart

После этого сервер, который будет проксировать через себя трафик в tor сеть готов, можно проверить, вписав в настройки браузера в качестве http proxy — адрес-вашего-сервера, порт 8118. И если вы не хотите возиться с настройкой роутера, то в принципе так трафик уже будет летать через tor сеть, и как следствие, блокировки будут пройдены. И https так то же работать будет.

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

Нам нужно заворачивать трафик направленный на заблокированные ресурсы на наш прокси сервер, для этого запускаем winbox и подключаемся к нашему mikrotikу.
Переходим в IP — Firewall — Layer7 Protocol, добавляем новый протокол, в поле Regexp вводим:

^.*(get|GET).+(ident.me|rutracker.org|nnm-club.me).*$

Соответственно через знак | можно добавлять доменные имена заблокированных ресурсов, к которым вы хотите получить доступ.

Layer7 Protocol

Затем переходим во вкладку Mangle и добавляем новое правило:

Во вкладке General:

Chain — prerouting
Src. Address - !192.168.1.10 (это адрес вашего прокси сервера, нужен для того что бы не образовывалось петель)
Protocol — 6 (tcp)
Dst. Prot — 80

mangle general

Во вкладке Advanced задаем:

Dst. Address List: !unblocked
Layer7 Protocol: unblock

mangle advanced

Во владке action:

Action — add dst to address list
Address List — unblocked

mangle action

Далее переходим во вкладку NAT, и добавляем новое правило:
Во влкадке General:

Chain — dstnat
Src. Address - !192.168.1.10
Protocol — 6 (tcp)
Dst. Port: 80

nat general

Во влкадке Advanced: 

Dst. Address List: unblocked

nat advanced

Во вкладке Action:

Action — dst-nat
To Addresses — 192.168.1.10
To Ports: 8118

nat action

В общем то все, прозрачный обход блокировок у нас готов, можно попробовать проверить. Для проверки удобно пользоваться сайтом ident.me (который вы могли заметить в регулярном выражении приведенном выше).

Сперва скриншот с выключенным правилом:

ip without proxy

И с включенным.

ip with proxy

Пару слов о том как это работает. Mangle правило - сравнивает dns имя узла назначения с Layer7 списком ресурсов, если dns соответсвует внесенному туда ранее адресу, то IP адрес ресурса добавляется в Address List — unblocked. Далее NAT праавило смотрит на этот список адресов, и если в запросе есть нужный адрес — заворачивает трафик по 80 порту на наш прокси сервер.

Как видим прозрачное проксирование в tor сеть с роутера mikrotik с целью обхода блокировок работает на ура. Осталось только разобраться с https и вообще будет счастье.

UPD:  Столкнулся  с тем, что выходные ноды могут находиться в России, и как следсвие доступ к ресурсам на них заблокирован, что бы этого избежать нужно в конфиг /etc/tor/torrc добавить строчку:

ExcludeExitNodes {RU}, {UA}, {BY} 

Как не сложно догадаться, эта сточка указывает, что бы Tor не подключался к exit nodes расположенным в России, Белорусии или Украине.

UPD1:Столкнулся с тем, что при попытке выполнить поиск на сайте rutracker.org, ptivoxy выдает следующее:

Request for blocked URL, Block reason: Path matches generic block pattern.

Что бы это обойти, нужно поправить файл - /etc/privoxy/user.action

В этот файл нужно добавить строчки:

{-block \
}
/forum/tracker.php

После чего нужно переезапустить privoxy.

UPD2. Столкнуся с тем, что если на микротике masquerade настроин на использование "выходного" интерфейса, а не внутренней сети, то страницы, которые должны проксироваться в тор сеть не открываются. Т.е. для работы вышеописанной схемы, у вас в srcnat правиле, в котором atcion - masquerade должна быть прописана ваша внутренняя сеть в src address, соответсвенно out interface должен быть пустой.

 

Поделитесь статьей с друзьями в соц. сетях, возможно, она будет им полезна.


Если вам помогла статья, вы можете >>отблагодарить автора<<


Оставить комментарий