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

لماذا لا يملك نفق عامل طريق خروج بعد

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

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

لذا اختبر الطبقات الثلاث بدلا من العميل، وغيّر واحدة في كل مرة حتى يكون للنتيجة معنى.

التمرير مفتاح في النواة يجب أن تجعله دائما

افحص القيمة الحالية قبل تغييرها، ثم اضبطها وتأكد من أن التغيير نفّذ.

sysctl net.ipv4.ip_forward
sysctl -w net.ipv4.ip_forward=1
sysctl net.ipv4.ip_forward

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

اجعله دائما في ملف تحت /etc/sysctl.d/، ثم طبق ذلك الملف بدلا من إعادة التشغيل لتعرف النتيجة. على FreeBSD المكافئ هو net.inet.ip.forwarding، مع gateway_enable=YES في rc.conf للاستمرارية. جهاز يبلغ بأن التمرير معطل يفسر فئة كاملة من تقارير «تصل الحزم ولا يعود شيء». افحص الإعداد بعد كل ترقية أيضا، لأن نواة أعيد بناؤها أو صورة جهاز مستبدلة قد تعيد ضبطه دون إخبار أحد.

اختر masquerade أو عنوان ترجمة ثابتا واحدا

مع عنوان خارجي ديناميكي، يكون masquerading أبسط صيغة صحيحة. سمّ شبكة النفق الفرعية كمصدر والواجهة الخارجية كمخرج.

iptables -t nat -A POSTROUTING -s 10.9.0.0/24 -o eth0 -j MASQUERADE

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

iptables -t nat -A POSTROUTING -s 10.9.0.0/24 -j SNAT --to-source 198.51.100.10

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

جدول التصفية هو البوابة الثالثة

يمكن أن يكون التمرير والترجمة صحيحين بينما تموت الحزمة في جدول التصفية. ufw مذنب متكرر: سياسة التمرير لديه تشحن كـ DROP، وبقية الإعداد قد تبدو صحيحة تماما بينما يقتل ذلك الإعداد الواحد الحركة. رفعها قرار أمني متعمد وليس مربع اختيار.

iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o tun0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

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

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

أين تنظر عندما لا تحمّل صفحة أبدا

اعمل ping لعنوان النفق على الخادم لتثبت أن النفق موجود. ثم شغّل traceroute من العميل إلى عنوان عام واقرأ أين يتوقف: عند الخادم تصل الحزمة ولكنها لا تمرر ولا تترجم؛ وخارج الخادم تكون المشكلة أعلى وهي خارج يديك.

ping -c 3 10.9.0.1
traceroute -n 198.51.100.10

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

على الخادم، راقب الواجهة الخارجية بينما يحمّل عميل صفحة. حركة تخرج بمصدر خاص تعني أن الترجمة ناقصة، وانعدام أي رد يعني أن مسار التمرير أو مسار العودة الأعلى يسقطها.

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

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