Прозрачный обход блокировок на Ubiquity EdgeRouter X
22 апреля 2018 года РосКомНадзор окончательно сошел с ума и в попытке закрыть Telegram заблокировал google.com. Под блокировку попала часть Youtube и еще 18 миллионов ip-адресов. На следующий день под блокировку попал Gmail. Телеграм продолжал работать.
К этому моменту уже был куплен и настроен VPN на устройствах. Пришла мысль, что хорошо бы настроить прозрачную блокировку прямо на маршрутизаторе. В общем случае это называется policy-based routing. Общая идея:
- Собираем список заблокированных подсетей и ip с РКН или других сервисов
- Генерируем конфигурацию под эти адреса
- Отправляем трафик на заблокированные подсети через VPN. Остальное гоним стандартным способом.
Добавляем сетевой интерфейс VPN
Edgerouter X дружит с OpenVPN очень медленно, поэтому будем использовать обычный L2TP. Подключаемся к роутеру через web-интерфейс, жмем CLI
логинимся, вводим configure
, добавляем подключение к VPN:
set interfaces pptp-client pptpc0 default-route none
set interfaces pptp-client pptpc0 description 'VPN connection'
set interfaces pptp-client pptpc0 mtu 1500
set interfaces pptp-client pptpc0 name-server auto
set interfaces pptp-client pptpc0 require-mppe
set interfaces pptp-client pptpc0 server-ip **server ip**
set interfaces pptp-client pptpc0 user-id **login**
set interfaces pptp-client pptpc0 password **password**
commit
- **server ip** — меняем на адрес сервера
- **login** — логин для подключения к VPN
- **password** — пароль для подключения к VPN
В дэшборде после этого должен появиться новый интерфейс VPN connection
со статусом connected. Если все ок, вводим: save
.
Добавляем заблокированные диапазоны
После этого добавляем диапазоны заблокированных подсетей и адресов. Этот список постоянно пополняется, пункт нужно выполнять каждый раз при обновлении блокировок:
- Переходим по ссылке https://gist.github.com/arrowcircle/3c18c9eb2f369135e5a6bba4e98e86a3
- Жмем кнопку Raw
- Копируем содержимое: Ctrl + a, Ctrl + c
- Вставляем в CLI: Ctrl + v
- Enter,
commit
- Если все ок,
save
Задаем правила firewall
set firewall modify vpn_route rule 1 action modify
set firewall modify vpn_route rule 1 description 'traffic to blocked via pptpc0'
set firewall modify vpn_route rule 1 modify table 1
set firewall modify vpn_route rule 1 destination group network-group rkn-blocked-ips
set interfaces switch switch0 firewall in modify vpn_route
commit
save
Создаем NAT правило
Можно сделать это из командной строки, но, чтобы не испортить существующих настроек добавим правило руками:
- Вкладка Firewall/NAT -> NAT
- Add Source NAT Rule
- Description: Blocked ips to vpn
- Ставим галочку Enable
- Outbound interface: pptpc0
- Ставим опцию Use Masquerade
- Ставим опцию All protocols
- Выбираем внизу Dest network group: Blocked networks
- Save
- В таблице Source NAT перетаскиваем наше правило Blocked ips to vpn на самый верх. Нажимаем Save rule order
Последний штрих
Вводим в CLI
set protocols static table 1 interface-route 0.0.0.0/0 next-hop-interface pptpc0
commit
save
Теперь трафик до заблокированных сетей будет идти через VPN.