إذا أردت أن ترسل تطبيقات ZimaOS محددة حركة مرورها عبر VPN تجاري، فإن سلسلة نقاش المجتمع تشير إلى Gluetun بدلًا من اعتبار إدخال WireGuard في متجر التطبيقات واجهة بسيطة لتحميل إعدادات العميل. سأل المؤلف في البداية عن كيفية تشغيل WireGuard كعميل، ثم عثر على Gluetun في ZimaOS ووثّق نهج شبكة Docker.
يتمثل التصميم الأساسي في أن يشارك التطبيق المستهدف مساحة أسماء الشبكة الخاصة بـ Gluetun. تتولى Gluetun نفق VPN وجدار الحماية والمنافذ المنشورة؛ ثم يستخدم qBittorrent أو أي تطبيق آخر حزمة الشبكة تلك بدلًا من واجهة الجسر العادية الخاصة به.
وجود WireGuard وTailscale في متجر تطبيقات ZimaOS لا يعني أنهما عميل VPN لموفر خدمة
أجاب Zima-Giorgio بأن WireGuard وTailscale متاحان في متجر تطبيقات ZimaOS. ثم أوضح المؤلف الجزء المفقود: كان يريد سير عمل عميل يمكن فيه استيراد إعدادات الموفر واستخدامها لتوجيه حركة مرور التطبيقات.
هذا التمييز مهم. يُعدّ كل من Tailscale ونقطة نهاية WireGuard المستضافة ذاتيًا مفيدًا لشبكات الوصول الخاص عن بُعد، بينما صُممت Gluetun خصيصًا لربط أعباء عمل Docker بموفري VPN تجاريين مدعومين باستخدام OpenVPN أو WireGuard.
اكتشاف Gluetun في سلسلة المصدر
كتب المؤلف لاحقًا أن ZimaOS يتضمن Gluetun، رغم أن البحث في متجر التطبيقات عن المصطلح العام «VPN» لم يكن يوضّح ذلك.
كانت النصيحة الأصلية هي تغيير شبكة التطبيق الذي يمر عبر النفق من وضع الجسر العادي إلى مساحة أسماء الشبكة الخاصة بـ Gluetun، وإزالة المنافذ المنشورة الخاصة بالتطبيق، لأن Gluetun هو الذي ينبغي أن ينشرها.
network_mode: container:gluetun
تكون هذه الصياغة صالحة عندما تنضم حاوية خارجية إلى حاوية Gluetun قيد التشغيل بالفعل عبر اسمها.
service:gluetun مقابل container:gluetun
تميّز وثائق Gluetun الحالية بين حالتين شائعتين في Compose:
# مشروع Compose نفسه
network_mode: "service:gluetun"
و:
# مشروع Compose منفصل / حاوية خارجية
network_mode: "container:gluetun"
ظهر الشكلان من الناحية المفاهيمية في نقاش المجتمع. ويعتمد الشكل الصحيح على ما إذا كانت Gluetun والتطبيق الذي يستخدم التوجيه موجودين في مكدس Compose نفسه.
دليل الشبكات الحالي لحاوية Gluetun
لماذا يمكن لـ qBittorrent أن يسرّب عنوان IP الخاص بموفر خدمة الإنترنت
أفاد مستخدم لاحق بأن Gluetun نفسه أظهر عنوان IP تابعًا لـ NordVPN في سجلاته، لكن qBittorrent بدا أنه لا يزال يستخدم عنوان مزود خدمة الإنترنت عند الاختبار. تعني هذه الأعراض أن «Gluetun متصل» و«qBittorrent يشارك بالفعل مكدس شبكة Gluetun» أمران يجب اختبارهـما بشكل منفصل.
تحقق من تعريف حاوية qBittorrent وتأكد من أن وضع الشبكة الخاص بها متصل فعليًا بـ Gluetun. قد تؤدي واجهة الجسر العادية بجانب Gluetun إلى استخدام qBittorrent لمسار المضيف المعتاد.
انقل منافذ qBittorrent إلى حاوية Gluetun
تقول وثائق Gluetun الحالية إنه عندما تشارك حاوية أخرى مكدس شبكتها، ينبغي نشر منافذ التطبيق المستهدف على Gluetun.
على سبيل المثال، إذا كان qBittorrent يستمع داخليًا على المنفذ 8080:
services:
gluetun:
image: qmcgaw/gluetun
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun:/dev/net/tun
ports:
- "8080:8080"
qbittorrent:
image: your-qbittorrent-image
network_mode: "service:gluetun"
لا تنشر منفذ qBittorrent نفسه على كلتا الحاويتين. فهذا ينشئ تعارضات المنافذ الموضحة في النقاش الأصلي.
الفيديو المشار إليه في نقاش المجتمع
ذكر مشارك لاحق صراحةً أنه اتبع فيديو DB Tech عن CasaOS أثناء محاولته توجيه qBittorrent عبر Gluetun. وبما أن هذا الفيديو جزء من مسار استكشاف الأخطاء وإصلاحها في النقاش الأصلي، فقد أُبقي عليه هنا.
يسبق الفيديو نقاش ZimaOS ويستخدم CasaOS، لذا استخدمه لفهم بنية Docker وGluetun بدلًا من نسخ كل خطوة في الواجهة حرفيًا.
أكد مستخدم لاحق نجاح مكدس Compose مخصص
في نوفمبر 2025، قال عضو آخر في المجتمع إن الحل الموثوق هو نشر qBittorrent وGluetun معًا كمكدس تطبيق مخصص أو Compose، ثم إعداد مزود VPN هناك. وذكر أنه عند الوصول إلى qBittorrent عبر منفذ المضيف الذي اختاره، ظهرت حركة البيانات موجهة عبر VPN.
يربط النقاش الأصلي بـ Gist أنشأه أحد المستخدمين لهذا الإعداد. تعامل مع ملفات Compose التابعة لجهات خارجية على أنها أمثلة: راجع متغيرات البيئة وإصدارات الصور والأسرار وإعدادات الشبكة قبل نشرها.
يوفر Gluetun مفتاح إيقاف لـ VPN
تصف وثائق Gluetun الحالية جدار الحماية الخاص به بأنه مفتاح إيقاف: عندما يكون مسار VPN غير متاح، يحظر جدار الحماية حركة البيانات التي ينبغي ألا تخرج عبر الواجهة العادية. وهذا أحد أسباب تفضيل مشاركة مكدس شبكة Gluetun على مجرد تشغيل حاوية VPN بجانب qBittorrent.
لا تعطل قواعد جدار Gluetun النارية لمجرد جعل منفذ ما قابلًا للوصول. أصلح مسارات الشبكة المحلية/الخارجية المقصودة بدلًا من ذلك.
السماح بالوصول إلى الشبكة المحلية بشكل مقصود
إذا كان التطبيق الذي يجري توجيهه يحتاج إلى الوصول إلى الشبكات الفرعية المحلية، فإن Gluetun يدعم FIREWALL_OUTBOUND_SUBNETSعلى سبيل المثال:
FIREWALL_OUTBOUND_SUBNETS=192.168.1.0/24
استخدم الشبكة الفرعية الفعلية لشبكتك المحلية وتجنّب تداخلها مع نطاق نفق VPN.
إعادة توجيه المنافذ لدى مزوّد VPN تختلف عن تعيين منافذ Docker
تُميّز وثائق Gluetun بين:
- نشر منافذ Docker: إتاحة الوصول إلى واجهة الويب في qBittorrent على شبكتك المحلية.
- إعادة توجيه المنافذ لدى مزوّد VPN: الحصول على منفذ وارد من مزوّد VPN يدعم ذلك.
لا تفعّل VPN_PORT_FORWARDING فقط لإصلاح الوصول المحلي إلى واجهة الويب في qBittorrent. فهما يحلان مشكلتين مختلفتين.
قائمة التحقق من Gluetun في ZimaOS
- اضبط Gluetun لمزوّد VPN الفعلي لديك باستخدام وثائق المزوّد الحالية.
- تأكد من أن سجلات Gluetun تعرض عنوان IP المتوقع للخروج عبر VPN.
- ضع التطبيق المستهدف في مساحة أسماء الشبكة الخاصة بـ Gluetun.
- استخدم
service:gluetunلنفس مكدس Compose أوcontainer:gluetunلحاوية خارجية. - أزل المنافذ المنشورة المكررة من التطبيق الذي يجري توجيهه.
- انشر منافذ واجهة الويب/الاستماع المطلوبة على Gluetun.
- أعد تشغيل المكدس.
- اختبر عنوان IP العام للتطبيق المستهدف بشكل مستقل عن سجل Gluetun نفسه.
- احتفظ ببيانات اعتماد VPN والمفاتيح الخاصة لـ WireGuard خارج ملفات Compose العامة.
الأسئلة الشائعة حول عميل VPN في ZimaOS
هل يستطيع ZimaOS توجيه qBittorrent فقط عبر VPN؟
نعم. استخدم موضوع المجتمع Gluetun تحديدًا لمشاركة مكدس شبكة VPN الخاص به مع تطبيقات Docker محددة بدلًا من تمرير كل خدمة من خدمات ZimaOS عبر النفق.
لماذا أظهر Gluetun عنوان IP الخاص بـ VPN بينما ظل qBittorrent يعرض عنوان IP الخاص بمزوّد خدمة الإنترنت؟
لأن حاوية VPN قد تكون سليمة بينما لا يزال qBittorrent متصلًا بشبكته العادية. تحقّق من وضع الشبكة الفعلي في qBittorrent.
لماذا يؤدي تغيير المنافذ إلى تعطيل واجهة الويب في qBittorrent؟
عندما يشارك qBittorrent مساحة أسماء الشبكة الخاصة بـ Gluetun، انشر منفذ واجهة الويب على Gluetun بدلًا من نشر المنفذ نفسه على qBittorrent.
هل أستخدم service:gluetun أم container:gluetun؟
استخدم service:gluetun عندما تكون كلتا الخدمتين في مشروع Compose نفسه. استخدم container:gluetun عندما تنضم حاوية خارجية إلى حاوية Gluetun مُسمّاة.
