عميلان VPN على سطح مكتب واحد: ما يتصادم وما ينجح
يتنازع عميلان على المسار الافتراضي وخدمة تحليل الأسماء ومشغلات التصفية. سجّل من يملك الخروج، ثم اعزل النفق الثاني بآلة افتراضية أو نطاق شبكي.
يتصل عميلك الثاني، فتتوقف أسماء موارد العميل الأول عن العمل، وتقول تذكرة الدعم إن شبكة العمل الخاصة أفسدت الشبكة الشخصية. لا شيء معطل بمعنى العطل: كلا العميلين فعل ما صُمم لأجله، والجهاز يملك جدول توجيه واحدًا فقط. التصادم يدور حول أربعة موارد يفترض كل عميل أنه يملكها. اعالجها بالترتيب، وعادةً ما يصبح الحل قرار تصميم لا إصلاحًا.
الخطوة 1: اكتشف أي عميل يملك الخروج
اقرأ قرار الخروج الحالي قبل تغيير أي شيء. يخبرك البحث عن مسار عنوان عام بأي واجهة والقفزة التالية التي ستستخدمها الحزمة الآن، وهذا هو جواب من فاز. قارنه بأسماء الواجهات التي أنشأها العملاء، والتي تحمل عادةً اسم المنتج أو البروتوكول. إذا أشار البحث إلى نفق لم تتوقعه، فقد وجدت التصادم بالفعل.
ip route get 1.1.1.1
ip route show default
route print
بعض العملاء لا يستبدلون المسار الافتراضي إطلاقًا؛ بل يضيفون نصفين، واحدًا للنصف الأدنى من فضاء العناوين وآخر للنصف الأعلى، ويغطي الاثنان كل شيء معًا. هذا يبقي المسار الافتراضي الأصلي ظاهرًا ويجعل الإصلاح اليدوي يبدو صحيحًا بينما يظل النقل يخرج عبر النفق. اقرأ المتري وطول البادئة، لا مجرد وجود مدخل افتراضي.
توقف إذا ادّعى كلا العميلين البادئة نفسها بالمتري نفسه. سيختار النواة واحدًا، وسيظهر الآخر متصلًا بينما لا يحمل شيئًا.
الخطوة 2: افحص محلل الأسماء والبادئات المتداخلة
DNS هو التصادم الثاني، وينتج عرَضًا مميزًا: تفشل الأسماء بينما تعمل العناوين. كل عميل يدفع محلله الخاص، والكاتب الأخير يفوز بالاستعلامات التالية. اسأل خدمة المحلل عما تستخدمه لكل رابط بدلًا من قراءة صفحة إعدادات العميل.
resolvectl status
Get-DnsClientServerAddress
dig +short intranet.corp.example
ثم قارن البادئات الخاصة التي تستخدمها الشبكتان. إذا كان الطرفان يخصصان من النطاق نفسه، فلن يصلحه أي ترتيب من جهة العميل، لأن الجهاز لا يستطيع التمييز بين وجهة 10.0.0.0/8 التي تنتمي إلى أي نفق. يجب إعادة ترقيم أحد الطرفين أو ترجمته، وهذا حديث مع مالكي الشبكة لا تغيير إعدادات. التداخل هو التصادم الوحيد الذي يكون فيه الجواب الصادق أن التصميم يجب أن يتغير.
توقف هنا إذا تداخلت البادئات. كل ما يأتي لاحقًا في هذه القائمة يفترض أنها لا تتداخل.
الخطوة 3: اختر نمط فصل يصمد
تتجنب الأنماط الموثوقة تشغيل عميلين على جدول التوجيه نفسه. عميل واحد بسياسة نفق منقسم تصل إلى الشبكتين الخاصتين هو الأبسط، شرط ألا تتداخل الوجهات وأن يوافق مالك السياسة. الآلة الافتراضية أو نطاق الشبكة هو الخطوة التالية، لأن كلًا منهما يحصل على جدوله ومحلله.
sudo ip netns add vpn2
sudo ip netns exec vpn2 ip link show
sudo ip netns exec vpn2 curl -sI https://intranet.corp.example/
يمنح نطاق الشبكة الفصل نفسه الذي تمنحه الآلة الافتراضية دون نظام تشغيل ثانٍ، لكن له حواف خشنة: يجب نقل جهاز النفق إليه، ويجب تشغيل التطبيق داخله. غالبًا ما يكون الجهاز المادي المنفصل الخيار الأقل مفاجأة لشبكة شخصية إلى جانب عميل عمل مُدار. تكديس نفق داخل آخر ليس نمط فصل؛ يجب أن يبقى الطرف الداخلي قابلًا للوصول عبر النفق الخارجي، ويضيف الترتيب مشكلات MTU والكمون فوق ذلك.
اختر نمطًا واحدًا واكتب سبب اختياره. خلط نطاق لتطبيق واحد مع نفق منقسم للباقي يعيد إنتاج التصادم الأصلي في صورة يصعب تتبع أخطائها.
الخطوة 4: تحقق من الشبكتين من الجلسة نفسها
اختبر موردًا واحدًا على كل شبكة خاصة من البيئة التي يعمل فيها التطبيق فعليًا، لا من صدفة الأوامر إذا كان التطبيق يعمل داخل نطاق شبكة. افحص واجهة الخروج والعنوان المحلول ورمز الاستجابة معًا، لأن نجاحًا في واحد من الثلاثة قد يخفي فشلًا في الآخرين. أعد الاختبار بعد إعادة التشغيل، لأن ترتيب بدء العملاء يحدد أيّهم يفوز. هذا الترتيب هو الجزء الذي ينسى الناس تسجيله.
curl -sI https://intranet.corp.example/
curl -sI https://files.personal.example/
ip route get 10.20.30.40
سجّل إصدارات العملاء والواجهات وحالة محلل الأسماء والبادئات لكل شبكة. عندما يحدّث عميل سلوكه في التوجيه، يكون ذلك السجل هو الفرق بين إصلاح دقائق وبناء من جديد. لن يشاركك الشخص التالي ذاكرتك عن أي نفق ظهر أولًا.
تكتمل القائمة عندما تستطيع تسمية الواجهة التي تملك المسار الافتراضي، والمحلل الذي يستخدمه كل اسم، والنمط الذي يعزل النفق الثاني، ونتيجة طلب واحد لكل شبكة بعد إعادة التشغيل. أي شيء أقل من ذلك إعداد يعمل اليوم صدفةً.