انسخ الملف الشخصي إلى الجهاز اللوحي واتصل، فيسقط الحاسوب المحمول. أضف duplicate-cn، فيبقى الاثنان متصلين، وتبدو المشكلة محلولة إلى أن يتنازع الجهازان على عنوان النفق نفسه أو يُخرج جهاز لوحي مفقود الحسابَ كله عن الاتصال. يغيّر هذا الخيار شيئًا واحدًا فقط: ما إذا كان الخادم يسمح بجلسة ثانية تحت اسم رآه من قبل. وكل ما يتوقع الناس أن يصلحه، من استقلال الأجهزة إلى العنونة لكل جهاز إلى الإلغاء الانتقائي، ما زال يُنجز بواسطة الهوية، والهوية هنا هي الشهادة.

الأسطورة: الجلسة الثانية هوية ثانية

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

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

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

ما يتغيّر فعلاً عندما تتشارك جلستان اسمًا واحدًا

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

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

تأكد مما يفعله إصدارك فعلاً قبل أن تصمم على أساسه، لأن أثر الخيار يحدده الخيار نفسه لا الحكايات المتوارثة:

grep -n 'duplicate-cn\|client-config-dir\|username-as-common-name' /etc/openvpn/server.conf

العنوان الثابت الذي ظننت أنك عيّنته

تُبحث تهيئة كل عميل بالاسم، وهنا الفخ. فملف client-config-dir المسمّى على اسم مشترك ينطبق على كل جهاز يستخدم ذلك الاسم، لذا يمنح ifconfig-push بداخله الجهازين عنوان النفق نفسه. وعندها إما تفشل الجلسة الثانية في الإنشاء، أو تتصادم بطريقة تشبه عطل التوجيه.

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

إذا كان النشر يستخدم username-as-common-name، يصبح مفتاح البحث اسم المستخدم الموثَّق بدلاً من موضوع الشهادة، ويتبع التصادمُ نفسه أي شخص يسجل الدخول مرتين. والاسم الذي يقود التهيئة يجب أن يكون فريدًا لكل جهاز كي تكون لتهيئة كل جهاز معنى.

ما لا تستطيعه الهوية المشتركة عند الإزالة

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

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

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

متى تكون المشاركة صحيحة، وكيف تحدّ منها

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

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

أي مسار اخترت، اختبر نموذج الإدارة لا تسجيل الدخول. صل الجهازين، وتأكد أن لكل منهما عنوانًا مختلفًا، ثم حاكِ فقدان أحدهما وتحقّق من قدرتك على إزالة واحد منهما بالضبط. إن دليل openvpn(8) يحدد نطاق الخيار؛ وإجراء الإزالة لديك هو ما يحدد إن كانت المشاركة مقبولة فعلاً.

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