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.
ForestVPN как контейнер на роутере MikroTik с RouterOS 7. Он регистрируется как отдельное устройство и выводит код привязки.
Контейнер RouterOS, проверенный на реальном оборудовании: MikroTik cAP ax скачал образ, зарегистрировался, вывел код сопряжения и подключился. У него свой собственный машинный ключ, и он запрашивает выходной сервер у управляющей плоскости точно так же, как это делает телефон.
Три строки в терминале RouterOS — подсеть /30, которая существует только между контейнером и роутером, искать её в вашей локальной сети не придётся.
Зафиксированный образ, а не :latest — роутер, перед которым вы не стоите, никогда не должен незаметно подменять то, что на нём запущено.
Он выводится в /log ещё до того, как у контейнера появится хоть какая-то сетевая доступность. Откройте приложение ForestVPN, уже вошедшее по вашему номеру аккаунта, и введите код.
Роутер отдаёт собственную страницу статуса по адресу, который вы ему только что назначили, — откройте её с телефона в той же сети и выберите локацию. Это единственное, что коробка без экрана не может сделать сама за себя.
/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`, так что после перезапуска не сохраняется ничего, кроме смонтированного, и потеря монтирования с машинным ключом означает, что роутер вернётся как совершенно новое устройство, незаметно выпавшее из вашего аккаунта.
Он выводится в /log, а роутер отдаёт страницу состояния по адресу http://172.31.254.2/.
Откройте ForestVPN на телефоне, где вы вошли, и введите код. Привязка выполняется из приложения, а не с роутера.
На странице состояния коснитесь локации.
Пока нет на MikroTik: выбора сайтов или сервисов по назначению из самого ForestVPN. Решение о маршрутизации принимает RouterOS.
Переход на более новый образ — осознанный шаг, потому что тег закреплён.
Образ — suquant/fvpn:0.3.17. Тег закреплён и опубликован на Docker Hub; блок установки использует именно этот тег.
Остановите и удалите контейнер командами /container/stop и /container/remove, затем удалите его veth и адрес. Устройство остаётся в вашем аккаунте, пока вы не уберёте его в приложении.