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 بهصورت کانتینر روی روتر MikroTik با RouterOS 7. خود را بهعنوان دستگاهی مستقل ثبت میکند و یک کد جفتسازی چاپ میکند.
یک کانتینر RouterOS، روی سختافزار واقعی تأییدشده — یک MikroTik cAP ax ایمیج را کشید، ثبتنام کرد، یک کد جفتسازی چاپ کرد و متصل شد. کلید دستگاه خودش را نگه میدارد و درست مثل گوشی از صفحهٔ کنترل خروجی درخواست میکند.
سه خط در ترمینال RouterOS — یک /30 که فقط بین کانتینر و روتر وجود دارد، چیزی برای گشتن روی LAN شما نیست.
ایمیجی پینشده، نه :latest — روتری که جلویش نیستید هرگز نباید بیسروصدا چیزی را که اجرا میکند عوض کند.
پیش از اینکه کانتینر هیچ دسترسی شبکهای داشته باشد، در /log چاپ میشود. اپ ForestVPN را باز کنید، که از قبل با شمارهٔ حساب شما وارد شده، و کد را وارد کنید.
روتر روی همان آدرسی که به آن دادهاید صفحهٔ وضعیت خودش را ارائه میکند — آن را از گوشیای روی همان شبکه باز کنید و روی یک مکان بزنید. این تنها کاری است که یک جعبهٔ بدون صفحهنمایش نمیتواند خودش انجام دهد.
/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"]هر خط اهمیت دارد، `cmd=` بیش از همه.
بدون `--agent` نقطهٔ ورود بهجای نسخهٔ مدیریتشده توسط حساب، تونلزن خام را اجرا میکند، دنبال یک `.conf` میگردد که کسی ننوشته، و کانتینر با `fvpn0 never appeared` خارج میشود. مانت هم نکتهٔ دیگر است: ایمیج `scratch` است، پس چیزی از راهاندازی مجدد جان سالم بهدر نمیبرد جز آنچه مانت شده، و از دستدادن مانت کلید دستگاه یعنی روتر بهعنوان دستگاهی کاملاً جدید بازمیگردد که بیسروصدا از حساب شما جدا شده.
در /log چاپ میشود و روتر یک صفحهٔ وضعیت در http://172.31.254.2/ ارائه میدهد.
ForestVPN را روی گوشیای که واردش شدهاید باز کنید و کد را وارد کنید. پیوند از برنامه ساخته میشود نه از روتر.
در صفحهٔ وضعیت روی یک مکان بزنید.
هنوز روی MikroTik نیست: انتخاب سایتها یا سرویسها بر اساس مقصد از داخل ForestVPN. تصمیم مسیریابی را RouterOS میگیرد.
تصویر suquant/fvpn:0.3.17 است. برچسب ثابت شده و در Docker Hub منتشر شده است؛ بلوک نصب دقیقاً از همین برچسب استفاده میکند.
کانتینر را با /container/stop و /container/remove متوقف و حذف کنید، سپس veth و نشانیاش را پاک کنید. دستگاه تا وقتی در برنامه حذفش نکنید در حسابتان میماند.