حد الجلسات في حساب VPN مشترك: لماذا يسقط جهاز واحد
تسجيل دخول مشترك يبلغ حد الجلسات المتزامنة فيسقط جهاز واحد. اقرأ رسالة العميل، وأحصِ الجلسات على الخادم، ثم أصلح نموذج الهوية.
تضيف حاسوبًا محمولًا ثانيًا إلى الحساب الذي يعمل أصلًا على هاتفك، فيسقط نفق الهاتف خلال دقيقة. أو لا يكمل الجهاز الجديد الاتصال أبدًا، وينتهي العميل عند رسالة سياسة لا عند مهلة. الشبكة سليمة في الحالتين؛ فالقرار اتُّخذ فوقها. تسجيل الدخول المشترك هو هوية واحدة، ومعظم خدمات VPN تعدّ تلك الهوية لا عدد الأجهزة التي تملكها. أنا أعمل من شاشة العميل إلى الخارج، وهي عادةً تُظهر أي طبقة رفضتك.
اقرأ رسالة العميل قبل أن تلمس الشبكة
ثلاثة أعطال تبدو متشابهة وليست كذلك. المهلة تعني أن حزمك لم تصل إلى شيء. وخطأ TLS أو الشهادة يعني أن الطرف الآخر أجاب لكن المصافحة فشلت. ورفض المصادقة أو السياسة يعني أن البوابة قرأت بيانات اعتمادك ثم رفضتها. الثالث وحده ينتمي إلى قصة حد الجلسات، فثبّته أولًا.
OpenVPN يحفظ عملاء الأسطر المهمة في لوحة السجل. مرّر إلى آخر محاولة اتصال لا إلى حلقة إعادة المحاولة التي تليها، وابحث عن AUTH_FAILED أو سلسلة سبب مدفوعة. كثيرًا ما يبلّغ العميل عن رفض عام بلا تفسير، فتبقى الخطوة التالية على الخادم لا على إعدادات العميل. وتطبيقات المزوّد أسوأ: رسالة حد الأجهزة مفيدة، لكن اتصالًا ينهار بعد ثانيتين هو قرار سياسة لا كلمة مرور خاطئة. سجّل اسم الجهاز والوقت الدقيق في الحالتين؛ فالمشغّل يستطيع مطابقة ذلك الزوج بسجل وصول في ثوانٍ.
أحصِ الجلسات حيث يحصيها الخادم
العدّاد المهم يقيم على البوابة. يكتب OpenVPN ملف حالة عندما يبدأ الخادم بـ --status، ويسرد فيه كل عميل متصل باسمه العام وعنوانه الحقيقي وعدّادات حركته.
cat /var/log/openvpn-status.log
# or query the management socket directly
echo "status 2" | socat - UNIX-CONNECT:/run/openvpn/server.sock
صفّان بالاسم العام نفسه هما جلستان حيّتان تحت شهادة واحدة. افتراضيًا لا يُبقي OpenVPN الاثنين: فبدون --duplicate-cn يستبدل الاتصال الثاني الذي يستخدم الشهادة نفسها الأول، ويفقد الجهاز الأقدم نفقه. ذلك الاستبدال هو بصمة حد الهوية. وفقدان الحزم العشوائي لا يفصل جهازًا واحدًا بلطف في اللحظة التي يظهر فيها آخر.
لا يملك WireGuard جدول جلسات لفحصه. يطبع wg show wg0 الأقران وأحدث مصافحة لهم، وكل جهاز مسجَّل هو قرين بمفتاحه الخاص. والحساب المشترك هناك هو ملف إعداد نُسخ إلى عدة أجهزة، ويأتي الحد من الجهة التي توزّع تلك الملفات: بوابة المزوّد، أو عدد المقاعد، أو قاعدة مرتبطة بعنوانك العام. ويوثّق دليل OpenVPN 2.6 خيارات جهة الخادم إن كنت تدير بوابتك بنفسك.
افصل الحدود الأربعة التي تختبئ خلف رسالة واحدة
معظم تذاكر الحساب المشترك هي أحد أربعة قرارات دخول. لا يستطيع العميل التمييز بينها، لكن نمط الجهاز الذي يفشل يستطيع.
الهوية نفسها، اتصال ثانٍ. يعمل الجهاز الجديد ويموت القديم في اللحظة نفسها. هذه قاعدة تزامن لكل هوية تفرضها البوابة أو نظام الحساب. لا شيء معطوب؛ فالخدمة تفعل ما تقوله سياستها.
عدد المقاعد أو الأجهزة في الخطة. تبقى الأجهزة الأولى متصلة ويُرفض التالي بينما يستمر الآخرون. تحقّق من قائمة أجهزة المزوّد قبل أن تغيّر عميلًا، لأن حد الترخيص لا يُصلح من جهة العميل.
سقف مرتبط بعنوانك العام. يفشل حاسوبان محمولان خلف موجه منزلي واحد بينما يعمل تسجيل الدخول نفسه من نقطة اتصال هاتف. انقل الجهاز الثاني إلى شبكة أخرى لتختبره. فإن اتصل هناك فأنت تنظر إلى قاعدة لكل عنوان أو قاعدة NAT، لا إلى عدد الحساب.
حد أقصى على مستوى الخادم. يفشل كل من على البوابة في ساعة الذروة نفسها، بما في ذلك حسابات كانت بخير أمس. هكذا يعمل --max-clients في OpenVPN، ولا علاقة له بأجهزتك المسجَّلة.
نظّف الجلسات القديمة قبل شراء مقاعد أكثر
جلسة انتهت بشكل سيئ قد تحتفظ بمقعد. تكتب محاسبة RADIUS سجلًا عند بدء الجلسة وتغلقه عند توقفها؛ وعندما يختفي عميل لا يصل الإغلاق أبدًا فيُبقي الخادم الجلسة حتى ينتهي تحديث مؤقت أو مهلة. على بوابة FreeRADIUS يمكنك رؤية السجلات المفتوحة:
SELECT username, acctsessionid, acctstarttime
FROM radacct WHERE acctstoptime IS NULL;
سجل مفتوح بوقت بداية قديم وبلا حركة يخص جهازًا راحلًا بالفعل. أغلقه من وحدة تحكم المشغّل أو بطلب فصل، قبل أن تفترض أن الحد كان حقيقيًا. تعيد الهواتف الاتصال حين ينتقل Wi-Fi إلى الشبكة الخلوية، ويمكن لحاسوب محمول أن يشغّل نفقًا في نظام التشغيل وآخر داخل تطبيق مزوّد، وهذا يعدّ جلستين من جهاز واحد.
كفّ عن مشاركة هوية واحدة بين أجهزة تعمل معًا
الإصلاح الدائم بنيوي. أعطِ كل جهاز شهادته الخاصة باسم عام فريد، أو حسابه الخاص، وسجّل من يحمله وأي جهاز. على OpenVPN يعني ذلك شهادة عميل لكل جهاز، مع إبقاء --duplicate-cn مطفأً إلا إن أردت سلوك الاستيلاء؛ وعلى WireGuard زوج مفاتيح لكل جهاز، يُولَّد هناك ولا يُنسخ أبدًا.
نسخ ملف تعريف لتجاوز حد الأجهزة يكسر الإبطال: إبطال نسخة واحدة يقطع كل جهاز يشاركها، ولم يعد السجل يستطيع أن يقول أي جهاز فعل ماذا. إن كان الحد تجاريًا فالإصلاح الصادق مقعد إضافي؛ وإن كانت سياسة داخلية فاطلب هوية ثانية بالحقوق نفسها.
تحقّق بترتيب ثابت
اختبر الإصلاح بالطريقة نفسها في كل مرة، حتى يعني الناتج شيئًا.
- سجّل الخروج على كل جهاز وتأكد أن قائمة الخادم النشطة فارغة؛ فمدخل لا يُمسح هو جلسة قديمة لا عيب في العميل.
- وصّل الأجهزة واحدًا تلو الآخر وراقب القائمة بين الاتصالات.
- إن وجب أن يعمل اثنان معًا، فتأكد أن الصفّين يحملان هويتين مختلفتين وأن كليهما يحافظ على مصافحة حديثة.
- كرّر بعد الانتقال من Wi-Fi إلى الشبكة الخلوية، لأن إعادة الاتصال قد تنشئ سجلًا ثانيًا.
إن ظل الجهاز القديم يسقط عند اتصال الجديد، فالبوابة تفرض قاعدة لكل هوية لم تُمنح استثناءً منها. أحضر للمشغّل أسماء الأجهزة والطوابع الزمنية وقائمة الجلسات النشطة؛ فذلك يحوّل شكوى غامضة إلى سؤال سياسة يستطيعون الإجابة عنه.