Скачать

ForestVPN для MikroTik

ForestVPN как контейнер на роутере MikroTik с RouterOS 7. Он регистрируется как отдельное устройство и выводит код привязки.

Получить

Получить

suquant/fvpn:0.3.17

Требования

Требования

RouterOS
7.21 или новее. Более старые версии отклоняют блок установки.
Поддержка контейнеров
Пакет container установлен, а режим устройства для контейнеров включён. Для его включения нужен физический доступ к роутеру — это правило MikroTik, а не наше.
Процессор
arm, arm64 или x86.
Один роутер — одно устройство
Контейнер хранит собственный ключ машины и привязывается к вашему аккаунту как отдельное устройство.
Установка

Установка

Контейнер RouterOS, проверенный на реальном оборудовании: MikroTik cAP ax скачал образ, зарегистрировался, вывел код сопряжения и подключился. У него свой собственный машинный ключ, и он запрашивает выходной сервер у управляющей плоскости точно так же, как это делает телефон.

  1. 01

    Выделите контейнеру собственный адрес

    Три строки в терминале RouterOS — подсеть /30, которая существует только между контейнером и роутером, искать её в вашей локальной сети не придётся.

  2. 02

    Добавьте и запустите контейнер

    Зафиксированный образ, а не :latest — роутер, перед которым вы не стоите, никогда не должен незаметно подменять то, что на нём запущено.

  3. 03

    Считайте код сопряжения

    Он выводится в /log ещё до того, как у контейнера появится хоть какая-то сетевая доступность. Откройте приложение ForestVPN, уже вошедшее по вашему номеру аккаунта, и введите код.

  4. 04

    Выберите выходной сервер с телефона

    Роутер отдаёт собственную страницу статуса по адресу, который вы ему только что назначили, — откройте её с телефона в той же сети и выберите локацию. Это единственное, что коробка без экрана не может сделать сама за себя.

Установка целиком
/interface/veth/add name=veth-fvpn address=172.31.254.2/30 gateway=172.31.254.1
/ip/address/add address=172.31.254.1/30 interface=veth-fvpn
/interface/list/member/add list=LAN interface=veth-fvpn
# A `flash` folder (hAP ac² and other 16 MB boards) means only flash/ survives a reboot: the state
# goes there, the log stays in RAM, and the image is pulled again at every boot.
:global fvRAMROOT ([:len [/file/find where name="flash"]] > 0)
:global fvSTATE "/forestvpn"
:global fvCMD "--agent --nat-lan --iface fvpn0 --config /etc/forestvpn/fvpn0.conf --policy-route --fwmark 51820 --table 100 --http-port 80 --report /etc/forestvpn/result.txt"
:if ($fvRAMROOT) do={
    :global fvSTATE
    :global fvCMD
    :set fvSTATE "flash/forestvpn"
    :set fvCMD ($fvCMD . " --log-dir /var/log")
}
/container/mounts/add list=fvpn-state src=$fvSTATE dst=/etc/forestvpn mode=rw
/container/add remote-image=suquant/fvpn:0.3.17 interface=veth-fvpn root-dir=/fvpn \
    mountlists=fvpn-state entrypoint=/mikrotik.sh cmd=$fvCMD \
    privileged=yes logging=yes start-on-boot=yes dns=172.31.254.1 name=fvpn
