موجّه LAN مع عميل VPN: جهازان وجدولا توجيه
القفزة التالية للموجّه لا تُسلّم الحزم إلا إلى العميل. أضف مسار النفق الخاص بالعميل، والتمرير، ومسار عودة، ثم اختبر من مضيف على الشبكة المحلية.
يوجد جهازان يمرّران الحزمة، ولكل منهما جدوله الخاص. يعرف موجّه الشبكة المحلية أن البادئة البعيدة تنتمي إلى عميل VPN، ويعرف عميل VPN كيف يصل إلى تلك البادئة عبر نفقه. إذا أعددت الجدول الأول وحده، وصلت الحزمة إلى جهاز لا يملك مسارًا مطابقًا، فتخرج مرة أخرى عبر المسار الافتراضي. هذا هو الخلل كله، ويبدو من جهة الشبكة المحلية كحلقة توجيه لأنه يكاد يكون كذلك فعلًا.
ارسم القفزتين قبل أن تلمس أي مسار
خذ تخطيطًا توضيحيًا: مضيفات الشبكة المحلية على 192.168.50.0/24، والموجّه العادي على 192.168.50.1، وعميل مخصّص على 192.168.50.15، وشبكة محلية بعيدة على 10.60.0.0/24 لا يمكن الوصول إليها إلا عبر النفق الذي يملكه ذلك العميل. لا يتداخل أي من النطاقين الخاصين مع الآخر، وللنفق خطة عناوين خاصة به.
كلا النطاقين الخاصين مهمان لأنهما يحددان أي جهاز يستطيع الإجابة. سترى الجهة البعيدة الحزمة تصل من عنوان نفق العميل، ويجب أن تجد استجابتها طريقًا للعودة إلى 192.168.50.0/24. إذا أُعدّ الاتجاه الصادر وحده، فقد ينجح الطلب بينما تختفي الاستجابة.
الخطوة 1: وجّه الموجّه إلى العميل، لا إلى النفق
على موجّه الشبكة المحلية، أضف مسار وجهة تكون قفزته التالية عنوان الشبكة المحلية للعميل:
ip route add 10.60.0.0/24 via 192.168.50.15
ip route get 10.60.0.55
يقول ذلك السجل «سلّمها إلى الجهاز القادر على إنشاء النفق». ولا يقول شيئًا عن كيفية بناء النفق، وليس بديلًا عن مسار العميل نفسه. على موجّه مُدار يعيش المكافئ في صفحة المسارات الثابتة في الجهاز؛ وعلى موجّه Linux ينتمي إلى إعداد الواجهة التي تملك الشبكة المحلية، لا إلى صدفة ستغلقها.
تحقّق من إجابة الأمر الثاني. إذا أبلغ عن العميل كبوابة وعن واجهة الشبكة المحلية كجهاز، فالقفزة الأولى صحيحة والعمل المتبقي على الجهاز الآخر.
الخطوة 2: امنح العميل مسارًا خاصًا به من جهة النفق
يتلقى العميل الآن حزمة للوجهة 10.60.0.0/24 ويراجع جدوله الخاص. إذا كان إعداد نفقه قد ثبّت مسارًا لتلك البادئة، تابعت الحزمة مشفّرة. وإذا لم يكن، طابقت الحزمة المسار الافتراضي العادي وعادت إلى 192.168.50.1، الذي يرسلها إلى العميل مرة أخرى.
انظر قبل أن تضيف أي شيء:
ip route show table all | grep -E "10\.60\.0\.0/24|default"
sysctl net.ipv4.ip_forward
غياب مسار البادئة في كل الجداول هو النتيجة التي تبحث عنها. أضفه عبر إعداد النفق نفسه، لكي يعيد الاتصال التالي تثبيته؛ فأمر ip route add اليدوي يزول مع الجلسة ويعيد العطل في أقل وقت مناسب. القفزة التالية هي واجهة النفق أو العنوان الذي يخصّصه VPN كقرين، حسب العميل، وينبغي أن يأتي عنوان القرين من الملف الحالي لا من ملاحظة قديمة.
الحلقة، حين تحدث، ليست لانهائية عمليًا: ينخفض TTL في كل مرور وتموت الحزمة برسالة تجاوز المهلة. لهذا قد يوحي traceroute متكرر بدورة، بينما يُسقط عميل لا يمرّر الحزم ببساطة الحزمة نفسها بصمت.
الخطوة 3: اسمح بالتمرير واختر مسار العودة
الاستقبال والتمرير صلاحيتان مختلفتان. net.ipv4.ip_forward=1 على العميل يسمح بالعبور على مستوى النواة، لكن قاعدة جدار الحماية ما زالت عليها أن تسمح به بين واجهة الشبكة المحلية والنفق. القاعدة التي تسمح بالوصول إلى صفحة إدارة العميل نفسه لن تسمح بالعبور إلى الشبكة المحلية البعيدة، والتمييز سهل الإغفال عندما يجيب المضيف نفسه على اختبارات ping محليًا.
لدى الجهة البعيدة المشكلة المعاكسة. يجب أن تعرف أن 192.168.50.0/24 يمكن الوصول إليها عبر هذا العميل الموثّق. مع OpenVPN يعني ذلك عادةً مسارًا لكل عميل يدفعه إعداد الخادم، أو ملفًا خاصًا بالعميل على الخادم يعلن الشبكة المحلية خلف العميل. وبدون ذلك، فإما أن تُسقط الشبكة المحلية البعيدة الاستجابة أو ترسلها إلى بوابتها الافتراضية، أي الإنترنت.
ترجمة المصدر هي البديل عندما لا يمكن الإعلان عن بادئة الشبكة المحلية. قاعدة masquerade محدودة النطاق على العميل تعيد كتابة المصدر إلى عنوان النفق، فتعود الاستجابات طبيعيًا. وهي أيضًا تخفي أي مضيف في الشبكة المحلية أرسل الطلب، ولا تسمح بحد ذاتها للجهة البعيدة ببدء اتصالات إلى الداخل. اختر هذه المقايضة عن قصد بدلًا من إضافة masquerade شامل واكتشاف الأثر الجانبي لاحقًا.
الخطوة 4: ثبّت القرارين، ثم اختبر المسار الحقيقي
لكل مسار مالك، والمالك هو الإعداد الذي يُعاد توليده عند الإقلاع أو عند إعادة الاتصال. على الموجّه قد يكون ذلك إدخال مسار ثابت؛ وعلى العميل قد يكون ملف VPN أو NetworkManager أو systemd-networkd. تحقّق بإعادة توصيل النفق وإعادة تشغيل العميل، ثم اقرأ الجدول مرة أخرى بدلًا من الوثوق بالتعديل.
أبقِ المسار الافتراضي الذي يحمل الاتصال الخارجي للنفق سليمًا. استبداله «لتبسيط» الإعداد يكسر المسار المشفّر قبل أن يتمكن أي مرور داخلي من استخدامه، والعَرَض هو نفق لا يُعاد إنشاؤه أبدًا بعد التغيير.
اختبر من مضيف عادي في الشبكة المحلية، لا من العميل، لأن الطلب الصادر من العميل لا يمارس أبدًا القفزة الأولى للموجّه. اجلب خدمة موجودة فقط على الشبكة المحلية البعيدة وتحقّق من نص الاستجابة، ثم افحص عدّادات العميل أو سجلاته لترى العبور يحدث. traceroute داخلي يُظهر قفزات خاصة يثبت التمرير لا التشفير: المسار الخارجي ملاحظة منفصلة، وعدّادات واجهة النفق وحدها تُظهر ما خرج عبرها.