Descargar

ForestVPN para MikroTik

ForestVPN como contenedor en un router MikroTik con RouterOS 7. Se registra como dispositivo propio y muestra un código de emparejamiento.

Consíguela

Consíguela

suquant/fvpn:0.3.17

Requisitos

Requisitos

RouterOS
7.21 o posterior. Las versiones anteriores rechazan el bloque de instalación.
Compatibilidad con contenedores
El paquete container instalado y el modo de dispositivo de contenedores activado. Activarlo exige acceso físico al router, una norma de MikroTik, no nuestra.
Procesador
arm, arm64 o x86.
Un router, un dispositivo
El contenedor guarda su propia clave de máquina y queda vinculado a tu cuenta como un dispositivo propio.
Instalación

Instalación

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.

  1. 01

    Dale al contenedor su propia dirección

    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.

  2. 02

    Añade e inicia el contenedor

    Imagen fijada, no :latest — un router delante del que no estás no debería cambiar en silencio lo que ejecuta.

  3. 03

    Lee el código de vinculación

    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.

  4. 04

    Elige la salida desde tu teléfono

    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.

La instalación completa
/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.

Primer uso

Primer uso

  1. 01

    Lee el código de emparejamiento

    Se imprime en /log, y el router sirve una página de estado en http://172.31.254.2/.

  2. 02

    Introdúcelo en la app

    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.

  3. 03

    Elige la salida

    En la página de estado, toca una ubicación.

Qué funciona en MikroTik

Qué funciona en MikroTik

Todo el router, un túnel
El contenedor envía por el túnel lo que RouterOS le entrega. RouterOS decide qué tráfico es ese.
Imagen fijada
La instalación usa una etiqueta de imagen fija, nunca :latest, para que un router frente al que no estás nunca cambie en silencio lo que ejecuta.
Placas con carpeta flash
Placas como la hAP ac² conservan solo la carpeta flash tras un reinicio. El bloque de instalación lo contempla.

Aún no en MikroTik: elegir sitios o servicios por destino desde ForestVPN. RouterOS toma la decisión de enrutamiento.

Novedades en MikroTik

Novedades en 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.

Todas las notas de versión

Actualizaciones

Actualizaciones

Pasar a una imagen más reciente es un paso deliberado, porque la etiqueta está fijada.

Leer el registro de cambios

Verifica tu descarga

Verifica tu descarga

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.

Desinstalación

Desinstalación

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.

Preguntas frecuentes

¿Qué routers MikroTik funcionan?
Cualquier router con RouterOS 7.21 o posterior y el paquete container. La imagen se compila para arm, arm64 y x86, y se ha verificado en hardware arm64 real.
¿Necesito un disco?
No, para la instalación simple en contenedor que se muestra aquí. Las placas con carpeta flash conservan solo esa carpeta tras un reinicio, y el bloque lo contempla.
¿Es seguro usar :latest?
No. La instalación fija una etiqueta de imagen para que un router cerca del cual no estás nunca cambie en silencio lo que ejecuta.
Español
Pregúntanos lo que sea