كيف تستعيد خادم VPN دون تكرار الهويات
الخادم المستعاد يعيد الملفات، لا الوصول الحالي. وازن الإلغاءات ومفاتيح الأقران ونقاط النهاية قبل أن يرد نسخة ثانية على مصافحة.
استعدت النسخة الاحتياطية، وبدأت الخدمة، واتصل عميل من المحاولة الأولى. هذا النجاح هو الفخ. الاستعادة تعيد الملفات التي كانت لدى الخادم وقت اللقطة، لا حالة الوصول التي تغيرت منذ ذلك الحين، وإن كانت نقطة النهاية القديمة ما تزال قابلة للوصول فلديك الآن جهازان يجيبان عن هوية واحدة. الحل ليس نسخة احتياطية أفضل؛ بل تحديد ما يُسمح للمضيف المستعاد أن يكون عليه قبل أن يرد على مصافحة واحدة.
النسخة الاحتياطية تعيد الملفات، لا السلطة
تحتفظ اللقطة بإعدادات الخادم والمفاتيح الخاصة وسلطة الشهادات وقائمة الأقران وقواعد الجدار الناري كما كانت عند تنفيذ النسخة الاحتياطية. ولا يمكنها أن تحتفظ بما تغير بعد ذلك: الجهاز الذي ألغيتَه، والمفتاح الذي أعدت إصداره، والقرين الذي حذفته عند بيع حاسوب محمول، والشبكة الفرعية التي نقلتها. الاستعادة تعيد الملفات إلى تلك اللحظة. لكنها لا تعيد القرارات التي اتخذها الناس منذ ذلك الحين.
من هذه الفجوة تأتي الأضرار. حاسوب محمول مسروق أُلغي بعد أسبوعين من النسخة الاحتياطية يقدّم شهادة ما تزال تُتحقق مقابل CRL الأقدم داخل الشجرة المستعادة، فيقبل الخادم جهازًا كنت قد أحلتَه للتقاعد. أما WireGuard فأكثر مباشرة: القرين يُصرَّح له بمجرد إدراجه، فالقرين المحذوف بعد اللقطة موجود مرة أخرى ببساطة. لم يعد أحد الموافقة على ذلك الوصول. الملف القديم فعل.
هوية الخادم وهوية العميل تفشلان بطريقتين مختلفتين
في WireGuard هوية الخادم هي المفتاح الخاص في wg0.conf، فنسخ ذلك الملف إلى مضيف ثانٍ قابل للوصول ينتج خادمين بالهوية نفسها وبلا معرفة أحدهما بالآخر. كل منهما يحتفظ بقائمة أقرانه. احذف قرينًا على المضيف الجديد فيبقى القديم يقبله؛ وافحص wg show على أحدهما فترى نصف الحقيقة. والعملاء لا يتحولون تلقائيًا أيضًا: الملف الشخصي يحمل Endpoint واحدًا، فيبقى الجهاز يتحدث إلى العنوان الذي ضُبط به، وقد يكون المضيف الذي أردت تقاعده.
OpenVPN يتكرر في الطبقة نفسها بشهادة خادم ومفتاحه الخاص والمفتاح الساكن tls-auth أو tls-crypt. انسخ الثلاثة فلن يستطيع العميل التمييز بين النسختين؛ وإن كان كلاهما قابلًا للوصول فقد يهبط إعادة الاتصال على أي منهما، وكل ملف سجل يروي جزءًا من القصة. سلطة الشهادات هي النسخة الأعمق. شجرة easy-rsa المستعادة مصدر ثانٍ للحقيقة يمكنه إصدار شهادة صالحة لأي اسم تعطيه إياه.
العملاء يتكررون أيضًا، عادة أثناء الترحيل نفسه. نسخ ملف شخصي إلى جهاز احتياطي «لمجرد الاختبار» ينتج جهازًا ثانيًا بالمفتاح نفسه والاسم الشائع نفسه. مع duplicate-cn يمكن أن تبقى الجلستان قائمتين في آن واحد، وتعيين عنوان ساكن في ccd أو ifconfig-pool-persist قد يتعارض مع الجهاز الأصلي. هذان جهازان يرتديان هوية واحدة، ولا شيء في إعداد الخادم يميز بينهما.
اختر واحدة من ثلاث حالات لنقطة النهاية القديمة
الاستعادة آمنة فقط بعد تحديد مصير نقطة النهاية القديمة. التقاعد: على الخدمة القديمة أن تتوقف عن قبول منفذ VPN قبل أن يبدأ المضيف الجديد، وإن تعذر الوصول إلى الجهاز فاحجب ذلك المنفذ عند حدود الشبكة عن كل شيء عدا مصدرك الإداري. إصلاح المضيف نفسه: إعادة استخدام الهوية مقبولة لأن جهازًا واحدًا يحملها، لكن دمّر بعد ذلك نسخة القرص أو لقطة الجهاز الافتراضي للمفتاح القديم حتى لا تعود. بناء زوج توافر: يحتاج مضيفان إلى هويتين متمايزتين بالإضافة إلى نقطة نهاية مشتركة، مثل عنوان عائم أو موازن حمل أو DNS يمكنك تحريكه. نسخ المفتاح الخاص ليس تصميم تجاوز فشل؛ بل خادمان يدّعيان اسمًا واحدًا.
تأكد من الحالة التي أنت فيها فعلًا قبل لمس العملاء. المضيف القديم الذي يجيب على منفذ VPN هو الذي سيقبل الجهاز الملغى، حتى لو تحرك DNS. افحص المستمعين والمفتاح العام:
ss -lunp | grep -E ':51820|:1194'
wg show wg0
wg pubkey < /etc/wireguard/server.key
وازن الأقران والإلغاءات والعناوين أولًا
اسرد ما تدّعيه الاستعادة مقابل ما هو مصرح به حاليًا. في WireGuard يعطي wg show wg0 مفتاح كل قرين ونقطة نهايته وآخر مصافحة وعدادات النقل، وهو ما يكفي لرصد جهاز لم تعد تملكه. أزله حيًا بـ wg set wg0 peer <key> remove، ثم عدّل الإعداد أيضًا، وإلا عاد القرين عند التشغيل التالي. يكشف wg show wg0 allowed-ips المشكلة الثانية: قرينان على عنوان واحد، أو عنوان أعدت تعيينه بالفعل.
في OpenVPN قائمة الإلغاء ملف له تاريخ، والاستعادة قد تعيد قائمة قديمة. افحصه قبل اتصال العملاء:
openssl crl -in /etc/openvpn/crl.pem -noout -lastupdate -nextupdate
grep -E 'crl-verify|reneg-sec' /etc/openvpn/server.conf
إن كان آخر تحديث سابقًا للإلغاء فما يزال الخادم يحترم شهادة ألغيتها. يقرأ OpenVPN 2.4 وما بعده ملف CRL من جديد عند كل اتصال، فاستبدال الملف يوقف الجلسات الجديدة، لكن الأنفاق القائمة تبقى حتى إعادة التفاوض؛ القيمة الافتراضية reneg-sec هي 3600 ثانية، وتخفيضها أو إعادة تشغيل الخدمة هما ما يمنحك التغيير الآن. النسخ الأقدم قد لا تلتقط الملف بالموثوقية نفسها، فأعد التشغيل حين لا تستطيع تأكيد سلوك الإصدار. يغطي دليل wg(8) صيغة إزالة القرين وallowed-ips المستخدمة أعلاه.
أزل أيضًا التعيينات الساكنة للأجهزة التي لم تعد موجودة. إعادة استخدام عنوان جهاز متقاعد لجهاز جديد بينما الملف الشخصي القديم ما يزال مثبتًا تنتج بالضبط التكرار الذي تحاول تجنبه.
تحقق بعميل ألغيته
نفّذ الفحوص بالترتيب، من شبكة خارج النفق. أولًا يتصل جهاز مصرح به، ويحل DNS عبر الخادم المدفوع ويصل إلى مورد خاص. ثم يجب أن يفشل الجهاز الملغى، مستخدمًا ملفه الشخصي الحالي لا ملفًا جديدًا. ثم جرّب نقطة النهاية القديمة من الخارج: إن كان منفذ VPN ما يزال يكمل مصافحة فالمضيف القديم حي والتكرار حقيقي لا نظري.
أعد تشغيل المضيف المستعاد وكرر فحوص المصرح به والملغى، لأن عندها تتغلب ملفات الإعداد على ما غيرته أثناء التشغيل. قارن المفتاح العام للمضيف أو بصمة الشهادة بما استخدمه الجهاز المتقاعد. تطابق البصمات على جهازين حيين يعني أن الاستعادة استنسخت الهوية؛ وتطابقها على جهاز واحد أمر طبيعي. سجّل الإصدارات المستعادة وبصمات المفاتيح والرقم التسلسلي الملغى أو مفتاح القرين، ثم خذ النسخة الاحتياطية التالية بعد هذه المواءمة، لتمثّل الخدمة كما هي الآن. الاختبار الناجح ليس أن يتصل عميل. بل أن يبقى العميل الذي أزلته خارجًا بينما تبقى نقطة النهاية القديمة مغلقة.