اثنان من شبكات VPN على جهاز Linux واحد: اختبر كلًّا منهما دون خلط النتائج
أيقونتان خضراوان ليستا مقارنة. ضع كل نفق في مساحة أسماء خاصة، واكتب التوقع أولًا، وأثبت المسار قبل أن تثق بالنتيجة.
أيقونتا اتصال خضراوان تبدوان كأنهما مقارنة، لكنهما عادةً مجرد مصادفة. إذا كان طلب الاختبار يستطيع استخدام أي من النفقين، فإن النتيجة تصف أحدهما في أفضل الأحوال ولا تصف أيًّا منهما في أسوئها. امنح كل ملاحظة سياقًا شبكيًا ووجهة مقصودة وتوقعًا مكتوبًا قبل تشغيل الاختبار. وعلى جهاز Linux تديره بنفسك، تكون مساحات الأسماء الشبكية المسماة أرخص طريقة لشراء هذا الفصل.
ضوءان أخضران ليسا مقارنة
تفصل مساحة الأسماء جداول التوجيه والواجهات وحالة حزمة الشبكة، لذلك لا يستطيع طلب بدأ داخل واحدة أن يستعير نفق أخرى بهدوء. لكنها لا تفصل المعالج ولا رابط الصعود الفيزيائي ولا خدمة محلل الأسماء العاملة على المضيف. وهذه الفجوة الأخيرة هي حيث تفشل معظم هذه الاختبارات دون أن يلاحظ أحد. فالبحث الذي يخرج من مساحة الأسماء ويسأل محلل المضيف يعيد جوابًا لا علاقة له بالنفق قيد الاختبار.
يفترض هذا الإجراء وجود مساحتي أسماء اختبار معتمدتين ومجهزتين مسبقًا مع اتصال خارجي عامل وعملاء مدعومين. وهو لا ينشئ شيئًا ولا يسجل شيئًا ولا يستبدل أي إعداد. وتبقى الأجهزة الافتراضية المنفصلة الخيار الصادق عندما يحتاج العميل إلى جلسة سطح مكتب كاملة أو يرفض العمل خارجها.
ثبّت التوقع قبل التشغيل الأول
حدد لكل سياق شكل النجاح: محلل الأسماء، واسم الخدمة، والعنوان المتوقع، والسلوك المطلوب عند سقوط النفق. واحفظ تلك القيم المخططة في عمودها الخاص، لأن السجل الذي يخلط الخطة بالملاحظة هو خيال بختم زمني. والقائمة أدناه هي الشكل الذي يحتاجه السجل، ويجب أن يكون كل صف قابلًا للتعبئة قبل الاتصال الأول.
| Tunnel | Owner | Client interface inside the namespace | Proof command | Required on disconnect |
|---|---|---|---|---|
| vpn-a | the identity that owns profile A, recorded by name | its own tun device, never the host's | ip -n vpn-a -4 route get 10.55.10.20 | traffic stops; no host-side fallback |
| vpn-b | a separate owner, even when both run on one box | its own tun device in its own namespace | ip -n vpn-b -4 route get 10.55.20.20 | verified separately, never inferred from A |
تحتاج أسلاك محلل الأسماء إلى سطرها الخاص في ذلك السجل، لأنها الحقل الأكثر عرضة للكذب. فالملفات المرتبطة بمساحة الأسماء مثل /etc/netns/vpn-a/resolv.conf تظهر في مساراتها المعتادة عندما يعمل أمر داخل مساحة الأسماء، كما مرجع iproute2 لمساحات الأسماء يوضح ذلك، لكن إعداد تحويل خدمة الأسماء وأي محلل محلي يطلقه قد يسحبان البحث عائدًا إلى المضيف.
نفق واحد في كل مرة، والآخر مفصول
وصّل A عبر مالكه الحالي بينما يبقى B متوقفًا، ثم افحص السياسة والمسارات والمسار المختار من سياق الإدارة. ثلاثة من الأوامر أدناه تقرأ الحالة؛ وآخرها فقط يتصل بخدمة أسماء، ولا يرسل أي منها طلب تطبيق.
sudo ip -n vpn-a -4 rule show
sudo ip -n vpn-a -4 route show table all
sudo ip -n vpn-a -4 route get 10.55.10.20
sudo ip netns exec vpn-a getent ahostsv4 svc-a.lab.internalيجيب البحث في المسار عن سؤال افتراضي حول وجهة، لذلك لا يمكنه إظهار أن الخدمة تقبل حركة المرور. احفظ هذين النوعين من الأدلة في عمودين منفصلين، لأن مسارًا سليمًا بجانب اتصال مرفوض نتيجة حقيقية وشائعة. ثم أرسل طلبًا واحدًا غير ضار ومصرحًا به باستخدام التطبيق الحقيقي، مطلقًا في سياق A بمستخدمه العادي غير المميز مع إبقاء التحقق من الشهادة ومصادقة التطبيق سليمين، وسجّل النتيجة مع عنوان المصدر الذي رصدته الخدمة. ثم افصل A عبر مالكه وأعد الخط الأساسي كله لـ B، مع تدوين أي تغيير في الإعداد تجريه، وإلا لم يبق الخطان الأساسيان قابلين للمقارنة.
كلاهما متصل، ثم إيقاف واحد في كل مرة
الحالة المستقرة هي الجزء السهل. مع توصيل النفقين، أعد بحث كل سياق وطلبه التطبيقي، ثم اكسر أحد النفقين وافحص الآخر. وأعد الاتصال بالتسلسل المعاكس عندما يكون ترتيب الاتصال نفسه هو السؤال المطروح.
sudo ip netns exec vpn-a tcpdump -ni any port 443 -c 5
sudo ip netns exec vpn-b getent ahostsv4 svc-b.lab.internal
sudo ip -n vpn-b -4 route get 10.55.20.20يحسم الالتقاط ما لا تستطيع نتيجة تطبيق حسمه: فهو يظهر هل غادر الطلب عبر الواجهة التي توقعت، أم عبر شيء آخر تمامًا. وسجّل لكل انتقال إجراء المالك والطابع الزمني ونتيجة المسار ونتيجة الاسم ونتيجة التطبيق. ثم افحص شرط الإغلاق الآمن داخل مساحة الأسماء المتأثرة، لأن العزل ليس مفتاح إيقاف. فمساحة الأسماء تبقي النفقين متباعدين؛ لكنها لا تمنع أيًّا منهما من حمل حركة المرور عندما يقول ملفه الشخصي إن الحركة يجب أن تتوقف.
ما يمكن لهذا السجل ادعاؤه وما لا يمكن
النجاح يثبت تلك الملاحظات لهذا الترتيب، على هذا المضيف، في ذلك الوقت. ولا يقول شيئًا عن عميلين يتشاركان جدول توجيه سطح مكتب واحد، ولا عن الإنتاجية بينما يحمل النفقان حِملًا. فهذه أسئلة منفصلة باختبارات منفصلة، والمقارنة لا تكون أفضل من السياق المرفق بكل صف.
احفظ الإخفاقات في السجل بجانب النجاحات، مع وسم النفق الذي كان متصلًا في ذلك الوقت. فصفحة نظيفة تخفي الحالة عند القياس أسوأ من صفحة قبيحة تظهرها. وما يجعل السجل قابلًا لإعادة الاستخدام لاحقًا هو السياق، لا النتيجة.
يمكن مقارنة نفقين على جهاز واحد بصدق، لكن فقط داخل عدد السياقات التي تحكمت فيها فعلًا. وأي شيء يتجاوز ذلك أمنية بأيقونة خضراء بجانبها.