Полуавтоматический обход блокировок сайтов с помощью Mikrotik, PBR и VPN

Полуавтоматический обход блокировок сайтов с помощью Mikrotik, PBR и VPN

kromm

С повальным распространением блокировок в последнее время жить без средств их обхода становится все труднее. К счастью, вариантов пока много, но большинство встреченных мною методов были не очень удобны. Из самых популярных решений сейчас - это расширения к браузеру и VPN, но расширения - это привязка к определенному браузеру и непонятная степень доверия третьим лицам, а наравлять весь трафик через VPN - это медленно и неудобно.

Опять же, со всеми этими методами надо решать проблему на каждом устройстве отдельно, и на телефонах или всяких экзотических девайсах вроде консолей или смарт-ТВ это уже превращается в нетривиальную задачу.

Поэтому мысли решить проблему на уровне роутера меня посещали давно, и оказалось, что на mikrotik это все делается достаточно просто.

Policy-based routing

Mikrotik поддерживает такую замечательную технологию, как PBR. Это значит, что мы можем заворачивать трафик по различным маршрутам на основе каких-либо правил. Например, трафик, идущий на адреса из некоего списка, можно отправить на отдельный интерфейс - именно то, что нам нужно. Но для начала этот список надо составить. Можно делать это вручную, но если есть возможность что-то автоматизировать, то не стоит ее упускать, да и IP-адреса заблокированных ресурсов порой меняются - менять каждый раз может быть утомительно.

Доступ заблокирован

Этот шаг будет разный для всех, ибо каждый провайдер извращается как может, но смысл примерно одинаковый. При попытке открыть запрещенный сайт провайдер вместо него должен выдать пользователю заглушку - вот ее мы и перехватим, поняв таким образом, что данный IP заблокирован и его стоит пускать через VPN.

Для начала понадобится WireShark - чтобы проанализировать пакет от провайдера и понять, по каким признакам проще всего идентифицировать заглушку. Для этого берем любой запрещенный сайт и открываем его через обычный http (https, скорее всего, просто не откроется). В большинстве случаев мы получим редирект:

Отлично, теперь по этому location создадим правило в микротике.

/ip firewall add action=add-src-to-address-list address-list=roskompozor address-list-timeout=0s chain=forward content="Location: http://flex.ru/zapret.html" in-interface=l2tp-out1 protocol=tcp src-port=80

Здесь, соответственно, content - это некое содержимое пакета, по которому мы его идентифицируем, а interface - интерфейс, через который настроен основной доступ в интернет.

Пока мы тут, можно добавить еще одно правило, которое позволит нам принудительно направлять сайты через VPN, например если на них доступ с русских IP заблокирован не провайдером, а владельцем сайта:

/ip firewall add action=add-dst-to-address-list address-list=roskompozor address-list-timeout=0s chain=forward content="?addtovpn" dst-port=80 in-interface=bridge-local protocol=tcp

Таким образом, теперь если к адресу любой страницы добавить ?addtovpn, IP адрес внесется микротиком в наш список и будет всегда маршрутизироваться через VPN.

Заворачиваем трафик

Как поднять VPN на микротике - описывать нет смысла, в сети тысячи мануалов и все зависит от конкретной реализации в вашем случае. У меня это - softether сервер на арендованном копеечном VPS. Softether умеет, наверное, все возможные технологии поднятия тоннелей, конкретно микротик подключен через L2TP/IPsec.

Из критичного на этом шаге - при создании PPP-интерфейса для VPN надо убрать галку add default route, чтоб основной трафик не пошел туда.

Настало время основной магии. Для начала промаркируем все пакеты, связанные с нашим списком:

/ip firewall mangle add action=mark-routing chain=prerouting dst-address-list=roskompozor in-interface=bridge-local new-routing-mark=roskompozor passthrough=yes

а теперь создадим маршрут, который отправит все маркированные пакеты в VPN-интерфейс

/ip route add comment=RKN distance=1 gateway=myL2TP routing-mark=roskompozor

где myL2TP - имя, которым вы обозвали ваш новый интерфейс VPN при создании. Также надо убедиться, что настроен маскарадинг, и настроить его при необходимости для всех выходных интерфейсов

/ip firewall nat add action=masquerade chain=srcnat out-interface=all-ppp

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

Report Page