قاعدة الشبكة الافتراضية الواحدة في أندرويد لا تحجب خادم SSH المستضاف
حدّ الشبكة الافتراضية الواحدة يقيّد خدمات VPN لا المقابس. خادم SSH على الهاتف يفشل بسبب المستمع أو وصول النظير أو مسار الرد.
الاعتقاد شائع إلى حد يُعامل كحقيقة: أندرويد يسمح بشبكة افتراضية واحدة فقط، لذلك لا يستطيع خادم SSH على الهاتف العمل عبر ذلك النفق. النصف الأول صحيح والنتيجة لا تلزم. حدّ المنصة يتعلق بعدد التطبيقات التي يجوز لها احتلال خانة خدمة الشبكة الافتراضية، لا بعدد المقابس التي يمكن أن توجد ولا بمن يُسمح له بالاتصال بالهاتف. عفريت SSH الذي يملك مقبس استماع تطبيق عادي بمنفذ عادي، والنفق أحد المسارات التي يمكن أن يسلكها حراكه.
ما الذي يقيّده حدّ الشبكة الافتراضية الواحدة فعلاً
VpnService مورد بخانة واحدة. عندما ينشئ تطبيق نفقاً يصبح شبكة الجهاز الافتراضية، ويُرفض تطبيق ثانٍ يحاول إنشاء واحد حتى يزول الأول. هذه قاعدة بشأن ملكية النفق، وهي تفسر لماذا لا يستطيع عميلا VPN العمل في الوقت نفسه.
لا تقول شيئاً عن مقابس الاستماع. خادم SSH لا يستدعي VpnService ولا يعترض الحزم ولا ينافس على تلك الخانة. يربط منفذاً ويقبل الاتصالات، وهو ما يفعله دون تثبيت أي شبكة افتراضية أصلاً. فالأسطورة تخلط بين حدّ على مزوّدي الأنفاق وحدّ على اتصالات الشبكة، ولا علاقة بين الاثنين.
المستمع وجهة وصول لا جزء من النفق
بعد وجود النفق يكون للهاتف عنوان عليه، وللجهاز النظير مسار إلى ذلك العنوان. أما هل يجيب شيء، فيقرره المستمع. العفريت المربوط بالحلقة المحلية لا يُبلغ إلا من الهاتف نفسه؛ والعفريت المربوط بعنوان النفق القديم قد يحتفظ بربطه بعد إعادة الاتصال بينما تغيّر العنوان الذي رُبط به.
قواعد الربط تكوين SSH عادي: عنوان الاستماع ومنفذه، ومن يجوز له المصادقة. على أندرويد تعيش هذه الإعدادات في تكوين التطبيق نفسه، وقد لا يُسمح لمالك عملية التطبيق باستخدام منافذ مميزة، لذا عادة سطح المكتب في ربط المنفذ 22 بصلاحيات الجذر لا تنتقل كما هي.
ListenAddress 10.90.0.4
Port 2222
AllowUsers aliceثم هناك الإذن على المسار نفسه. الشبكة الافتراضية الاستهلاكية التي تحمل حراك الويب الصادر بسرور ليست ملزمة بالسماح بالاتصالات الواردة إلى عملائها إطلاقاً؛ وكثير منها لا يفعل، لأنه سيعرّض عميلاً لآخر. وإذا تعذّر على النظير بلوغ عنوان الهاتف في النفق من أي مكان، فالمشكلة في سياسة الخدمة لا في الهاتف.
مسار الرد هو الموضع الذي ينكسر عادة
لنفترض أن النظير يبلغ عنوان الهاتف في النفق وتصل حزمة SYN. على الرد الآن أن يخرج بالمسار نفسه، وذلك قرار توجيه داخل الهاتف. وإذا خرج الرد عبر Wi-Fi لأنه الشبكة الافتراضية، يرى النظير اتصالاً لا يكتمل أبداً، وهو ما يبدو تماماً كجدار ناري.
يجعل أندرويد الأمر أعقد من سطح المكتب لأن الشبكة الافتراضية تُختار لكل عملية ويمكن أن تغيّرها سياسة تطبيق الشبكة. يستطيع عميل VPN توجيه قائمة تطبيقات مسموحة فقط، لذا يظل تطبيق خادم خارج تلك القائمة يستخدم الشبكة الفيزيائية لردوده بينما يتوقعها النظير عبر النفق.
يمكن للتطبيق أيضاً ربط مقابسه بشبكة محددة، وهذا يتجاوز الافتراضي. حين تقرأ تقريراً بأن خدمة يُبلغ من عنوان ولا يُبلغ من آخر، فهذه عادةً هي الآلية الكامنة وراءه.
تجاوز الشبكة الافتراضية لا يصلح خدمة واردة
الحل الشائع، استبعاد تطبيق SSH من الشبكة الافتراضية حتى يتوقف إعادة توجيه حراكه، هو إصلاح للمشكلة المعاكسة. يفيد حين ينكسر نقل عميل SSH الصادر باستمرار بسبب النفق. أما لخادم مستضاف فقد ينقل الردود خارج النفق الذي يستخدمه النظير، فيحوّل فشلاً جزئياً إلى فشل كامل.
ينطبق الأمر ذاته على فتح منفذ عام على الموجه. إذا كان المطلوب أن يبلغ جهاز مصرّح واحد الهاتف عبر الشبكة الافتراضية، فإن تعريض SSH للإنترنت نموذج تهديد مختلف وليس إصلاحاً.
قرر عنوان الخدمة أولاً: عنوان الهاتف في الشبكة المحلية، أو عنوانه في النفق، أو نقطة نهاية تُمرَّر عن قصد. لكل منها عقد وصول وتعريض خاص، وخلطها هو كيف تتحول مشكلة وصول صغيرة إلى ثقب دائم.
شخّص اتجاهاً واحداً في كل مرة
اكتب أربع وقائع قبل تغيير التكوين: العنوان الذي يتصل به النظير، وحالة المستمع على الهاتف، وسياق التطبيق والمستخدم الذي يملكه، والمسار الملاحظ في كل اتجاه. تقرير يقول إن الشبكة الافتراضية تقطع SSH لا يحوي أياً منها ولا يميز مشكلة نقل العميل من خادم متعذر الوصول.
adb shell ip -br addr
adb shell ip route get 10.90.0.9
nc -vz 10.90.0.4 2222نفّذ فحص المنفذ من النظير لا من الهاتف، واقرأ مخرجات عميل SSH المفصلة لترى هل يفشل قبل مصافحة TCP أم بعدها. مقبس لا يتصل أبداً ودخول يُرفض مرحلتان مختلفتان بمالكين مختلفين.
أبقِ التحقق من مفتاح المضيف وقيود الحساب سليمة أثناء التشخيص. تقييد المستمع والمستخدمين المسموح لهم هو ما يجعل خادماً قابلاً للبلوغ مقبولاً؛ وإرخاءها ليعمل اتصال يبادل مشكلة بمشكلة أسوأ. يغطي مرجع خادم OpenSSH ضوابط الاستماع والوصول إذا اتبعت تنفيذتك على أندرويد الأسماء نفسها.