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 sebagai kontainer di router MikroTik yang menjalankan RouterOS 7. Ia terdaftar sebagai perangkat tersendiri dan mencetak kode pemasangan.
Kontainer RouterOS, diverifikasi pada perangkat keras nyata — sebuah MikroTik cAP ax mengambil image-nya, mendaftar, mencetak kode pemasangan, dan tersambung. Kontainer ini menyimpan kunci mesinnya sendiri dan meminta exit ke control plane dengan cara yang sama seperti ponsel.
Tiga baris di terminal RouterOS — sebuah /30 yang hanya ada di antara kontainer dan router, tidak ada yang perlu dicari di LAN Anda.
Image yang disematkan (pinned), bukan :latest — router yang tidak sedang Anda awasi langsung sebaiknya tidak pernah diam-diam berganti apa yang sedang dijalankannya.
Kode ini dicetak ke /log sebelum kontainer punya akses jaringan sama sekali. Buka aplikasi ForestVPN, yang sudah masuk dengan nomor akun Anda, lalu masukkan kodenya.
Router menyajikan halaman statusnya sendiri di alamat yang baru saja Anda berikan — buka dari ponsel di jaringan yang sama dan ketuk sebuah lokasi. Itulah satu-satunya hal yang tidak bisa dilakukan sendiri oleh kotak tanpa layar.
/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"]Setiap baris itu penting, `cmd=` yang paling penting.
Tanpa `--agent`, entrypoint menjalankan tunneller mentah alih-alih yang dikelola akun, mencari `.conf` yang tidak pernah ditulis siapa pun, dan kontainer keluar dengan pesan `fvpn0 never appeared`. Mount adalah bagian lainnya: image-nya adalah `scratch`, jadi tidak ada yang bertahan setelah restart kecuali yang di-mount, dan kehilangan mount kunci mesin berarti router kembali sebagai perangkat yang benar-benar baru yang diam-diam sudah lepas dari akun Anda.
Kode dicetak ke /log, dan router menyajikan halaman status di http://172.31.254.2/.
Buka ForestVPN di ponsel tempat Anda sudah masuk lalu masukkan kodenya. Tautan dibuat dari aplikasi, bukan dari router.
Di halaman status, ketuk sebuah lokasi.
Belum ada di MikroTik: memilih situs atau layanan per tujuan dari dalam ForestVPN. RouterOS yang memutuskan perutean.
Pindah ke image yang lebih baru adalah langkah yang disengaja, karena tag-nya dikunci.
Image-nya adalah suquant/fvpn:0.3.17. Tag dikunci dan diterbitkan di Docker Hub; blok pemasangan memakai persis tag ini.
Hentikan dan hapus kontainer dengan /container/stop dan /container/remove, lalu hapus veth dan alamatnya. Perangkat tetap ada di akun Anda sampai Anda menghapusnya di aplikasi.