:if ($fvRAMROOT) do={
    /container/set [find name="fvpn"] start-on-boot=no
    /system/script/add name=forestvpn-repull comment="forestvpn" source={
:local c [/container/find where name="fvpn"]
:if ([:len $c] = 1) do={
    :local n 0
    :while ((![/container/get $c running]) && ($n < 60)) do={
        :set n ($n + 1)
        :log info ("ForestVPN: pulling the image into the RAM root, attempt " . $n)
        :do { /container/repull $c } on-error={}
        :local w 0
        :local s ""
        :while (($w < 60) && ($s = "")) do={
            :set w ($w + 1)
            :delay 5s
            :local st [:pick [/container/print as-value where name="fvpn"] 0]
            :if (($st->"stopped") = true) do={ :set s "stopped" }
            :if (($st->"download/extract failed") = true) do={ :set s "failed" }
        }
        :if ($s = "stopped") do={
            :do { /container/start $c } on-error={}
            :delay 30s
        } else={
            :log warning "ForestVPN: image pull failed, retrying in 60s"
            :delay 60s
        }
    }
    :if (![/container/get $c running]) do={
        :log error "ForestVPN: the container is still not running after 60 pulls; see /container/print"
    }
}
}
    /system/scheduler/add name=forestvpn-repull start-time=startup comment="forestvpn" \
        on-event="/system/script/run forestvpn-repull"
}
/container/start [find name="fvpn"]

Каждая строка здесь важна, а `cmd=` — особенно.

Без `--agent` точка входа запускает необработанный туннель вместо привязанного к аккаунту, ищет `.conf`, который никто не написал, и контейнер завершается с ошибкой `fvpn0 never appeared`. Второй важный момент — точка монтирования: образ основан на `scratch`, так что после перезапуска не сохраняется ничего, кроме смонтированного, и потеря монтирования с машинным ключом означает, что роутер вернётся как совершенно новое устройство, незаметно выпавшее из вашего аккаунта.

Первый запуск

Первый запуск

  1. 01

    Прочитайте код привязки

    Он выводится в /log, а роутер отдаёт страницу состояния по адресу http://172.31.254.2/.

  2. 02

    Введите его в приложении

    Откройте ForestVPN на телефоне, где вы вошли, и введите код. Привязка выполняется из приложения, а не с роутера.

  3. 03

    Выберите выход

    На странице состояния коснитесь локации.

Что работает на MikroTik

Что работает на MikroTik

Весь роутер — один туннель
Контейнер пропускает через туннель то, что ему передаёт RouterOS. Какой именно это трафик, решает RouterOS.
Закреплённый образ
Установка использует фиксированный тег образа, никогда не :latest, чтобы роутер, рядом с которым вы не стоите, не менял молча то, что запускает.
Платы с папкой flash
Платы вроде hAP ac² после перезагрузки сохраняют только папку flash. Блок установки это учитывает.

Пока нет на MikroTik: выбора сайтов или сервисов по назначению из самого ForestVPN. Решение о маршрутизации принимает RouterOS.

Что нового на MikroTik

Что нового на MikroTik

0.3.16

  • The router now makes its own account and name-lookup requests through the same fallback paths as the apps, so it keeps reaching ForestVPN on networks that interfere with them.

0.3.15

  • A router stays on the location you chose: the fallback path no longer moves it to another one.
  • Tested on an arm64 router before release; not yet on 32-bit ARM hardware.

0.3.14

  • Boards with a flash folder (the hAP ac² and other 16 MB boards) now keep their key and settings across a reboot.

Все заметки о выпусках

Обновления

Обновления

Переход на более новый образ — осознанный шаг, потому что тег закреплён.

Читать журнал изменений

Проверьте свою загрузку

Проверьте свою загрузку

Образ — suquant/fvpn:0.3.17. Тег закреплён и опубликован на Docker Hub; блок установки использует именно этот тег.

Удаление

Удаление

Остановите и удалите контейнер командами /container/stop и /container/remove, затем удалите его veth и адрес. Устройство остаётся в вашем аккаунте, пока вы не уберёте его в приложении.

Частые вопросы

Какие роутеры MikroTik работают?
Любой роутер с RouterOS 7.21 или новее и пакетом container. Образ собирается для arm, arm64 и x86 и проверен на реальном оборудовании arm64.
Нужен ли мне диск?
Нет, для простой контейнерной установки, показанной здесь. Платы с папкой flash после перезагрузки сохраняют только эту папку, и блок это учитывает.
Безопасно ли использовать :latest?
Нет. Установка закрепляет тег образа, чтобы роутер, рядом с которым вас нет, не менял молча то, что запускает.
Русский
Спросите нас о чём угодно