Преамбула

Как известно, компания cloudflare выпустила свой vpn сервис под название warp, работающий на базе wireguard. Есть официальные клиенты для разных ОС, но мы попробуем настроить его на маршрутизаторе mikrotik с установленной ROS 7.1 для работы с сервисом antifilter.download.

Установка

  1. WARP. Собственно официальный клиент warp нам не понадобится, достаточно скачать стороннюю утилитку для получения регистрационных данных здесь https://github.com/ViRb3/wgcf

    Командами wgcf register и wgcf generate получаем нужный файл wgcf-profile.conf, откуда мы возьмем данные для подключения к сервису. Файл примерно такого содержания:

    [Interface]
    PrivateKey = ****
    Address = 172.16.0.2/32
    Address = ****:::::::****/128
    DNS = 1.1.1.1
    MTU = 1280
    [Peer]
    PublicKey = ****
    AllowedIPs = 0.0.0.0/0
    AllowedIPs = ::/0
    Endpoint = engage.cloudflareclient.com:2408

    где адрес endpoint ресолвится на данный момент в 162.159.192.1, порт 2408

    Нам понадобятся приватный и публичный ключ, endpoint адрес и порт, а также диапазон разрешенных адресов.

  2. ROS v7 для микротика берем на routeros.com, обновляем свой роутер (ну или автоматически). Не забываем, что это бета уже stable, и все равно что-то может не работать так, как надо. В продакшн пока не рекомендую.

Настройка

Принцип простой. По bgp получаем список подсетей, устанавливаем маршрут до них через шлюз antifilter, а свою очередь маршрут до этого шлюза пускаем через поднятый vpn интерфейс. Подробнее:

  • Устанавливаем dns 1.1.1.1

  • Добавляем новый wireguard интерфейс и пир к нему. Приватный и публичный ключ, endpoint адрес, порт и разрешенный диапазон адресов берем из файла выше. Также присваиваем локальный адрес нашему новому интерфейсу (адрес берем в том же файле):

/interface wireguard add name=wireguard1 mtu=1420 listen-port=13231 private-key=****
/interface wireguard peers add interface=wireguard1 public-key=**** endpoint-addr=162.159.192.1 endpoint-port=2408 allowed-address=0.0.0.0/0
/ip address add address=172.16.0.2 interface=wireguard1 network=172.16.0.2

Если все введено правильно, то поднимается новый интерфейс wireguard1.

  • Добавляем еще один src-nat:

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

Потестируйте, что интерфейс и nat работает, установив маршрут по умолчанию на интерфейс wireguard1. Если нужные сайты открываются, то идем дальше, вернув маршруты на свои обычные.

Из этой публикации https://habr.com/ru/post/549282/ берем настройки bgp с сервиса antifiler.download, спасибо автору публикации и yardanico за наводку с bgp в ros v7. Проблема собственно в переделке настроек bgp из ROS v6 на ROS v7.1. Получилось таким образом:

  • Добавляем bgp соединение (обойдемся без шаблонов), где router-id это ваш внешний ip адрес:

/routing bgp connection
add as=64512 disabled=no hold-time=4m input.filter=bgp_in keepalive-time=1m local.address=172.16.0.2 .role=ibgp name=antifilter_bgp \
    remote.address=163.172.210.8/32 routing-table=main router-id=*.*.*.*

На этом этапе bgp connection должен подняться, и начнет наполняться таблица маршрутов из сервис antilter.download.

Теперь разрешим фильтром получаемые маршруты и установим им шлюз в интерфейс wireguard1:

/routing filter rule add chain=bgp_in disabled=no rule="set gw wireguard1; accept"

Готово. В маршрутах будет примерно такая картина:

Проверяем работоспособность на нужных сайтах. Например, из терминала микротика запускаем traceroute yandex.ru и traceroute linkedin.com, сравниваем результат.

P.S. Статья писалась для b6, в связи с очередными изменениями и выходом 7.1 stable команды изменены на актуальные. Проверено на 7.1.1 на hap ac2.