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

كل اسم نسخة يختار ملفه الخاص

في ملفات الوحدات المرفقة مع OpenVPN 2.6، تحمل وسائط البدء عنصرًا نائبًا للنسخة يُملأ من النص الذي يلي علامة @. يعمل قالب الخادم من دليل إعداد الخادم ويحل وسيطه مقابل %i.conf هناك، بينما يفعل قالب العميل الشيء نفسه من دليل العميل. لذا فإن [email protected] يقرأ admits.conf في دليل الخادم و [email protected] يقرأ uplink.conf في دليل العميل، ولا معنى لأي من الاسمين في الدليل الآخر.

تحقق من التعيين على الجهاز بدلًا من افتراض أن الحزمة أبقت الإعدادات الافتراضية من المنبع. يُسمح لملف تجاوز توزيعة أن يستبدل دليل العمل أو وسيط الإعداد مباشرة.

systemctl cat [email protected]
systemctl cat [email protected]

اقرأ سطر WorkingDirectory ووسيط الإعداد في ذلك المخرجات، لأن الوحدة الممكّنة هي الشيء الوحيد الذي يحدد أي ملف يُحمَّل. ملف تجاوز يضيف --config إلى ExecStart يتغلب على القالب حتى عندما يبدو مسار القالب صحيحًا. اطلب مسارات الشظية والتجاوز عندما تريد معرفة ما إذا كان هناك استبدال محلي قيد التشغيل. إذا كان كلا الدورين يشيران إلى ملف واحد، فلديك عملية واحدة تحاول أن تكون خادمًا وعميلًا في الوقت نفسه، والخيار اللاحق في ذلك الملف يفوز بصمت.

النقل المحلي والحمولة المُمرَّرة يصطدمان بخطافين مختلفين

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

FlowHook that sees itWhat to inspect
Roaming user handshakes to the serverLocal input and local outputListener socket, bind address, rule admitting the UDP port
User payload leaving through the upstream tunnelForwardIPv4 forwarding switch, selected route, permission rule, any translation
Pi's own connection to the upstream peerLocal outputUnderlay route to the provider endpoint, not the tunnel route

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

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

مسار مستورد قد يبتلع الردود الموجهة إلى مستخدميك

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

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

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

ip rule show
ip route get 198.51.100.7 from 192.0.2.10

تحقق من الفصل، ثم أوقف دورًا واحدًا في كل مرة

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

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

systemctl stop [email protected]
systemctl status [email protected] --no-pager
ss -lunp | grep openvpn
journalctl -u [email protected] -n 20 --no-pager

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

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