Baixar

ForestVPN para MikroTik

O ForestVPN como contêiner em um roteador MikroTik com RouterOS 7. Ele se registra como um dispositivo próprio e imprime um código de pareamento.

Baixe agora

Baixe agora

suquant/fvpn:0.3.17

Requisitos

Requisitos

RouterOS
7.21 ou posterior. Versões anteriores rejeitam o bloco de instalação.
Suporte a contêineres
O pacote container instalado e o modo de dispositivo de contêineres ativado. Ativá-lo exige acesso físico ao roteador, regra da MikroTik, não nossa.
Processador
arm, arm64 ou x86.
Um roteador, um dispositivo
O contêiner guarda a própria chave de máquina e é vinculado à sua conta como um dispositivo próprio.
Instalação

Instalação

Um contêiner RouterOS, verificado em hardware real — um MikroTik cAP ax baixou a imagem, se registrou, imprimiu um código de pareamento e se conectou. Ele mantém sua própria chave de máquina e pede uma saída ao control plane da mesma forma que o telefone faz.

  1. 01

    Dê ao contêiner seu próprio endereço

    Três linhas no terminal do RouterOS — um /30 que existe apenas entre o contêiner e o roteador, nada para procurar na sua LAN.

  2. 02

    Adicione e inicie o contêiner

    Imagem fixada, não :latest — um roteador diante do qual você não está fisicamente nunca deveria trocar silenciosamente o que está executando.

  3. 03

    Leia o código de pareamento

    Ele é impresso em /log antes mesmo de o contêiner ter qualquer acesso à rede. Abra o app do ForestVPN, já conectado com seu número de conta, e digite o código.

  4. 04

    Escolha a saída pelo seu telefone

    O roteador serve sua própria página de status no endereço que você acabou de dar a ele — abra-a em um telefone na mesma rede e toque em uma localização. Essa é a única coisa que uma caixa sem tela não consegue fazer sozinha.

A instalação 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 linha é essencial, `cmd=` mais do que qualquer outra.

Sem `--agent`, o entrypoint executa o tunneller bruto em vez do gerenciado pela conta, procura por um `.conf` que ninguém escreveu, e o contêiner encerra com `fvpn0 never appeared`. O outro ponto é o mount: a imagem é `scratch`, então nada sobrevive a um reinício exceto o que estiver montado, e perder o mount da chave de máquina significa que o roteador volta como um dispositivo totalmente novo que saiu silenciosamente da sua conta.

Primeiro uso

Primeiro uso

  1. 01

    Leia o código de pareamento

    Ele é impresso em /log, e o roteador serve uma página de status em http://172.31.254.2/.

  2. 02

    Digite no app

    Abra o ForestVPN em um celular em que você está conectado e digite o código. O vínculo é feito pelo app, não pelo roteador.

  3. 03

    Escolha a saída

    Na página de status, toque em uma localização.

O que funciona no MikroTik

O que funciona no MikroTik

Roteador inteiro, um túnel
O contêiner leva pelo túnel o que o RouterOS entrega a ele. O RouterOS decide qual tráfego é esse.
Imagem fixada
A instalação usa uma tag de imagem fixa, nunca :latest, para que um roteador diante do qual você não está nunca troque em silêncio o que executa.
Placas com pasta flash
Placas como a hAP ac² mantêm só a pasta flash após uma reinicialização. O bloco de instalação cuida disso.

Ainda não no MikroTik: escolher sites ou serviços por destino de dentro do ForestVPN. O RouterOS toma a decisão de roteamento.

Novidades no MikroTik

Novidades no 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 as notas de versão

Atualizações

Atualizações

Passar para uma imagem mais nova é uma decisão deliberada, porque a tag está fixada.

Ler o registro de alterações

Verifique seu download

Verifique seu download

A imagem é suquant/fvpn:0.3.17. A tag está fixada e publicada no Docker Hub; o bloco de instalação usa exatamente esta tag.

Desinstalação

Desinstalação

Pare e remova o contêiner com /container/stop e /container/remove, depois exclua o veth e o endereço dele. O dispositivo continua na sua conta até você removê-lo no app.

Perguntas frequentes

Quais roteadores MikroTik funcionam?
Qualquer roteador com RouterOS 7.21 ou posterior e o pacote container. A imagem é compilada para arm, arm64 e x86, e foi verificada em hardware arm64 real.
Preciso de um disco?
Não, para a instalação simples em contêiner mostrada aqui. Placas com pasta flash mantêm só essa pasta após uma reinicialização, e o bloco cuida disso.
É seguro usar :latest?
Não. A instalação fixa uma tag de imagem para que um roteador perto do qual você não está nunca troque em silêncio o que executa.
Português
Pergunte qualquer coisa