Skip to content

Instantly share code, notes, and snippets.

@bibendi
Forked from furdarius/rkn_unblock.md
Created November 7, 2019 19:37
Show Gist options
  • Save bibendi/c65a07861ab72f8cc330e1eebb18097e to your computer and use it in GitHub Desktop.
Save bibendi/c65a07861ab72f8cc330e1eebb18097e to your computer and use it in GitHub Desktop.
Настройка обхода РКН на роутере

По мотивам статьи: https://habr.com/ru/post/354282/

VPS

Сервер, естественно, должен иметь IP, не входящий в заблокированные РКН подсети. Лучше — стоять вне РФ.

Желательно обеспечить базовый уровень безопасности: https://www.linode.com/docs/security/securing-your-server/

Или заморочиться: https://www.cisecurity.org/cis-benchmarks/

OpenVPN Setup

Server

Автоматическая установка OpenVPN сервера: https://github.com/Nyr/openvpn-install/blob/master/openvpn-install.sh Дополнительно про установку смотреть тут: https://www.digitalocean.com/community/tutorials/how-to-set-up-an-openvpn-server-on-debian-9

Mikrotik не поддерживает для OpenVPN использование UDP, TLS Auth и SHA256/512: https://wiki.mikrotik.com/wiki/OpenVPN#Unsupported

После использования скрипта авто-установки, чтобы OpenVPN Client в RouterOS сработал, нужно в файле /etc/openvpn/server/server.conf выставить:

  • proto tcp
  • auth SHA1
  • закомментировать ;tls-auth

Порт для OpenVPN сервера (1194) должен быть открыт наружу.

На выходе, в домашней директории (на VPS) вы получаете файл ~/$CLIENT.ovpn. Оттуда нужно вытащить содержимое сертификатов и разложить в отдельные файлы:

  • <ca></ca> -> ca.crt
  • <cert></cert> -> client.crt
  • <key></key> -> client.key

Эти файлы нужно скачать с VPS и загрузить на роутер:

# 192.168.88.1 - IP роуетра внутри локальной сети
scp ca.crt admin@192.168.88.1:/
scp client.crt admin@192.168.88.1:/
scp client.key admin@192.168.88.1:/

И уже на роутере импортировать их.

/certificate import file-name=ca.crt passphrase=""
/certificate import file-name=client.crt passphrase=""
/certificate import file-name=client.key passphrase=""

Client

Запуск OpenVPN Client на Mikrotik:

/ppp profile add change-tcp-mss=yes name=ovpn only-one=yes use-compression=default use-encryption=required
/interface ovpn-client add name="ovpn-out1" connect-to=<VPN_SERVER_IP> port=<VPN_SERVER_PORT> mode=ip user="username" password="password" profile=ovpn certificate=client.crt_0 cipher=aes256 add-default-route=no

Note: Можно попробовать использовать готовые скрипты: https://github.com/missinglink/mikrotik-openvpn-client

Отправка трафика в VPN

Варианта два:

  • Прямо на роутере скачивать файлы с заблокированными подсетями (https://antifilter.download/) и формировать таблицу маршрутизаци
  • Настроить BGP для анонса заблокированных подсетей с VPS на роутер.

Вариант 1: Формируем таблицу маршрутизации на роутере

Статья о маркировке трафика, для отправки его в VPN: https://wiki.mikrotik.com/wiki/Policy_Base_Routing

Формируем списки (address-list) для подсетей, трафик на которые будем гнать через VPN:

# 178.62.9.171/24 - заблокированная подсеть
/ip firewall address-list add list=rkn address=178.62.9.171/24

Вместо формирования руками, готовые списки можно выкачивать с https://antifilter.download

Настраиваем правила роутинга

/ip firewall mangle add disabled=no action=mark-routing chain=prerouting dst-address-list=rkn new-routing-mark=rkn passthrough=yes src-address=192.168.88.2-192.168.88.254
/ip route add disabled=no dst-address=0.0.0.0/0 type=unicast gateway=ovpn-out routing-mark=rkn scope=30 target-scope=10
/ip firewall nat add chain=srcnat src-address=192.168.88.0/24 out-interface=ovpn-out action=masquerade

Вариант 2: BGP для получения списка адресов.

10.8.0.1 - IP VPS внутри VPN-туннеля 10.8.0.2 - IP роутера внутри VPN-туннеля

Устанавливаем BGP-соседство с VPS (10.8.0.1):

/routing bgp instance set default as=64999 ignore-as-path-len=yes router-id=10.8.0.2
/routing bgp peer add name=VPS remote-address=10.8.0.1 remote-as=64999 ttl=default in-filter=bgp-in
/routing filter add action=accept chain=bgp-in protocol=bgp set-in-nexthop-direct=ovpn-out

Проверяем, что подсети подтянулись используя /routing bgp peer print status или ip route print count-only

Поднимаем NAT

ip firewall nat add chain=srcnat out-interface=ovpn-out action=masquerade

Debug

Если что-то не по плану, проверяем:

  • /ip route print — все подсети должны быть активны и gateway для каждой должен иметь значение ovpn-out1
  • /ip route pr detail — все подсети должны быть активны и gateway иметь статус reachable
  • /ip route print where dst-address in 178.62.9.171/32 — можно попробовать найти конкретный IP в таблице маршрутизации

Возможно ответ есть в документации: https://wiki.mikrotik.com/wiki/Manual:BGP_HowTo_%26_FAQ

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment