هل نعطّل IPv6 لإصلاح تسريب VPN؟ الأفضل أن نحدّد السياسة
العنوان المحلي للرابط ليس تسريبًا، والمسار العام لـ IPv6 ليس تسريبًا أيضًا. اختر أولًا بين الحجب والحمل والترك.
يظهر عنوان من نطاق IPv6 في صفحة اختبار، ومن الواضح أن النفق لا يحمله، وأشهر نصيحة على الإنترنت هي تعطيل IPv6 في كل مكان. ذلك الأمر يجعل اللوحة صامتة فعلًا. لكنه يزيل أيضًا بروتوكولًا قد تعتمد عليه شبكة الوصول، ويتركك بلا أي فكرة عمّا إذا كان العنوان تسريبًا حقيقيًا، أو عنوان واجهة محليًا للرابط، أو مُحلِّلًا يؤدي عمله. ثلاثة شروط تحدّد الضابط الصحيح، وواحد فقط منها يؤدي إلى الحجب.
حدّد ما قاسته الأداة فعليًا
أكثر الإنذارات الكاذبة شيوعًا هو عنوان محلي للرابط، يبدأ بـ fe80: ويوجد على كل واجهة قادرة على IPv6 سواء أكان الجهاز يستطيع الوصول إلى الإنترنت عبر IPv6 أم لا. يظهر في قوائم الواجهات وفي بعض تشخيصات التطبيقات، ولا يقول شيئًا عن مسار حركتك.
الإنذار الكاذب الثاني هو عنوان محلي فريد في fc00::/7، وهو نطاق خاص يُستخدم داخل شبكة. الأداة التي تطبع كل عنوان يحمله المضيف ستعرضه بسرور بجوار العنوان العام. من يقرأ بسرعة يسمّي ذلك تسريبًا، ثم يقضي ساعة على مشكلة غير موجودة.
الثالث ليس إنذارًا كاذبًا على الإطلاق. العنوان العام الذي يصل إلى الإنترنت خارج النفق هو التسريب الحقيقي، ويستحق القياس قبل أن تقرّر أي شيء:
ip -6 addr show scope global
ip -6 route show default
curl -6 -sS --max-time 6 https://ifconfig.co
إذا طبعت الأداة الأولى عنوانًا عامًا وأعادت الثالثة عنوان IPv6 عامًا ليس عنوان النفق، فلديك مسار حقيقي خارج النفق. وإذا لم تطبع الأولى سوى مدخلات محلية للرابط، فلم يكن هناك تسريب ليُصلَح أصلًا.
ثلاثة شروط تحدّد الضابط
القرار ليس «IPv6 جيد» أو «IPv6 سيئ». القرار هو أيّ من ثلاث حالات أنت فيها، ولكل منها إجابة صحيحة مختلفة بتكلفة مختلفة إذا أخطأت.
| Situation | Correct control | Cost if you disable IPv6 instead |
|---|---|---|
| Exit has no IPv6, host does | Block IPv6 deliberately in the tunnel policy | Same visible result, no documentation of intent |
| Exit carries IPv6, host leaks | Route IPv6 into the tunnel and verify | You lose IPv6 reachability entirely |
| Access network is IPv6-only | Change nothing; use the tunnel's IPv6 | Machine loses connectivity completely |
الصف الأول هو ما يقصده الناس عادة، وهو مشروع. العميل الذي لا يدعم مخرجه IPv6 يجب ألا يسمح بصمت لحركة IPv6 الأصلية للمضيف بالخروج، لأن ذلك هو تسريب الحزمة المزدوجة الموثّق. المقصود هو حجبه كسياسة معلنة، لا تعطيل بروتوكول في النواة. النتيجة المرئية متطابقة وواحدة فقط منهما يمكن مراجعتها لاحقًا.
الصف الثالث هو حيث تصبح النصيحة الشاملة ضارّة فعليًا. مشغّلو الهاتف المحمول وبعض اتصالات المنزل يشغّلون شبكات IPv6-only مع ترجمة لوجهات IPv4. أزل IPv6 هناك وستزيل النقل الوحيد الذي تقدّمه الشبكة، ما ينتج انقطاعًا أسوأ بكثير من الذي كنت تشخّصه.
إذا لم يكن للمخرج IPv6، فاحجبه عن قصد
فضّل آلية العميل نفسها، لأنها تُطبَّق بالضبط ما دام النفق قائمًا وتُلغى عند سقوطه. OpenVPN لديه خيار لهذا، ولدى iptables قاعدة مكافئة للعملاء الآخرين:
block-ipv6
ip6tables -A OUTPUT -o eth0 -j REJECT --reject-with ipv6-port-unreachable
التوجيه مكانه الملف الشخصي؛ والقاعدة مكانها جدار ناري يمكنك مراجعته وحذفه. كلاهما يفشل مغلقًا، وهو ما تريده، وكلاهما مرئي في فرق الإعدادات، وهو ما لا يفعله sysctl في النواة مدفونًا في سكربت بدء.
سجّل سبب وجوده. قاعدة الحجب بلا تعليق يزيلها الشخص التالي الذي يحتاج IPv6 لشيء غير ذي صلة، ثم يعود التسريب بهدوء.
إذا كان المخرج يحمل IPv6، فوجّهه واختبر العائلتين
حمل IPv6 هو الإجابة الأفضل عندما يدعمه الخادم، وهو ليس أصعب بكثير. الشرط أن يكون لواجهة النفق عنوان في تلك العائلة وأن يشير المسار الافتراضي لها إلى النفق لا إلى الواجهة الفيزيائية:
ip -6 route get 2606:4700:4700::1111
ip -6 route show default
curl -6 -sS --max-time 6 https://ifconfig.co
curl -4 -sS --max-time 6 https://ifconfig.co
بحث المسار هو الاختبار الحاسم: إذا سمّى واجهة النفق، فحركة IPv6 محمولة. ثم يؤكّد استدعاءا curl ما تراه كل عائلة، ومقارنتهما هي طريقة إثبات أن المسارين يخرجان الآن من المخرج نفسه.
لا تتوقف عند اتصال ناجح. أعد توصيل النفق وتحقق مرة أخرى، لأن مسار IPv6 المدفوع قد يُفقد عند إعادة الإنشاء إذا أرسله الخادم في الإعداد الأولي فقط. ثم تحقق من وجهة مستثناة واحدة، لأن قواعد النفق المنقسم هي حيث تختلف العائلتان أكثر ما تختلف.
إذا كانت شبكة الوصول IPv6 فقط، فاتركها كما هي
بعض الشبكات توفّر IPv6 فقط وتتوقع أن يصل الجهاز إلى خدمات IPv4 عبر آلية ترجمة على جانب المشغّل. تعطيل IPv6 على جهاز كهذا ليس تحسينًا أمنيًا؛ بل يزيل المسار الوحيد إلى أي شيء. ذلك انقطاع سبّبته أنت في سبيل نتيجة اختبار لم يحتجها أحد.
عَرَض الخطأ هنا مميّز وغير سار: يبدو أن النفق يُنشأ، ويحلّ تحليل الأسماء، ولا يُحمَّل شيء. إن رأيت ذلك بعد تغيير IPv6، فأعد الإعداد فورًا وواصل التشخيص في مكان آخر.
أيًّا كان اختيارك، أبقِ القرار صريحًا في الملف الشخصي أو الجدار الناري، واربطه بما يدعمه المخرج فعليًا، ولاحظ سلوك الحزمة المزدوجة الذي تصفه مناقشة RFC 7359 للحزمة المزدوجة . الحجب المعلن سياسة. والبروتوكول المعطَّل حلّ التفافي لا يستطيع أحد تدقيقه، وهما يبدوان متطابقين من صفحة الاختبار.