Завантажити

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?
Ні. Встановлення закріплює тег образу, щоб роутер, біля якого ви не перебуваєте, не змінював мовчки те, що запускає.
Українська
Запитайте нас про будь-що