انقطاع OpenVPN كل ساعة: إعادة تفاوض أم اتصال حقيقي جديد؟
الانقطاع على فاصل منتظم بشكل مريب هو عادةً تجديد للمفاتيح، لا رابط ميت. اقرأ المؤقّت الفعلي وسطر السجل قبل تعطيل أي شيء.
ستون دقيقة، أو ثلاثون، أو مئة وعشرون: الانقطاع الذي يقع على فاصل منتظم ليس الشبكة تقريبًا. OpenVPN يجدّد مادة المفاتيح التي تحمي قناة البيانات وفق مؤقّت، والمؤقّت الأقصر من الذي افترضته يبدو تمامًا كرابط يفشل باستمرار. يبلّغ المستخدمون عن اتصال مقطوع بينما يبلّغ السجل عن تبادل مفاتيح ناجح. يفصل الدليل أدناه ذلك التجديد عن إعادة تشغيل حقيقية، ويقرأ القيمة السارية فعليًا، ولا يغيّرها إلا بعد أن تصبح التكلفة على الطاولة.
نفّذ الخطوات بالترتيب، لأن الخطوة الأولى تحدّد ما إذا كان بقية الصفحة ينطبق عليك أصلًا. إذا تخطّيت إلى الأمام فستقضي أمسية في ضبط مؤقّت لعطل لا علاقة له به.
ميّز إعادة الضبط المرنة من إعادة التشغيل
سطر السجل هو التشخيص كله. تكتب إعادة التفاوض إعادة ضبط مرنة ثم تبادل مفاتيح جديدًا داخل النفق نفسه: يحتفظ الواجهة بعنوانه، ولا تُضاف المسارات من جديد، وجلسات TCP القائمة تنجو عادةً مع توقف قصير. أما إعادة التشغيل الحقيقية فتمزّق الجلسة، وتعيد بناء الواجهة، وقد تمنح عنوان عميل مختلفًا، وتقتل كل اتصال طويل الأمد. كلا الحدثين عادي؛ وواحد فقط منهما يفسّر مكالمة ساقطة.
journalctl -u openvpn-client@office -b --no-pager | grep -nE 'soft reset|Connection reset|reneg|TLS Error'
openvpn --version | head -n 1
سطر الإصدار مهم لأن صياغة السجل تتغيّر بين الإصدارات، ورسالة تتذكرها من 2.3 قد تصاغ بشكل مختلف في 2.6. اقرأ سجلك أنت لا مقتطف منتدى لشخص آخر. اقتبس السطر الدقيق عندما تطلب المساعدة، لأن إعادة الصياغة تفقد التفصيل الذي يميّز الحدث. إذا بقي عنوان الواجهة دون تغيير خلال الحدث ونجت قائمة الجلسات، فأنت أمام تجديد، وتنطبق الأقسام المتبقية.
اقرأ المؤقّت الساري، لا ملفك
reneg-sec هو عدد الثواني بين إعادات تفاوض قناة البيانات وقيمته الافتراضية 3600. يحمل كل طرف قيمته، والأصغر من الاثنين هو ما يطلق التجديد فعليًا. تفسّر هذه القاعدة الواحدة معظم البلاغات: ملف تعريف عميل يضبط رقمًا كبيرًا ما زال يُعاد ضبطه كل ساعة بينما يحتفظ الخادم بالقيمة الافتراضية.
grep -Rn --include='*.conf' -E 'reneg-sec|reneg-bytes' /etc/openvpn
# server side, including included files
grep -Rn -E '^reneg-sec' /etc/openvpn/server/
اقرأ أيضًا التهيئة السارية للخادم، بما في ذلك أي شيء يدفعه، قبل أن تستنتج من ملف العميل. ثم ارفع مستوى التفصيل وراقب فاصلًا واحدًا من البداية إلى النهاية: المستوى 3 يُظهر بالفعل أسطر إعادة التفاوض، وتخبرك الطوابع الزمنية هل يتكرّر الحدث كل 3600 ثانية أم يتبع النشاط بدلًا من ذلك.
غيّره حيث يُدفع فعليًا
العلاج الشائع سطر واحد في ملف العميل، وهو المكان الخطأ نحو نصف الوقت. لأن قيمة الطرف الأصغر هي التي تفوز، يمكن لخادم لم يتغيّر أن يعيد تفاوض عميل ضبط المؤقّت على صفر.
# on both ends, or on the side that owns the pushed configuration
reneg-sec 0
حيث تُولَّد ملفات التعريف مركزيًا، عدّل القالب لا النسخة المنشورة، وإلا فإن تشغيل التزويد التالي سيعيد القيمة التي أزلتها للتو. تحقّق بمراقبة فاصلين لا فاصل واحد: ساعة هادئة واحدة تتوافق مع مؤقّت ضُبط على 7200.
قرّر أيضًا ما يحدث في نشر مختلط. طرح التغيير على العملاء أولًا يترك نافذة لا يزال الخادم فيها يطلق التجديد، وهذا غير ضار لكنه مربك إذا كنت تراقب السجلات للتأكيد. غيّر الطرف الذي يحمل القيمة الأصغر أولًا وسيختفي العَرَض عند النقطة التي تتوقعها.
ما الذي تتخلى عنه بتعطيل إعادة التفاوض
تحدّ إعادة التفاوض المنتظمة من المدة التي تحمي فيها مجموعة واحدة من مفاتيح قناة البيانات حركة المرور. إيقاف المؤقّت لا يكسر النفق، وعلى موجّه منزلي أو بوابة مكتب صغير يكون التعرّض العملي متواضعًا. يبقى مقايضة، ويستحق ذكرها قبل أن تقرّرها. ما يتغيّر هو المدة التي تحمي فيها مجموعة مفاتيح واحدة الجلسة، لا ما إذا كان النفق يعمل أصلًا.
الحالة المعقولة لتعطيله هي إعادة ضبط تكسر شيئًا لا يمكن استئنافه: مكالمة تسقط، أو جلسة سطح مكتب بعيد يجب إعادة إنشائها، أو نسخة احتياطية تبدأ من جديد. إذا كان التوقف غير مرئي للمستخدمين، فالإبقاء على القيمة الافتراضية لا يكلّف شيئًا ويحفظ لك تدوير المفاتيح.
فضّل إصلاح السبب عندما يسمح النمط بذلك. التجديد الذي يفشل في منتصف الطريق بينما نجحت المصافحة الأولى يشير إلى المسار لا إلى المؤقّت: ابحث عن مشكلة حجم حزمة في تبادل قناة التحكم الأكبر، أو جدار حماية حالِي يُسقط التدفق، أو اقتراح ينجح فقط في المحاولة الأولى. كل من هذه يترك أثرًا في السجل نفسه الذي قرأته للتو. تعطيل المؤقّت يخفي ذلك الدليل.
عندما يشير الفاصل إلى مكان آخر
جاران في التهيئة ينتجان أعراضًا متشابهة وإصلاحات مختلفة. ping-restart يعيد تشغيل النفق عندما لا يصل شيء لفترة محدّدة، بينما ping-exit يُسقط العميل بالكامل. الانقطاع الخامل دون أي إعادة تفاوض في السجل يعود إلى هذه أو إلى جهاز NAT انتهت صلاحية تعيين UDP لديه وفق جدوله الخاص.
موجّهات المستهلك ونقاط الاتصال المتنقلة وNAT من فئة المشغّل كلها تُنهي جلسات UDP الخاملة دون إبلاغ أحد. ذلك الفشل يتبع الخمول لا الساعة، وهذه هي العلامة: جلسة تسقط بعد عشر دقائق هادئة وتنجو من ساعة من حركة ثابتة ليست في إعادة تفاوض.
اكتب ثلاثة أشياء قبل أن تغيّر رابعًا: الفاصل الذي قسته، والقيمة السارية التي وجدتها، والأمر الذي أظهرها. إذا تحرّك الفاصل عندما يتحرّك المؤقّت، فالآلية محدّدة والإصلاح قرار بشأن المقايضة أعلاه. وإن لم يتحرك، فأعد الإعداد واستمر في مراقبة keepalive وحالة NAT وفقدان الحزم.