بعد تغيير عنوان IP للخادم، لا تزال قاعدة SNAT تشير إلى العنوان القديم
يمكن أن يتصل النفق بينما تتعطل كل حزمة معاد توجيهها، لأن قاعدة الترجمة لا تزال تعيد الكتابة إلى عنوان لم يعد الخادم يملكه.
انتقل الخادم إلى عنوان جديد، ولا يزال العملاء يتصلون، ولا شيء مما يرسلونه يصل إلى الإنترنت. هذا الانفصال هو الدليل: مقبس الاستماع وإعادة توجيه المنفذ نجحا في تجاوز الانتقال، لذلك يرتفع النفق، بينما ترجمة المصدر المطبقة على الحزم المعاد توجيهها لا تزال تشير إلى عنوان لم يعد الخادم يملكه. الردود على تلك الحزم المعاد كتابتها تذهب إلى جهاز لم يعد موجودًا.
فشل الاتصال وإعادة التوجيه يحدثان في مكانين مختلفين
يعتمد الإنشاء على نقطة النهاية التي يعرفها العملاء بالفعل: العنوان العام، وإعادة توجيه المنفذ أمامه، والمستمع في الداخل. أما حركة المرور المعاد توجيهها فتعتمد على قرار ثانٍ يُتخذ بعد دخول الحزمة إلى النفق، حين يعيد الخادم كتابة مصدرها كي تجد الردود طريقها إلى الوراء.
تغيير العنوان لا يكسر إلا القرار الثاني، ولهذا يُقرأ العَرَض على أنه "متصل بلا إنترنت". وهو يفسر أيضًا لماذا تبدو الفحوص المعتادة على جانب العميل سليمة: تكتمل المصافحة، ويحصل العميل على عنوان، وقد تستجيب حتى نجمة بينغ إلى عنوان النفق الخاص بالخادم. تُنفق ساعات على العميل بسبب عطل يقيم على الجانب الآخر، ولهذا يكون جدول القواعد أول مكان يُنظر فيه.
اقرأ القاعدة وعداداتها قبل التحرير
اسرد قواعد الترجمة مع العدادات وقارن المصدر المُهيأ بالعناوين التي يملكها الخادم فعليًا. القاعدة التي أُعيدت كتابتها إلى عنوان ميت تُظهر عادةً حركة على طريق الدخول، لأن الحزم تصل إليها وتُترجم، ولا شيء على طريق العودة.
sudo iptables -t nat -L POSTROUTING -n -v --line-numbers
ip -4 addr show
تحقق من ثلاثة حقول أثناء وجودك هناك: التجمع في مطابقة المصدر، وواجهة الخروج إن كانت القاعدة تسمي واحدة، والاستثناء الذي يمنع إعادة كتابة حركة المرور بين النفق والنفق. هذا الاستثناء يسهل فقده أثناء التحرير، وفقدانه يجعل حركة الأقران تبدو عاملة بينما تتخذ ردودها مسارًا غريبًا.
إذا بقيت العدادات على الصفر، فلن تصل الحزم إلى هذه القاعدة أبدًا والعنوان ليس المشكلة الحالية. ابحث عن قاعدة منافسة أبكر في السلسلة، وهو ما يحدث عندما يضيف شخص بديلًا بدلًا من تحرير الأصل. قارن أرقام القواعد بالمخرجات التي دوّنتها قبل دقيقة. الترتيب جزء من التهيئة، وليس تفصيلًا تجميليًا.
استبدل المصدر، أو توقف عن تسمية مصدر
عندما يملك الخادم عنوانًا مستقرًا، استبدل القاعدة في مكانها بدلًا من إضافة قاعدة أخرى. الاستبدال برقم القاعدة يحفظ الترتيب الذي تعتمد عليه بقية السلسلة.
sudo iptables -t nat -R POSTROUTING 1 -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to-source 10.151.0.40
عندما يُسنَد العنوان ديناميكيًا، لا تسمِّ أي مصدر على الإطلاق ودع النواة تختار المصدر الحالي من واجهة الخروج. هذا البديل ينجو من الانتقال التالي دون تحرير، على حساب إخفاء العنوان الذي استُخدم.
sudo iptables -t nat -R POSTROUTING 1 -s 10.8.0.0/24 ! -d 10.8.0.0/24 -o eth0 -j MASQUERADE
تأكد من أن إعادة توجيه IPv4 لا تزال ممكّنة عبر تهيئة مُدارة، ثم اجعل القاعدة دائمة بآلية التوزيعة نفسها. التغيير الذي يُجرى في النواة العاملة فقط يعود مع إعادة التشغيل التالية، عادةً خلال نافذة صيانة لا يربطها أحد بالتغيير.
طريقتان لتنفيذ الاستبدال بشكل خاطئ
ترجمة التجمع إلى عنوان النفق الخاص بالخادم بدلًا من عنوان LAN الخاص به ترسل الردود مباشرةً إلى النفق، حيث تُوجَّه نحو عميل لم يطلبها قط. يتوقف الاتصال بطريقة تشبه حلقة توجيه، لأنه كذلك فعلًا.
تكديس ترجمة ثانية فوق القديمة هو الخطأ الآخر. القاعدة الأولى المطابقة تفوز، فتبقى المدخلة القديمة تتعامل مع الحزم حتى تُحذف، وتبقى عدادات القاعدة الجديدة على الصفر بينما يلوم الجميع البديل. احذف التكرار قبل إضافة أي شيء جديد. ثم اقرأ القائمة مرة أخرى وتأكد من أن ترجمة واحدة فقط تطابق التجمع.
إذا كان النفق يحمل IPv6 أيضًا، فكرر المراجعة كاملة على المكدس الآخر. المسار الافتراضي IPv6 بلا ترجمة وبلا بادئة موجَّهة يفشل بصمت مماثل، ويسهل نسيانه لأن كل ما فوقه يبدو متطابقًا.
الخدمات الواردة تحتاج الترجمة المعاكسة
الخدمة على عميل VPN التي يجب أن تكون متاحة من الخارج تحتاج ترجمة الوجهة، لا ترجمة المصدر: يُعاد كتابة المنفذ العام إلى عنوان النفق الخاص بالعميل قبل أن يدخل. ثم يحتاج مسار التوجيه إلى قاعدة صريحة تسمح بتلك الحركة.
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 10.9.8.2:8080
لا تترجم أبدًا المنفذ الذي يحمل النفق نفسه، لأن إعادة الكتابة تلك تقطع الاتصال الذي يبقي الخدمة متاحة. أبقِ منفذ النفق خارج قواعد الوجهة تمامًا. تحقق من الطرفين بعد ذلك: عدادات على القاعدة الجديدة، والتقاط قصير على جهاز النفق، وطلب واحد إلى عنوان داخل النفق قبل تجربة العنوان العام.