طابِق عميل VPN على Linux مع بروتوكول الجهاز القديم
اقرأ المنافذ المنشورة للجهاز، ثم ثبّت العميل المناسب: pppd فوق GRE، أو strongSwan لـ IKEv1 XAuth، أو openconnect للبوابة.
أربع عائلات بروتوكولات تغطي تقريبًا كل جهاز لا يزال قابعًا في رفّ، وكل واحدة منها تفشل على Linux بطريقة مختلفة. المنافذ المنشورة في الطرف البعيد والمقترحات المهيّأة هي التي تحدّد الحزمة التي تحتاجها، لا التوزيعة التي تصادف أنك تشغّلها. أن تثبّت ما يذكره منشور في منتدى ثم تعدّل حتى يتصل شيء ما هو الطريق الذي يضيع فيه بعد الظهر. اقرأ الجهاز أولًا، وثبّت ثانيًا، وتحقق ثالثًا.
سجّل ما ينشره الطرف البعيد
اكتب البروتوكول والمنافذ وطريقة المصادقة التي يتوقعها الجهاز قبل أن تفتح مدير الحزم. أربع عائلات تغطي معظم المعدات القديمة، والجدول أدناه هو القرار كله في شاشة واحدة.
| Family | Ports | Linux side |
|---|---|---|
| PPTP | TCP 1723 plus GRE, IP protocol 47 | pppd with a peer file |
| L2TP/IPsec | UDP 500, 4500, 1701 | NetworkManager plugin over strongSwan |
| IKEv1 aggressive with XAuth | UDP 500 | native strongSwan connection |
| AnyConnect-style portal | TCP 443 | openconnect with a TUN device |
الدليل اليدوي وقواعد جدار الحماية الخاصة بالجهاز نفسه أوثق من اسم البروتوكول على صفحة تسجيل الدخول. جهاز يعلن IPsec قد لا يتحدث إلا بـ IKEv1، وقد يكون إصدار ثابت لم يطبّقه أحد هو ما يضيف IKEv2 في النهاية. تحقّق من مسار البيانات ومن منفذ الإعداد معًا، لأن هنا تختلف المعدات القديمة عن الشبكات الحديثة. الخطأ في هذه الخطوة يعني أنك تنقّح عميلك مقابل ميزة لم يملكها الطرف الآخر قط.
PPTP: أثبت GRE قبل أن تعدّل pppd
PPTP على Linux ليس برنامجًا خفيًا تشغّله، بل استدعاء لـ pppd، ومعاملات الاتصال تسكن في ملف قرين مسمّى يقرأه pppd عند استدعائه. التوزيعات ما زالت تحزمه، مع أن نقاط الضعف المعروفة في البروتوكول تجعله غير صالح لأي شيء حساس، فاحصره في جهاز لا يقدّم شيئًا آخر. راقب GRE بينما يتفاوض العميل، بتقاط قصير بدلًا من التخمين. الفشل الذي يستهلك أكبر وقت ليس المصادقة بل مسار البيانات المفقود.
pppd call branch-office
tcpdump -ni any proto gre -c 5
إذا اكتمل الإعداد ولم ينقل الرابط أي حركة، فاشتبه في مسار GRE قبل أن تلمس بيانات الاعتماد. تحتاج مجموعات الأمان السحابية قاعدة صريحة للبروتوكول 47، وبعض الشبكات تحجبه كليًا دون خطأ ظاهر. اختبر من الشبكة التي ستستخدمها فعلًا، لا من مختبر يسمح بكل شيء.
L2TP/IPsec: مقترح واحد مطابق يتغلب على عشر محاولات
اقرأ سجل البرنامج الخفي بدلًا من نافذة سطح المكتب، لأن النافذة تجمع عدة إخفاقات متمايزة في رسالة واحدة. خطأ NO_PROPOSAL_CHOSEN ينتمي إلى المرحلة الأولى: عرض العميل تشفيرًا أو تجزئة أو مجموعة Diffie-Hellman لا يقبلها الخادم. عدّد ما يدعمه الجهاز واكتب مقترحًا واحدًا يطابقه، لأن التركيبات العشوائية تنتج الخطأ نفسه ببطء أكبر في الغالب. على سطح المكتب، العميل العملي هو ملحق NetworkManager L2TP مع strongSwan أو Libreswan تحته.
قد يعني نص المقترح الشيء نفسه لملحق سطح المكتب ويعني شيئًا آخر للبرنامج الخفي الذي يسلّمه العمل، فاحتفظ بالصياغة المناسبة للطبقة التي تعدّلها. إذا طلب الجهاز أيضًا سرًا للنفق، فتلك مرحلة منفصلة عن مفتاح IPsec. تأكد أيّهما تسأل عنه الواجهة قبل أن تكتب فيه أي شيء.
IKEv1 بالوضع العدواني مع XAuth، وحالة البوابة
طرف بنمط FortiGate يريد عادةً الوضع العدواني مع XAuth وعنوانًا بنمط التهيئة، وهو ما قد لا يعرضه ملحق رسومي إطلاقًا. البرنامج الخفي الأصلي يتعامل معه، والكتلة أدناه هي شكل ذلك الإعداد لا ملف كامل. راجع وثائق المورّد الحالية لقيم المقترح.
conn branch
keyexchange=ikev1
aggressive=yes
leftauth=psk
leftauth2=xauth
leftsourceip=%config
right=203.0.113.10
إصدارات strongSwan الأقدم استخدمت xauth=client حيث يستخدم الإصدار 5 leftauth2=xauth، لذا قد يفشل مقتطف منسوخ بسبب الصياغة وحدها. بالنسبة لبوابة TLS، يتعامل openconnect الناطق ببروتوكول AnyConnect مع Cisco ومعظم الأسماء المعاد علامتها، ويحتاج إلى جهاز TUN وإلى الصلاحيات لتهيئته. مرّر عنوان البوابة تمامًا كما يعرضه المتصفح، بما في ذلك أي مسار يتوقعه الجهاز، ثم افحص العنوان المخصّص قبل اختبار أي شيء خلفه. إنشاء الواجهة مسبقًا يزيل صنفًا من المفاجآت أثناء الإعداد.
sudo ip tuntap add dev tun0 mode tun
sudo openconnect --protocol=anyconnect vpn.example.com
اتصل، ثم تحقق بترتيب ثابت
شغّل مدير VPN واحدًا فقط في كل مرة، لأن ملف NetworkManager وبرنامجًا خفيًا مبدوءًا يدويًا سيتصارعان على المسارات وDNS. أنزل الملف قبل اختبار اتصال يدوي، وتأكد من عدم بقاء واجهة نفق قديمة. ثم تحقق بهذا الترتيب: عنوان النفق، والمسار إلى المضيف الداخلي الوحيد الذي تحتاجه، وتحليل الأسماء، وأخيرًا طلب فعلي. أيقونة خضراء تثبت المصادقة ولا شيء غيرها.
ip -4 addr show tun0
ip route get 10.20.30.10
getent hosts app.internal
إذا فشلت خطوة، فتوقف عندها بدلًا من اختبار التالية، لأن فشل DNS في اتجاه مجرى مسار مكسور لا يعلّمك شيئًا. احفظ نسخة من الملف العامل قبل التجريب، لأن ملف اتصال محذوفًا يسهل فقدانه ويصعب إعادة بنائه. احتفظ بقيم المقترح في الملاحظة نفسها مع طراز الجهاز وإصدار الثابت، لأن تلك الملاحظة هي الفرق بين ترحيل ومشروع تنقيب آثاري عندما يُستبدل الصندوق.