يمكن لحاويتك أن تستمع على UDP 1195 بينما ينشر المضيف 1194، وهذا صحيح ما دام التعيين يقول ذلك. تشكّل الأرقام جدول ترجمة: يتصل العميل بمنفذ المضيف، ويعيد Docker كتابة الوجهة إلى منفذ الحاوية، ويجيب OpenVPN على المنفذ الذي يسمّيه إعداده الخاص. أي عدم تطابق في أحد هذه الحلقات ينتج فشلًا صامتًا يشبه جدار حماية. أما الشهادات والشيفرات فتقع بعد ذلك ولا تستطيع إصلاحه.

تتبّع حزمة واحدة من العميل إلى العملية قبل أن تغيّر أي شيء يتعلق بالمصادقة.

ثلاثة أرقام، اتصال واحد

الأرقام الثلاثة هي الوجهة البعيدة التي يستخدمها العميل، والتعيين المنشور على المضيف، والمستمع داخل الحاوية. ليس شرطًا أن تتساوى، لكن يجب أن تتسلسل. تساوي الأرقام حالة خاصة تصادف أنها الشائعة، ولهذا يسهل كتابة عدم التطابق مرة واحدة ويصعب رؤيته لاحقًا.

اكتب السلسلة في سطر واحد قبل التشخيص: عنوان العميل ومنفذه، وتعيين المضيف، ومستمع الحاوية، والنقل. يظهر العيب في السلسلة كرقم يتكرر مرتين بقيمتين مختلفتين.

LocationExample
Remote client destinationHost address, UDP 1194
Published mappingHost UDP 1194 to container UDP 1195
Container listenerOpenVPN on UDP 1195

ما تقوله الصيغة القصيرة حقًا

في الصيغة القصيرة يكون الجانب الأيسر منفذ المضيف والجانب الأيمن منفذ الحاوية، ولاحقة الشرطة المائلة تختار النقل. احذف اللاحقة فيعامل Docker التعيين كـ TCP، وبالتالي فإن مستمع UDP خلف تعيين بلا بروتوكول هو مستمع لا يستطيع أحد الوصول إليه. هذا السلوك الافتراضي موثّق ومع ذلك يفاجئ من طابقوا الأرقام واعتقدوا أنهم انتهوا.

تثبّت الصيغة الطويلة عنوان الربط والبروتوكول صراحةً، وهذا يستحق الأسطر الإضافية في أي شيء يواجه شبكة. اقرأ التعيين المنشور مرة أخرى بدلًا من الوثوق بالملف الذي أنتجه.

ports:
  - 1194:1195/udp

أين يمكن أن تتوقف الحزمة

يمكن إسقاط الطلب قبل Docker أو عنده أو عند المستمع. أمام Docker قد يكون هناك جدار حماية سحابي أو موجّه يقوم بالتمرير بنفسه، ويحتاج ذلك الجهاز إلى المنفذ المواجه للمضيف وإلى النقل الصحيح. وداخل Docker، يحوّل التعيين إلى منفذ حاوية خاطئ إلى مقبس مغلق.

ثم المستمع: يسمّي إعداد OpenVPN منفذًا وبروتوكولًا، والعميل الذي يصل إلى منفذ مختلف داخل الحاوية لا يصل إلى شيء. اختبار خدمة UDP عبر TCP لا يثبت شيئًا في أي من هذه المراحل، لذا استخدم النقل الذي سيستخدمه العميل.

عناوين الربط تحدد إمكانية الوصول

التعيين المنشور المرتبط بـ loopback لا يمكن الوصول إليه إلا من المضيف، بينما المرتبط بكل الواجهات يمكن الوصول إليه حيثما يسمح جدار الحماية. يبدو الاثنان متطابقين في ملف Compose يحذف العنوان، والافتراضي في Docker هو الأوسع.

قرّر أي تعريض يقصده النشر، ثم اكتبه صراحةً. الاختبار الداخلي الذي يتصل عبر loopback والعميل البعيد الذي لا يستطيع الاتصال يمكن أن يكونا وصفين دقيقين للحاوية نفسها.

اقرأ الحالة الجارية

افحص التعيين الفعلي للحاوية الجارية والمستمع في نطاق شبكتها. قد يكون ملف Compose قد عُدّل بعد بدء الحاوية، وقد تعلن بيانات الصورة عن منفذ دون نشره، وقد تحتجز حاوية ثانية منفذ المضيف. الإعلان عن منفذ في صورة ليس نشره، ولا أي منهما هو نفسه الاستماع.

ثلاث حالات مختلفة، وثلاثة أوامر مختلفة، والآمر الأخير وحده يتعلق بـ OpenVPN.

بعد أن يصبح التعيين صحيحًا

بمجرد وصول الحزمة إلى OpenVPN، يصبح سجله المكان الذي تقرأ فيه عن TLS والمصادقة. إعادة إنشاء الشهادات لإصلاح حزمة لم تصل قط عمل مهدر يضيف متغيّرًا ثانيًا. احتفظ بملاحظة التعيين بجانب ملف العميل حتى يقرأ الشخص التالي سطرًا واحدًا بدلًا من إعادة اكتشاف الأرقام الثلاثة. التقاط حزمة واحد على جانب المضيف يحسم أي الحلقات الثلاث خاطئة، ويكلّف أقل من تجديد الشهادة.

نشر الجسر هو الحالة الموصوفة هنا. شبكة المضيف وعناوين الحاويات الموجّهة تتجاوز الترجمة، لذا تعني الأرقام نفسها شيئًا مختلفًا في تلك التصاميم.

مقالات ذات صلة