تضيف نظيرًا إلى /etc/wireguard/wg0.conf، وتشغّل systemctl restart wg-quick@wg0، فيختفي النظير من الملف عند النظر مرة أخرى. لم يفسد أي شيء شيئًا. إعادة التشغيل هي إيقاف يتبعه تشغيل، وقد تكتب خطوة الإيقاف حالة التشغيل الحالية فوق الملف الذي عدّلته للتو. الإعداد المسؤول يعيش في الملف نفسه الذي كنت تعدّله، وهذا ما يجعل الحلقة مربكة إلى هذا الحد في المرة الأولى التي تصادفها.

حالتان، ملف واحد، وحفظ عند إيقاف التشغيل

حالة WireGuard أثناء التشغيل وملف تهيئة wg-quick مرتبطان لكنهما مختلفان. الملف مدخل: يقرأه wg-quick، وينشئ الواجهة، ويضبط العناوين والمسارات، ويهيّئ النظير. جهاز النواة هو الكائن الحي، والتغييرات منخفضة المستوى التي تُجرى باستخدام wg لا تكتب نفسها مرة أخرى أبدًا.

باستثناء اتجاه واحد. عندما يظهر SaveConfig = true في قسم الواجهة، يحفظ wg-quick التهيئة الحية في الملف كجزء من إنزال الواجهة. يحذّر دليل wg-quick من هذا بالضبط: التغييرات التي تُجرى على الملف أثناء عمل الواجهة قد تُستبدل عند إزالتها. إنه حفظ عند إيقاف التشغيل، لا مؤقت في الخلفية، لذا لا يعمل إلا عندما يوقف شيء ما الواجهة.

ActionWhat it writesWhen it surprises you
wg set on a live interfaceKernel state onlyAfter reboot, when the file was never updated
wg-quick down with SaveConfigLive state into the fileRight after you edited the file
wg syncconfKernel state onlyNever; it does not touch the file
wg-quick upKernel state from the fileIf the file is stale, you get the old tunnel

اقرأ الجدول كتحذير بشأن الترتيب. كل فقدان عرضي في هذا المجال يأتي من تعديل حدث قبل حفظ بدلًا من بعده.

أوقف أولًا، وعدّل ثانيًا، وابدأ أخيرًا

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

sudo cp -a /etc/wireguard/wg0.conf /root/wg0.conf.$(date +%F-%H%M)
sudo wg-quick down wg0
ls /sys/class/net/wg0 2>/dev/null || echo "interface is gone"
sudoedit /etc/wireguard/wg0.conf
sudo wg-quick up wg0

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

ضبط SaveConfig = false قبل إنزال عادي هو المسار المقبول الآخر، ويجب أن يتم في الملف الذي يقرأه wg-quick فعليًا. يمنع ذلك الحفظ التلقائي الواحد. وهو لا يجعل ملف NetworkManager منفصلًا، أو تصدير موجّه، أو نقطة دخول حاوية تعيد تحميل تعديلاتك، لأن تلك المديرين لا يقرؤون هذا الملف على الإطلاق.

طبّق تغييرات النظير دون تمزيق الواجهة

ليست كل تعديلات تحتاج إلى انقطاع. يمكن تطبيق تغييرات مستوى النظير على واجهة قيد التشغيل عبر تحويل الملف إلى تهيئة ومزامنته، وهذا يتجنب خطوة الإنزال بالكامل وبالتالي يتجنب الحفظ:

sudo wg syncconf wg0 <(sudo wg-quick strip wg0)
sudo wg show wg0 peers
sudo wg show wg0 latest-handshakes

خطوة strip مهمة. فهي تطبع الملف بعد إزالة المفاتيح الخاصة بـ wg-quick فقط، حتى لا تُغذّى العناوين وDNS وتوجيهات التوجيه إلى أداة لا تفهمها. ثم تطبّق المزامنة النظير والمفاتيح على الجهاز الحي دون إعادة إنشاء الواجهة، فتبقى الجلسات والمسارات القائمة.

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

تحقق من مالك الواجهة قبل تعديل أي شيء

على حاسوب مكتبي أو خادم يديره نظام تهيئة، قد يكون الملف مخرَجًا لا مدخلًا. يمكن لاتصال NetworkManager أو ملف تعريف منشأ بواسطة موجّه أو نص بدء تشغيل حاوية أن يملكوا جميعًا اسم الواجهة نفسه، وفي هذه الحالة يعدّل تسلسل wg-quick سليم تمامًا القطعة الخطأ.

systemctl status wg-quick@wg0 --no-pager
nmcli connection show | grep -i wireguard
sudo wg showconf wg0 | head -n 5

يطبع الأمر الثالث التهيئة الحية بالصيغة نفسها التي في الملف، بما في ذلك المفتاح الخاص، وهو مفيد للمقارنة وخطير في تذكرة. احجبها قبل اللصق؛ فالمفتاح الخاص في سلسلة دعم هو اختراق دائم، وليس خطأ مطبعيًا.

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

تحقق من إعادة التشغيل التالية، ثم احتفظ بتراجع

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

sudo systemctl restart wg-quick@wg0
sudo wg show wg0 latest-handshakes
sudo grep -c '^\[Peer\]' /etc/wireguard/wg0.conf

شغّل إعادة التشغيل مرتين. قد تكون النجاح الواحدة في المرة الأولى حظًا: فقد تستهلك إعادة التشغيل الأولى تغييرًا في وقت التشغيل لم يُحفظ بعد، لذا فالثانية هي التي تخبرك بأن الملف ووقت التشغيل اتفقا في نهاية الأولى.

احتفظ بالنسخة الاحتياطية من بداية العملية حتى تنتهي من إعادة التشغيل المزدوجة، ثم احذفها أو انقلها خارج دليل التهيئة. وجود wg0.conf.bak شارد بجوار الملف الحقيقي غير ضار بـ wg-quick ومربك للشخص التالي، الذي سيعدّل الملف الخطأ في النهاية.

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