لماذا يعود قرين WireGuard المحذوف بعد إعادة التشغيل
حالتان تحتفظان بقائمة القرناء: الواجهة العاملة وما يكتبها عند الإقلاع. أزله من كلتيهما، وافحص SaveConfig قبل أن تعدّل أي شيء.
تختفي الهوية من الواجهة العاملة ويبدو التغيير منتهيًا. وبعد أن تُعاد الخدمة، تعود الهوية، وكأن WireGuard يتجاهل الأمر. ما حدث فعلًا أبسط: إعداد بدء التشغيل ما زال يحتوي على القرين.
تحتفظ حالتان بتلك القائمة. لا يصبح الإبطال حقيقيًا إلا عندما تفقدهما كلتاهما.
ما الذي يغيّره wg set فعلًا
الأمر wg set wg0 peer <public-key> remove يعدّل الواجهة العاملة داخل النواة. إنه لا يكتب شيئًا على القرص. ملف الإعداد أو ملف NetworkManager أو الحالة المحفوظة في الموجّه تبقى دون تغيير. هذا هو التصميم، لا خلل.
هذا الفصل مقصود، لأن الأداة لا تعرف من يملك الواجهة. يجب أن يكون أمر زمن التشغيل آمنًا عند تنفيذه على واجهة يديرها شيء آخر. ولا يمكنه تخمين أين تعيش النسخة الدائمة. والنتيجة سهلة القول: الإزالة أثناء التشغيل مؤقتة بحكم التصميم.
لذلك يعود القرين عند إعادة التشغيل التالية، ويعود مع بادئاته المسموح بها الأصلية. وكل ما يُوجَّه عبره يُعاد إنشاؤه أيضًا. وهكذا تستطيع هوية مفترض إبطالها الوصول إلى وجهاتها السابقة بعد إعادة التحميل. ولم يحذّر أحد في مخرجات التشغيل.
اعثر على الكاتب قبل أن تعدّل ملفًا
للواجهة مالك. قد يكون wg-quick يقرأ ملفًا، أو NetworkManager يطبّق ملف تعريف، أو إعداد واجهة الموجّه نفسه، أو نقطة دخول حاوية تعيد إنشاء الواجهة عند البدء. تعديل ملف لا يقرأه المالك أبدًا لا يُنتج أي تغيير دائم على الإطلاق.
ابدأ من الواجهة العاملة وحدّد المفاتيح العامة، لأن الأسماء والعناوين معرّفات أضعف من المفتاح نفسه. ثم قارن تلك القائمة بـالإعداد المحفوظ الذي يقرأه المالك فعلًا.
wg show wg0 peers
wg show wg0 allowed-ips
systemctl status wg-quick@wg0 --no-pager
ls -l /etc/wireguard
واجهة حيّة تختلف قائمة قرنائها عن محتوى الملف هي التشخيص كله. الإعداد المحفوظ يفوز عند الإقلاع، وحالة التشغيل تخسر. قارنهما قبل تغيير أي منهما.
فخ SaveConfig
يضيف wg-quick التفافة تصطاد من يعدّلون الملفات يدويًا. عند تفعيل SaveConfig، يكتب سلوك الإيقاف الموثّق حالة التشغيل الحالية فوق ملف الإعداد.
هذا يعكس الاتجاه المعتاد للاستمرارية. تزيل قرينًا من الملف، ثم تتوقف الخدمة. فتُكتب الحالة العاملة فوق تعديلك، فتُعيد القرين الذي حذفته للتو.
لذا يهمّ الترتيب: عدّل الملف والواجهة متوقفة، أو عطّل SaveConfig قبل التعديل، ثم أعد تشغيل الواجهة وتأكد مما حُمّل. التعديل اليدوي والواجهة تعمل سباق مع كتابة الإيقاف.
غيّر الحالتين ثم أعد التحميل
في زمن التشغيل، أزل القرين بمفتاحه. وفي الإعداد المحفوظ، أزل الكتلة نفسها عبر العملية المدعومة لدى المالك بدلًا من التعديل حولها.
ثم راجع ما كان يحمله القرين. الشبكة الموجّهة التي كانت تخص الهوية المبطلَة يجب أن تُعاد تعيينها بقرار أو تُزال، لا أن يرثها بصمت أي قرين يُعدَّل تاليًا.
أبقِ مسار استعادة مفتوحًا إذا كانت البوابة تحمل أيضًا وصولك الإداري. إعادة تشغيل تزيل القرين الخطأ انقطاع تسبّب به صاحبه. والأمر نفسه ينطبق على إعادة تشغيل تزيل المسار الخطأ.
كيف يبدو اختبار ناجح
أعد تحميل الخدمة أو أعد تشغيلها، ثم اقرأ قائمة القرناء مرة أخرى. يجب أن يغيب المفتاح القديم، وأن تبقى القرناء التي أردت الاحتفاظ بها حاضرة وتعمل.
wg show wg0 peers
wg show wg0 allowed-ips
sudo wg-quick down wg0 && sudo wg-quick up wg0
wg show wg0 peers
حيث تسمح الحالة، تأكد أن الهوية القديمة لم تعد تصل إلى مواردها السابقة. قائمة واجهة مرتّبة قبل إعادة التشغيل نصف اختبار. والنصف الآخر هو ما تستطيع الهوية فعله بعد ذلك.
إذا ظل مدير ما يعيد القرين، فتوقف عن تكرار الإزالة منخفضة المستوى. أصلح الجرد الذي يقرأه ذلك الكاتب، لأنه حتى ذلك الحين كل إعادة تشغيل دعوة أخرى لتظهر الهوية من جديد.