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

مفاتيح الواجهة تصف هذا الجهاز

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

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

كل ما عدا ذلك في كتلة [Interface] مع عميل واقعي يضيفه عادةً wg-quick: DNS، MTU، Table، وأسطر الخطافات. ليست حقول بروتوكول، وإعداد wg العاري يتجاهلها تمامًا.

كل مدخل نظير يصف طرفًا آخر واحدًا

كتلة [Peer] هي الطرف البعيد. PublicKey هو المفتاح المشتق لذلك الطرف، وليس مفتاحه الخاص أبدًا، و PresharedKey سر إضافي اختياري يجب أن يمتلكه الطرفان بشكل متطابق. Endpoint هو وجهة الإرسال، و PersistentKeepalive يطلب من هذا المضيف إرسال حزمة بعد الفاصل عندما لا يكون هناك شيء آخر صادر.

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

AllowedIPs توجيه، لا قائمة أذونات

AllowedIPs هو التوجيه بالمفتاح التشفيري في WireGuard. صادرًا، يقرر أي نظير يستقبل الحزمة بناءً على وجهتها. واردًا، يقرر هل تُقبل الحزمة القادمة من ذلك النظير بناءً على مصدرها. الحقل نفسه يقوم بالمهمتين، ولهذا ليس قائمة تحكم بالوصول ولا قائمة بمواقع مسموحة.

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

ما يضيفه wg-quick حول البروتوكول

wg-quick يقرأ الملف نفسه وينفذ خطوات الشبكة التي يتركها البروتوكول لنظام التشغيل. يعيّن عنوان الواجهة، ويضيف مسارات مشتقة من AllowedIPs، ويكتب إعدادات المحلل، وينفذ أوامر الخطاف بالترتيب.

تلك الطبقة تفسر عدم التماثل الكلاسيكي. ملف فيه 0.0.0.0/0 وسطر DNS يمنح العميل مسارًا افتراضيًا ومحللًا، ولا يفعل شيئًا على الإطلاق بقواعد التمرير أو NAT على الخادم. تلك تخص إعداد الخادم نفسه، ولا يمكن لأي ملف عميل توفيرها.

أبقِ مالكًا واحدًا للملف. تعديله يدويًا بينما SaveConfig ممكّن يعني أن تعديلك يختفي في المرة التالية التي تنخفض فيها الواجهة، ولن تخبرك الواجهة أن ذلك حدث.

افحص الحالة المطبقة، لا الملف

الملف نية. الحالة المطبقة هي ما تحتفظ به النواة، وهما يختلفان كلما عدّل مساعد أو drop-in أو خطاف شيئًا بعد التنشيط.

اقرأ الحالة الحية والعنونة معًا، ثم قارن كليهما بما كتبته:

sudo wg show
ip -4 addr show dev wg0
ip -4 route show dev wg0
grep -v "^#" /etc/wireguard/wg0.conf

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

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