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 als Container auf einem MikroTik-Router mit RouterOS 7. Er meldet sich als eigenes Gerät an und gibt einen Kopplungscode aus.
Ein RouterOS-Container, auf echter Hardware verifiziert — ein MikroTik cAP ax hat das Image gezogen, sich registriert, einen Pairing-Code ausgegeben und sich verbunden. Er hält seinen eigenen Maschinenschlüssel und fragt die Kontrollebene nach einem Exit, genau wie das Telefon.
Drei Zeilen im RouterOS-Terminal — ein /30, das nur zwischen dem Container und dem Router existiert, nichts, wonach Sie in Ihrem LAN suchen müssten.
Angepinntes Image, nicht :latest — ein Router, vor dem Sie nicht stehen, sollte nie unbemerkt austauschen, was er ausführt.
Er wird nach /log ausgegeben, noch bevor der Container überhaupt Netzwerkerreichbarkeit hat. Öffnen Sie die ForestVPN-App, bereits mit Ihrer Kontonummer angemeldet, und geben Sie den Code ein.
Der Router stellt seine eigene Statusseite unter der Adresse bereit, die Sie ihm gerade gegeben haben — öffnen Sie sie von einem Telefon im selben Netzwerk und tippen Sie einen Standort an. Das ist das Einzige, was eine Box ohne Bildschirm nicht selbst erledigen kann.
/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"]Jede Zeile ist entscheidend, `cmd=` vor allem.
Ohne `--agent` führt der Entrypoint den rohen Tunnel-Prozess statt des kontoverwalteten aus, sucht nach einer `.conf`, die niemand geschrieben hat, und der Container beendet sich mit `fvpn0 never appeared`. Der Mount ist der andere Punkt: Das Image ist `scratch`, also überlebt nichts einen Neustart außer dem, was gemountet ist, und den Mount des Maschinenschlüssels zu verlieren bedeutet, dass der Router als brandneues Gerät zurückkommt, das stillschweigend aus Ihrem Konto gefallen ist.
Er wird in /log ausgegeben, und der Router stellt eine Statusseite unter http://172.31.254.2/ bereit.
Öffne ForestVPN auf einem Handy, auf dem du angemeldet bist, und gib den Code ein. Die Verknüpfung entsteht in der App, nicht auf dem Router.
Tippe auf der Statusseite auf einen Standort.
Noch nicht auf MikroTik: die Wahl von Seiten oder Diensten pro Ziel aus ForestVPN heraus. RouterOS trifft die Routing-Entscheidung.
Der Wechsel auf ein neueres Image ist ein bewusster Schritt, weil das Tag festgelegt ist.
Das Image ist suquant/fvpn:0.3.17. Das Tag ist festgelegt und auf Docker Hub veröffentlicht; der Installationsblock nutzt genau dieses Tag.
Stoppe und entferne den Container mit /container/stop und /container/remove, lösche dann sein veth und seine Adresse. Das Gerät bleibt in deinem Konto, bis du es in der App entfernst.