AllowedIPs قائمة توجيه وليست قاعدة جدار حماية
يختار ندًا للحركة الصادرة ويتحقق من المصادر الواردة. إنه ليس قائمة وصول، وتعطيل إدارة المسارات لا يصلح نفقًا منقسمًا.
يقرأ معظم الناس AllowedIPs كقائمة أذونات، أي مجموعة العناوين التي يجوز لها الاتصال بند، على غرار قاعدة جدار حماية مكتوبة لنفق. الأمر ليس كذلك. هذا الحقل جدول توجيه يعمل في الاتجاهين: يختار ندًا لحزمة صادرة ويتحقق من مصدر حزمة واردة. وقراءته كقائمة وصول تنتج إعدادات توجّه حركة لم يطلبها أحد.
حقل واحد وقارئان: اختيار الصادر وفحص المصدر
عند العميل، تحدد البادئات أي الوجهات تنتقل إلى ذلك الند وأيها يبقى على الشبكة العادية. لذا يلتقط مدخل مثل 0.0.0.0/0 كل وجهة IPv4، ولهذا فإن استيراد ملف نفق كامل يرسل التصفح العادي عبر الجهاز البعيد. تفعل المدخلات الضيقة العكس، إذ توجّه الشبكات التي أدرجتها فقط وتترك كل شيء آخر في مكانه. ويذكر قسم توجيه مفاتيح التشفير في وثائق WireGuard المهمتين في مكان واحد: اختيار الند الصادر والتحقق من المصدر الوارد.
على الخادم، يصف الحقل نفسه عناوين المصادر التي يجوز لكل ند استخدامها. هذا فحص تشفيري وليس مرشّح حزم: الحزمة التي لا يطابق مصدرها الداخلي قائمة الند تُسقط داخل WireGuard قبل أن يراها أي جدار حماية على المضيف. والمهمتان تشتركان في قائمة واحدة، ولهذا بالضبط تسيء قائمة منسوخة من مكان آخر العمل في موضع لم تفكر فيه.
كتلة العميل هي حيث يبدأ معظم هذا الالتباس. النفق المنقسم يسمّي الشبكات البعيدة، والنفق الكامل هو الحقل نفسه مع بادئة افتراضية:
[Peer]
# split tunnel: only these networks
AllowedIPs = 10.77.0.0/24, 192.168.30.0/24
[Peer]
# full tunnel: everything, both families
AllowedIPs = 0.0.0.0/0, ::/0
كل الصيغتين مكتملتان بذاتهما، وهما بديلان لا خطوتان. الأولى ترسل تلك الشبكتين فقط عبر النفق؛ والثانية ترسل كل وجهة، مع إضافة المدخل ::/0 لعنوان IPv6 إلى الافتراضي IPv4. وأيًّا اخترت، فإن تلك البادئات هي قرار التوجيه كله لذلك الند بمجرد أن يبدأ wg-quick في تثبيت المسارات.
المحور يحتاج قائمة مختلفة
يسرد المحور عنوان نفق كل عميل كبادئة مضيف، إضافة إلى أي شبكة تقع فعلاً خلف ذلك العميل. ونسخ قائمة عميل واسعة إلى كل ند في المحور يخبر المحور أن عديدًا من الأنداد قد يستخدم العناوين نفسها كمصدر، وهذا ليس خطة عنونة. وحقل Endpoint ينتمي إلى طبقة أخرى تمامًا: يسمّي العنوان الخارجي للند ومنفذه، ولا يسمّي أبدًا وجهة داخل النفق.
[Peer]
# laptop: tunnel address 10.77.0.2, office LAN behind it
AllowedIPs = 10.77.0.2/32, 192.168.30.0/24
بادئة المضيف تحمل عنوان النفق، وبادئة الشبكة تحمل ما يقع خلف العميل، وكلتاهما لازمتان. فبدون بادئة المضيف لا يستطيع المحور إرجاع حركة العميل نفسه، وبدون بادئة الشبكة تبقى الشبكة المحلية خلفه غير قابلة للوصول؛ والند الذي لا شيء خلفه يحصل على بادئة المضيف فقط.
تخطي تثبيت المسارات يترك فجوة
wg-quick، الأداة المساعدة التي ترفع واجهة من ملف إعداد، تثبّت عناوين الواجهة والمسارات كجزء من تلك المهمة. وتعيين Table = off يخبر الأداة بتخطي عمل المسارات، وهذا لا يثبّت بدائل ولا يجعل الشبكة الخاصة قابلة للوصول. وعندما تؤدي المسارات التلقائية المهمة بالفعل، فإن تسمية البادئات التي تحتاجها هي الإعداد الأوضح. إيقاف إدارة المسارات وترك البديل غير مكتوب ليس تصميمًا، بل سهو.
تتصرف أداة wg الأساسية بشكل مختلف: فهي تهيّئ الواجهة ولا تلمس المسارات أبدًا، لذا يحتاج الإعداد المبني عليها مباشرة إلى أوامر مسارات خاصة به. والتعليمات المكتوبة لأداة واحدة قد تبدو خاطئة عند اتباعها مع الأخرى. والنجاح في ping دليل ضعيف أيضًا، لأنه يختبر مسارًا واحدًا لا كل مسار تطبيق تحتاجه.
يُقرَّر DNS وIPv6 بشكل منفصل
افحص عنوان خادم DNS الذي يعلن عنه النفق، وتأكد من وجود مسار إلى ذلك العنوان عبر البادئات التي اخترتها. إعداد الموزّع لا يجعل الموزّع قابلًا للوصول، وتضييق النفق قد يزيل بهدوء المسار الذي كان يصل إليه. افحص IPv6 أيضًا بمفرده، لأن تقسيم IPv4 الصحيح لا يقول شيئًا عن مسار افتراضي IPv6 لا يزال يشير إلى الرابط الفيزيائي. ثلاثة قرارات منفصلة يمكن أن تتغير دفعة واحدة عند تحرير كتلة ند واحدة.
ثم افتح موردًا خاصًا واحدًا وموقعًا عاديًا واحدًا من إعداد بداية معروف. إذا استجاب المورد وظل التصفح يخرج عبر الاتصال المحلي، فالتقسيم يفعل ما طلبته. وإذا انكسر التصفح في اللحظة نفسها، فقد أخذ النفق المسار الافتراضي، وقائمة البادئات هي موضع البحث.