По мотивам статьи: https://habr.com/ru/post/354282/
Сервер, естественно, должен иметь IP, не входящий в заблокированные РКН подсети. Лучше — стоять вне РФ.
Желательно обеспечить базовый уровень безопасности: https://www.linode.com/docs/security/securing-your-server/
Или заморочиться: https://www.cisecurity.org/cis-benchmarks/
Автоматическая установка 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 [email protected]:/
scp client.crt [email protected]:/
scp client.key [email protected]:/
И уже на роутере импортировать их.
/certificate import file-name=ca.crt passphrase=""
/certificate import file-name=client.crt passphrase=""
/certificate import file-name=client.key passphrase=""
Запуск 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
Варианта два:
- Прямо на роутере скачивать файлы с заблокированными подсетями (https://antifilter.download/) и формировать таблицу маршрутизаци
- Настроить BGP для анонса заблокированных подсетей с VPS на роутер.
Статья о маркировке трафика, для отправки его в 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
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
Если что-то не по плану, проверяем:
/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
Тоже решал эту задачу, только решил не использовать BGP, а формировал листы прямо в роутере.
В конечном счете отказался от выгрузки всего РКН листа, отставив только интересующие меня сети.