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 comme conteneur sur un routeur MikroTik sous RouterOS 7. Il s’enregistre comme son propre appareil et affiche un code d’association.
Un conteneur RouterOS, vérifié sur du matériel réel — un MikroTik cAP ax a récupéré l'image, s'est enregistré, a imprimé un code d'association, puis s'est connecté. Il détient sa propre clé de machine et demande une sortie au plan de contrôle de la même façon que le téléphone.
Trois lignes dans le terminal de RouterOS — un /30 qui n'existe qu'entre le conteneur et le routeur, rien à chercher sur votre LAN.
Image épinglée, pas :latest — un routeur devant lequel vous ne vous trouvez pas ne devrait jamais changer silencieusement ce qu'il exécute.
Il s'affiche dans /log avant même que le conteneur ait une quelconque accessibilité réseau. Ouvrez l'application ForestVPN, déjà connectée avec votre numéro de compte, et saisissez le code.
Le routeur sert sa propre page d'état à l'adresse que vous venez de lui donner — ouvrez-la depuis un téléphone sur le même réseau et appuyez sur un emplacement. C'est la seule chose qu'un boîtier sans écran ne peut pas faire lui-même.
/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"]Chaque ligne est essentielle, `cmd=` plus que toute autre.
Sans `--agent`, le point d'entrée exécute le tunnelier brut au lieu de celui géré par le compte, cherche un `.conf` que personne n'a écrit, et le conteneur s'arrête avec `fvpn0 never appeared`. L'autre point essentiel est le montage : l'image est `scratch`, donc rien ne survit à un redémarrage sauf ce qui est monté, et perdre le montage de la clé de machine signifie que le routeur revient comme un tout nouvel appareil, qui a silencieusement disparu de votre compte.
Il s’affiche dans /log, et le routeur sert une page d’état à l’adresse http://172.31.254.2/.
Ouvrez ForestVPN sur un téléphone où vous êtes connecté et saisissez le code. L’association se fait depuis l’app, pas depuis le routeur.
Sur la page d’état, touchez un emplacement.
Pas encore sur MikroTik : choisir des sites ou des services par destination depuis ForestVPN. RouterOS prend la décision de routage.
Passer à une image plus récente est une étape délibérée, car l’étiquette est figée.
L’image est suquant/fvpn:0.3.17. L’étiquette est figée et publiée sur Docker Hub ; le bloc d’installation utilise exactement cette étiquette.
Arrêtez et supprimez le conteneur avec /container/stop et /container/remove, puis supprimez son veth et son adresse. L’appareil reste dans votre compte jusqu’à ce que vous le retiriez dans l’app.