sshuttle مقابل شبكة VPN كاملة: ما يغطيه أسلوبه فعلاً
لا يحمل sshuttle إلا ما يدعمه أسلوب تمريره: تحقق أولاً من تغطية TCP وDNS وUDP، ومن الصلاحية المحلية التي يحتاجها، ومن المساعد البعيد.
يُختار sshuttle لأن SSH يعمل بالفعل ولأن التشفير يبدو مألوفاً، وهذا التفكير يتجاوز السؤال الوحيد الذي يحدد ملاءمته. أي الحزم تغادر الجهاز، وأي حساب ينقلها على الطرف الآخر، وكم من الصلاحيات المحلية تطلبها الأداة. تختلف هذه الإجابات الثلاث باختلاف أسلوب التمرير، لذا فإن إعداداً ينجح مع تطبيق واحد قد يفشل بهدوء مع التالي. يبدأ الشرح أدناه من البروتوكول الذي يحتاجه التطبيق فعلاً.
ابدأ بالبروتوكول الذي يحتاجه التطبيق
يعتمد دعم البروتوكولات في sshuttle 2.0 على الأسلوب الذي تختاره. يتعامل أسلوبا NAT وnft في لينكس مع TCP وDNS، ويضيف TPROXY بروتوكول UDP العام. ولكل منصة وأسلوب حدوده الخاصة، أما macOS فيعترض عبر آلية مختلفة تماماً. سجّل الإصدار المثبت والأسلوب المختار والبروتوكولات التي يحتاجها التطبيق قبل أن تختار أي شيء.
لذلك لا يثبت طلب TCP ناجح إلا القليل عن تطبيق UDP أو عن كل استعلام DNS. يتعامل sshuttle أيضاً مع TCP كتدفقات بدلاً من أن ينقل حزم IP كاملة، لذا لا ينتقل استنتاج عن معدل النقل مأخوذ من شبكة VPN تقليدية. قارن الآلية التي تشغلها فعلاً بالحمل الذي لديك فعلاً.
| Approach | What it carries | What it needs locally |
|---|---|---|
| SSH local forward | One explicitly named TCP destination | Nothing beyond the SSH client |
| sshuttle, nft or nat method | TCP and DNS to the routed prefixes | Root or sudo for firewall rules |
| sshuttle, tproxy method | TCP, DNS and general UDP | Root or sudo, and kernel support |
| IP VPN | Routed IP traffic in a tunnel | A client with the required privileges |
ما يحتاجه العميل محلياً
يتطلب ترتيب العميل الموثق صلاحية root أو sudo، لأنه يثبت قواعد اعتراض محلية بدلاً من إنشاء واجهة نفق. هذه الحقيقة وحدها تغيّر قصة الأمان: عملية تملك تلك الصلاحية تستطيع توجيه حركة الجهاز كله، لا تطبيق واحد فقط. تعامل مع الصلاحية كجزء من التصميم لا كتفصيل تثبيت.
تأكد من القواعد التي ثبّتها الأداة ومن أنها تختفي عند خروجها. الجلسة المنهارة التي تترك قواعد اعتراض خلفها قد تبتلع الحركة بعد وقت طويل من اعتقاد المشغل أن الاتصال انتهى، وتبدو الأعراض كعطل في الشبكة لا كقاعدة متبقية.
sudo sshuttle --method nft --dns 172.19.4.0/24
nft list ruleset | grep -i sshuttle
ip route
الأمر الأول يمثل شكل نداء نموذجي، مع البادئة التي تحتاجها فعلاً. يعرض الثاني ما ثبّته الأداة، ويؤكد الثالث أنه لم تظهر واجهة نفق، وهو الناتج المتوقع لهذا التصميم.
ما يشغله الطرف البعيد
الطرف البعيد حساب SSH مصرّح به إضافة إلى بيئة مساعد Python متوافقة. تسجيل الدخول الذي ينجح في صدفة مقيّدة لا يمنح تلقائياً إذناً بتشغيل ذلك المساعد، والحساب القادر على تشغيل المساعد لا يصل تلقائياً إلى كل خدمة هدف. تنتمي هاتان الحقيقتان إلى طلب الوصول لا إلى ملاحظات استكشاف الأخطاء.
احمِ التحقق من هوية المضيف ومن مصادقة الحساب. قبول مفتاح مضيف مجهول لنجاح الاتصال الأول يزيل التحقق من أن الطرف البعيد هو الجهاز الذي تقصده، وهذا أهم هنا منه في تمرير لغرض واحد.
حدّد نطاق الحساب البعيد على الخدمات التي يحتاجها سير العمل، وتفاوض على ذلك النطاق مع من يدير المضيف. هم جزء من علاقة الثقة، ولا إعداد على جانب العميل يغيّر ذلك.
أين تقع حدود الثقة
تمرير اتصال API خاص عبر SSH لا يصرّح بكل عملية API. يبقى TLS التطبيق وتسجيل دخول التطبيق ساريين، ولا تستطيع الأداة جعل خدمة غير موثقة آمنة. والقفزة الإضافية من المضيف البعيد ليست تلقائياً نفس القطاع المحمي كقناة SSH، لأن ذلك الاتصال الثاني يتبع سياسة المضيف البعيد أياً كانت.
اكتب الحدود في جملة واحدة: الحركة إلى هذه البادئات تخرج عبر هذا الحساب على ذلك المضيف. وإذا احتاجت الجملة فقرة من الاستثناءات، فالتصميم يفعل أكثر مما تدّعيه وثائقه ويستحق نظرة ثانية قبل أن يصل إلى الإنتاج.
أثبت ذلك لكل بروتوكول ثم اختر الأداة
اختبر كل بروتوكول مطلوب بطلب غير مؤذٍ، بما في ذلك مسار المُحلل وعائلات العناوين التي يستخدمها التطبيق. أدرج قطع الاتصال في الاختبار، ليصبح سلوك الفشل المسموح للتطبيق نتيجة معروفة لا مفاجأة أثناء حادث. الجلسة التي مرّرت بشكل صحيح وهي قائمة لا تخبرك بشيء عما يحدث بعد سقوطها.
لمجموعة صغيرة من الخدمات المحددة بالاسم، يكون التمرير المحلي العادي أسهل في الملكية وأسهل في التدقيق. ولحركة التطبيقات التي تناسب أسلوبه، يقدم sshuttle حلاً وسطاً مشروعاً. وعندما تكون الحاجة اتصال IP واسعاً، فتصميم VPN هو الجواب الصادق، ويتبع الاختيار التغطية والمسؤولية التشغيلية لا ترتيب خوارزميات التشفير.