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 como contenedor en un router MikroTik con RouterOS 7. Se registra como dispositivo propio y muestra un código de emparejamiento.
Un contenedor RouterOS, verificado en hardware real — un MikroTik cAP ax descargó la imagen, se registró, imprimió un código de vinculación y se conectó. Guarda su propia clave de máquina y le pide una salida al plano de control igual que lo hace el teléfono.
Tres líneas en la terminal de RouterOS — un /30 que solo existe entre el contenedor y el router, nada que buscar en tu LAN.
Imagen fijada, no :latest — un router delante del que no estás no debería cambiar en silencio lo que ejecuta.
Se imprime en /log antes de que el contenedor tenga ninguna conectividad de red. Abre la app de ForestVPN, ya con tu número de cuenta iniciado, e introduce el código.
El router sirve su propia página de estado en la dirección que le acabas de dar — ábrela desde un teléfono en la misma red y toca una ubicación. Eso es lo único que un aparato sin pantalla no puede hacer por sí mismo.
/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"]Cada línea es imprescindible, `cmd=` la que más.
Sin `--agent` el punto de entrada ejecuta el tunelizador en crudo en lugar del gestionado por la cuenta, busca un `.conf` que nadie escribió, y el contenedor termina con `fvpn0 never appeared`. El montaje es la otra pieza clave: la imagen es `scratch`, así que nada sobrevive a un reinicio salvo lo montado, y perder el montaje de la clave de máquina hace que el router vuelva como un dispositivo completamente nuevo que se ha desvinculado en silencio de tu cuenta.
Se imprime en /log, y el router sirve una página de estado en http://172.31.254.2/.
Abre ForestVPN en un móvil donde hayas iniciado sesión e introduce el código. El vínculo se crea desde la app, no desde el router.
En la página de estado, toca una ubicación.
Aún no en MikroTik: elegir sitios o servicios por destino desde ForestVPN. RouterOS toma la decisión de enrutamiento.
Pasar a una imagen más reciente es un paso deliberado, porque la etiqueta está fijada.
La imagen es suquant/fvpn:0.3.17. La etiqueta está fijada y publicada en Docker Hub; el bloque de instalación usa exactamente esta etiqueta.
Detén y elimina el contenedor con /container/stop y /container/remove, y luego elimina su veth y su dirección. El dispositivo sigue en tu cuenta hasta que lo quites en la app.