Преамбула
Как известно, компания cloudflare выпустила свой vpn сервис под название warp, работающий на базе wireguard. Есть официальные клиенты для разных ОС, но мы попробуем настроить его на маршрутизаторе mikrotik с установленной ROS 7.1 beta 6 для работы с сервисом antifilter.download. Почему бета? Потому что только на 7 версии была добавлена работа с wireguard. Поэтому способ пока не рекомендуется для продакшна, но для дома самое то.
Установка
-
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 адрес и порт, а также диапазон разрешенных адресов.
ROS v7 для микротика берем на routeros.com, обновляем свой роутер. Не забываем, что это бета, и что-то может не работать так, как надо.
Настройка
Принцип простой. По 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
Если все введено правильно, то поднимается новый интерфейс 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.1b6. Получилось таким образом:
Добавляем bgp шаблон и bgp соединение, где router-id это ваш внешний ip адрес:
/routing bgp template add name="antifilter" ignore-as-path-len=yes routing-table=main as=64512 multihop=yes hold-time=4m keepalive-time=1m input.filter=bgp_in
/routing bgp connection add name="antifilter_bgp" remote.address=163.172.210.8/32 local.default-address=172.16.0.2 router-id=*.*.*.* templates=antifilter
На этом этапе bgp connection должен подняться, и начнет наполняться таблица маршрутов из сервис antilter.download.
Теперь разрешим фильтром получаемые маршруты
/routing filter rule add chain=bgp_in rule={set gw-interface wireguard1; action accept}
Готово. Проверяем работоспособность на нужных сайтах.
Например, из терминала микротика запускаем traceroute yandex.ru и traceroute linkedin.com, сравниваем результат.
P.S. Статья писалась для b6, но пока ничего не поменялось и для текущей rc7
Комментарии (7)
aborouhin
09.12.2021 19:07У antifilter.download большой недостаток - по BGP они отдают только суммаризованные до /24 префиксы. В итоге работать отказывается часть попавших "за компанию" в VPN сайтов, которые, наоборот, отсекают зарубежные IP либо адреса VPN-сервисов и облачных провайдеров. Ну и замедляется то, что можно бы не замедлять и ходить напрямую.
Полный список префиксов отдают по BGP на antifilter.network, но там свои приколы с формированием списка, в итоге адреса LinkedIn, например, в него не попадают.
Так что я BGP-сервер тоже свой поднял, который скачивает и парсит списки с antifilter.download и отдаёт, в зависимости от настроек пира, или /32, или /24. На текущий момент, чтобы переварить полный список префиксов, достаточно 1Gb RAM на маршрутизаторе. Но на пике охоты РКН за Телеграмом и этого не хватало :(
resetsa
09.12.2021 21:03Порядка 20000 префиксов примут гораздо больше устройств, а вот все /32…
Да, часть ресурсов попадет в ВПН не смотря, на то, что открыты.
В конце концов можно отфильтровать нужный префикс на IN фильтр.
PS
У меня сейчас 20000 префиксов, меньше 64М занимают.aborouhin
09.12.2021 21:10Ну я и написал - сейчас 1 Гб хватает на 200-300 тысяч префиксов с запасом, наверное, даже 512 Мб хватит. А когда их в своё время стало под полтора миллиона - перестало хватать.
Но если у устройства память позволяет - то смысла нет мириться с недостатками суммаризации, проще брать /32. А вот этого как раз antifilter.download по BGP сделать и не позволяет.
mmaks17
11.12.2021 10:50в рос 7.1 серьезно переработали BGP, даже ас2 со 128Мб памяти, не особо напрягаясь загрузил 200+ к маршрутов, (поадресную выгрузку РКН)
Darkhon
WARP — прекрасный VPN, но есть одна проблема: Роскомнадзор там обещает его скоро заблокировать. А жаль. Достойной альтернативы ему среди бесплатных VPN практически нет.
aborouhin
Чтобы не играть в кошки-мышки с РКНом, достойная альтернатива только одна - поднимать свой VPN. Некоторые даже бесплатно это реализуют на оракловском облаке.