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 لا توجد إلا بين الحاوية والراوتر، لا شيء تبحث عنه في شبكتك المحلية.
صورة مثبَّتة الإصدار، لا :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`. النقطة الأخرى هي التركيب (mount): الصورة هي `scratch`، فلا شيء ينجو من إعادة التشغيل سوى ما هو مُركَّب، وفقدان تركيب مفتاح الجهاز يعني أن الراوتر يعود كجهاز جديد تمامًا سقط بصمت عن حسابك.
يُطبع في /log، ويقدّم المُوجِّه صفحة حالة على http://172.31.254.2/.
افتح ForestVPN على هاتف سجّلت الدخول فيه وأدخل الرمز. يتم الربط من التطبيق لا من المُوجِّه.
في صفحة الحالة اضغط على موقع.
غير متوفر بعد على MikroTik: اختيار المواقع أو الخدمات حسب الوجهة من داخل ForestVPN. يتخذ RouterOS قرار التوجيه.
الصورة هي suquant/fvpn:0.3.17. الوسم مثبَّت ومنشور على Docker Hub؛ وتستخدم كتلة التثبيت هذا الوسم تحديدًا.
أوقف الحاوية وأزلها بالأمرين /container/stop و/container/remove، ثم احذف veth وعنوانها. يبقى الجهاز في حسابك إلى أن تزيله في التطبيق.