Настройка WireGuard в ROS 7

  Mikrotik, Network

скопировано отсюда

Для начала вам нужен туннель, в который будет направляться трафик для определённых ресурсов. По настройке туннелей в ROS много мануалов. Я просто приведу пример настройки WG, именно по нему нормальный ман нелегко найти. Хотя сложного ничего тут нет.

В address нужно указать IP-адрес с подсетью (пример 10.7.0.2/24), в network подсеть (пример 10.7.0.0).

/interface wireguard
add listen-port=51820 mtu=1420 name=wg0 private-key="$PRIVATE"
/interface wireguard peers
add allowed-address=0.0.0.0/0 comment=wireguard endpoint-address=$HOST endpoint-port=51820 interface=wg0 persistent-keepalive=25s \
    preshared-key="$PRESHARED" public-key="$PUBLIC"
/ip address
add address=$IP interface=wg0 network=$NETWORK
/ip firewall nat
add action=masquerade chain=srcnat out-interface=wg0

Обязательно нужно задать параметр persistent-keepalive, без него туннель не поднимется.

Проверить, что трафик ходит через интерфейс

/ping habr.com interface wg0

Ещё можно глянуть, что значения Rx и Tx ненулевые в WireGuard – Peers

mikrotik-wg-stats

Теперь можно настраивать списки и маршрутизацию.

Какие способы перенаправления трафика известны на текущий день для RouterOS?

BGP. Классика для Mikrotik

Есть два сервиса, которые предоставляют услугу анонса заблокированных IP-адресов и подсетей:

Они это делают, чтоб вы могли их заблокировать на роутере. Но для учебных целей их можно направить в туннель.

Первый возник в 2018, второй в 2019 году. Создатели antifilter.network не особо запаривались с неймингом, но запарились с реализацией сервиса.

Оба имеют списки:

  • Все IP-адреса, который надо заблокировать
  • Их суммаризация для сокращения количества префиксов
  • Блокируемые подсети

Чем отличаются?

  • У antifilter.download есть список community. Он создаётся из резолвинга доменов, которые добавили пользователи сервиса
  • У antifilter.network есть прикольная фича по выбору списков, не прибегая к фильтрации префиксов на роутере
  • У antifilter.network есть список с суммаризацией от /32 до /23 маски
  • antifilter.network имеет много других списков

У обоих проектов есть чаты, где вы можете задать свой вопрос.

Antifilter.download

Настроим получение префиксов из списка subent+ipsum+community от antifilter.download. Эти списки отдаются по умолчанию.

Благодарю @talifan за конфиг для ROS 7.

Требуется подставить переменные:

  • YOUR_AS – ваша рандомная AS. Число в диапазоне 64512-65543, кроме 65432
  • IP – ваш внешний IP-адрес для того, чтобы не пересекаться с другими пользователями
  • INTERFACE – имя VPN интерфейса, через который необходимо пустить трафик
/routing bgp template
add as=$YOUR_AS disabled=no hold-time=4m input.filter=bgp_in .ignore-as-path-len=yes keepalive-time=1m multihop=yes name=antifilter routing-table=main
/routing bgp connection
add disabled=no hold-time=4m input.filter=bgp_in .ignore-as-path-len=yes keepalive-time=1m local.role=ebgp multihop=yes name=antifilter_bgp remote.address=45.154.73.71/32 .as=65432 router-id=$IP routing-table=main templates=antifilter
/routing filter rule
add chain=bgp_in disabled=no rule="set gw $INTERFACE; accept;"

Проверить, что префиксы пришли, можно командой

/routing/bgp/session print

Значения prefix-count и messages должны быть не равны нулю.

Либо через winbox\веб-интерфейс. Routing – BGP – Sessions, у поднятой сессии раздел Stats.mikrotik-bgp-stats

Делайте трассировку с клиента роутера до необходимого ресурса, маршрут должен проходить через туннель.

Небольшое пояснение перед следующим абзацем. У antifilter.download есть community список, который составляют сами пользователи. Также в BGP существует понятие community, применятся для маркировки части префиксов. В рассматриваемом контексте используется для разделения и использования разных списков. Не запутайтесь.

По умолчанию отдаются вместе subnet, ipsum и community списки.

Чтоб получать только список community, необходимо отредактировать filter rule:

/routing filter rule
add chain=bgp_in disabled=no rule="set gw wg0; if (bgp-communities includes 65432:500) {accept} else {reject}"

Остальные BGP community можно посмотреть на сайте в разделе ЧаВо – “Какие комьюнити используются в BGP-фиде?”.

В случае фильтрации будут прилетать все префиксы, но активны будут только из выбранного community. Посмотреть можно в ip – route

/ip/route print
  • Dab – active, те, что используются для маршрутизации
  • DbI – inactive, те, что отфильтровались и для маршрутизации не используются

Если ваш провайдер блокирует BGP, можно сделать маршрут через VPN для связи с сервисом.

/ip route add dst-address=45.154.73.71/32 gateway=$INTERFACE

Информация взята из статьи @Furriest, автора antifilter.download.

Antifilter.network

Настройка получения префиксов с antifilter.network очень похожа. Основная информация находится на странице https://antifilter.network/bgp . На этой же странице выбирайте списки, которые вам нужны, проходите reCAPTCHA и нажимаете Применить. Теперь к вашему IP-адресу и указанной там AS привязана отдача только выбранных списков. Хитро и очень прикольно сделано.

Настройка такая же, как для antifilter.download, отличаются только Remote Address, Remote AS и вашей AS. А router-id должен содержать IP-адрес, на который вы применили настройки. Эти настройки берутся с их страницы BGP. Фильтровать по community тут не нужно, поэтому правило фильтрации просто с accept;.

С настроенной BGP сессией на роутере, после нажатия на кнопку Применить уже через несколько секунд прилетают выбранные маршруты.

Делайте трассировку с клиента роутера до необходимого ресурса, маршрут должен проходить через туннель.

Как выключить роутинг при BGP?

Routing – BGP – Connection, кнопка Disable у поднятого конекшена