Рецепт

MikroTik — блокировка трафика и проверка утечки

Сделайте так, чтобы выбранный трафик локальной сети останавливался, а не уходил через обычное подключение, когда контейнер ForestVPN недоступен, и проверьте это тестом.

Обновлено 8 октября 2026 г.

В целом пока не проверено на реальном оборудовании. Три правила шагов 1–3 были по отдельности выполнены на RouterOS 7.24.1; остановка и тест из раздела «Проверка, что всё сработало» на роутере не запускались.

Что вы получите

Трафик, который вы решили отправлять через туннель, останавливается, а не уходит через обычное подключение, пока контейнер ForestVPN недоступен. Также вы получаете тест, который это показывает.

Перед началом

  • Устройство: MikroTik, который уже направляет часть вашей локальной сети через контейнер, с таблицей маршрутизации via-fvpn из статьи выбор того, что идёт через туннель, шаг 1 и один из её рецептов.
  • Прошивка: RouterOS 7 (проверено на 7.24.1). Синтаксис отличается от RouterOS 6.
  • Где: вставляйте на устройстве, которое маршрутизирует вашу локальную сеть. Это может быть не тот роутер, на котором работает контейнер.
  • Время: десять минут плюс тест.
  • Что может пойти не так: неверный порядок правил. Правило сброса должно стоять выше исключения fasttrack из шага 1, иначе до него не дойдёт.

Шаги

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

    Добавляет проверку доступности маршрута

    /ip/route/set [find routing-table=via-fvpn dst-address=0.0.0.0/0] \
        check-gateway=ping
  2. Добавьте запасной маршрут, который сбрасывает трафик. Пока основной маршрут работает, он неактивен.

    Добавляет маршрут сброса

    /ip/route/add dst-address=0.0.0.0/0 blackhole distance=10 \
        routing-table=via-fvpn comment="fvpn: kill switch - no exit, no traffic"
  3. Закройте утечку, которую первые два правила не видят: контейнер, который отвечает на ping, пока его собственный туннель не работает, пересылает трафик на свой шлюз по умолчанию, то есть на вас. Если вы меняли /30 контейнера, подставьте адрес роутера из неё.

    Сбрасывает трафик контейнера, который ушёл бы в интернет напрямую

    /ip/firewall/filter/add chain=forward action=drop src-address=172.31.254.1 \
        out-interface-list=WAN \
        place-before=[find comment="fvpn: marked flows skip fasttrack"] \
        comment="fvpn: kill switch - overlay source must not leave over WAN"
  4. По желанию: сделайте одно устройство доступным только через туннель, что бы ни говорили таблицы маршрутизации.

    Сбрасывает трафик названного устройства, если он не идёт через туннель

    /ip/firewall/address-list/add list=fvpn-only address=192.168.88.50 \
        comment="fvpn: the work laptop"
    /ip/firewall/filter/add chain=forward action=drop src-address-list=fvpn-only \
        out-interface-list=WAN \
        place-before=[find comment="fvpn: marked flows skip fasttrack"] \
        comment="fvpn: kill switch - these devices are tunnel-only"
  5. Проверьте IPv6. Всё выше относится к IPv4. Если на роутере работает IPv6, выбранный вами трафик доходит до места назначения ещё и по IPv6, в обход туннеля.

    Показывает, объявляет ли роутер IPv6 и есть ли у него маршрут по умолчанию

    /ipv6/nd/print where ra-lifetime!=none
    /ipv6/route/print where dst-address="::/0" and routing-table="main"

Проверка, что всё сработало

Сначала убедитесь в порядке правил и в том, что счётчики растут.

Показывает порядок правил и таблицу маршрутов

/ip/firewall/filter/print
/ip/route/print where routing-table=via-fvpn

Затем выполните тест на утечку, когда никому не нужен интернет. С устройства в вашей локальной сети откройте страницу «какой у меня IP»: она должна показать адрес выхода. Остановите контейнер, подождите полминуты и перезагрузите страницу.

Останавливает контейнер

/container/stop [find name="fvpn"]

Страница не должна загрузиться. Если она показывает ваш собственный адрес, трафик утекает: перепроверьте шаг 3 и порядок правил. После этого снова запустите контейнер.

Запускает контейнер

/container/start [find name="fvpn"]

Отмена

Удаляет только блокировку трафика

/ip/firewall/filter/remove [find comment~"^fvpn: kill switch"]
/ip/route/remove [find comment="fvpn: kill switch - no exit, no traffic"]
/ip/route/set [find routing-table=via-fvpn dst-address=0.0.0.0/0] !check-gateway

Если что-то не так

СимптомПричинаЧто делать
После теста виден ваш собственный адресПравило сброса стоит ниже исключения fasttrackПоставьте его выше с помощью place-before и проверьте /ip/firewall/filter/print.
Ничего не загружается, даже когда контейнер работаетПроверка доступности не достаёт до контейнераПроверьте адрес контейнера через /interface/veth/print и то, что контейнер запущен.
Некоторые сайты долго зависаютIPv6 объявлен, но маршрута по умолчанию нетДайте IPv6 настоящий маршрут по умолчанию или перестаньте его объявлять: /ipv6/nd/set [find] ra-lifetime=none.

Ограничения

  • Защита относится к выбранному вами трафику, а не ко всей сети.
  • Только IPv4; проверка IPv6 из шага 5 остаётся за вами.
  • Блокировка на роутере останавливает трафик. Она не объясняет, почему контейнер недоступен; см. устранение неполадок.

Назад к разделу «Помощь»

Русский
Спросите нас о чём угодно