پروکسی SOCKS روی SSH در اندروید: چرا فقط نیمی از برنامههای شما وصل میشوند
ssh -D یک شنونده SOCKS میسازد، نه تونل کل دستگاه. زنجیره را از برنامه به آداپتور و SSH دنبال کنید، سپس شکافهای DNS و چرخه عمر را بررسی کنید.
با SSH وارد میشوید، -D 1080 را اضافه میکنید و دستور موفق میشود. اکنون یک شنونده SOCKS روی گوشی وجود دارد و نیمی از برنامهها همچنان از داده موبایل خارج میشوند. این نتیجه طبیعی است، نه تونل خراب: ssh -D یک نقطه پایانی پروکسی میسازد و برنامههای اندروید فقط وقتی از پروکسی استفاده میکنند که چیزی مجبورشان کند. پیمودن گامبهگام زنجیره نشان میدهد هر بخش کار واقعاً کجا زندگی میکند.
از همانجا شروع کنید که ترافیک شروع میشود
برنامهای را انتخاب کنید که باید از تونل استفاده کند و بررسی کنید آیا تنظیم پروکسی خودش را دارد. مرورگری با فیلد SOCKS سادهترین حالت است: آن را به 127.0.0.1:1080 اشاره دهید، اگر تنظیمش هست DNS راه دور را فعال کنید و درخواست عبور میکند. یک کلاینت چت، یک برنامه نقشه یا یک بازی بدون چنین فیلدی هیچ راهی برای استفاده از شنونده ندارد و هر چیزی که در دستور SSH تایپ کنید آن را تغییر نمیدهد.
پیش از درگیر کردن هر چیز دیگری، ثابت کنید شنونده از پوسته خود گوشی با کلاینتی که مستقیماً SOCKS صحبت میکند کار میکند:
ssh -N -D 1080 [email protected]
curl --socks5-hostname 127.0.0.1:1080 https://ifconfig.me
نشانیای که برمیگردد باید نشانی سرور SSH باشد، نه گوشی. اگر چنین است، نیمه پروکسی تمام شده و بقیه کار درباره پوشش است. اگر نیست، اول سمت SSH را درست کنید: احراز هویت با کلید، توانایی سرور برای رسیدن به مقصد و خروجی خود سرور SSH.
قطعهای را که اندروید نیاز دارد اضافه کنید
برنامههای بدون تنظیم پروکسی به چیزی نیاز دارند که بستههایشان را بگیرد و به اتصالهای پروکسی تبدیل کند. روی دستگاهی بدون root، این یک آداپتور سرویس VPN است: برنامهای که رابط مجازی را میگیرد و ترافیک انتخابشده را به شنونده SOCKS محلی هدایت میکند. زنجیره میشود برنامه، آداپتور، شنونده SOCKS، اتصال SSH، مقصد.
آداپتور را نصب کنید، به آن اجازه VPN بدهید و برنامهها یا مسیرهایی را که باید بگیرد انتخاب کنید. آیکون کلید در نوار وضعیت آنگاه نماینده آداپتور است، نه یک VPN تجاری جدا. اندروید فقط یک اتصال سرویس VPN فعال در هر نمایه کاربر اجازه میدهد، پس اجرای برنامه VPN دوم لایهای روی زنجیره اضافه نمیکند؛ برای همان نقش رقابت میکند.
این همان گامی است که یک آزمون موفق میتواند گمراهتان کند. اگر آداپتور طوری تنظیم شده که فقط مرورگری را بگیرد که از قبل به پروکسی اشاره دادهاید، همهچیز کار میکند و هیچ چیز دیگری پوشش ندارد. پیش از نتیجهگیری اینکه دستگاه تونلشده است، فهرست ضبط را بخوانید.
انتقال SSH را بیرون از ضبط نگه دارید
خود اتصال SSH نباید به تونل SOCKS که آن را نگه میدارد بازخورانده شود. اگر آداپتور ترافیک برنامه SSH را بگیرد، تونل به اتصالی وابسته است که منتظر تونل است و نتیجه حلقهای است که بهمحض شروع آداپتور گیر میکند یا شکست میخورد.
پیادهسازیهای یکپارچه از سوکت انتقال خودشان محافظت میکنند. با برنامههای جداگانه به یک استثنای پشتیبانیشده نیاز دارید: برنامه SSH را بیرون از ضبط بگذارید یا نقطه پایانی SSH را با نشانی مستثنا کنید. هر دو هزینه دارند. مستثنا کردن کل یک برنامه ترمینال فعالیت شبکه بیربطش را هم از تونل حذف میکند و استثنای نشانی زمانی میشکند که نشانی سرور تغییر کند یا نام در اتصال بعدی متفاوت حل شود.
استثنا را از بیرون بررسی کنید: آداپتور را دوباره وصل کنید، سپس تأیید کنید که نشست SSH زنده میماند و درخواست پروکسیشده هنوز نشانی سرور را گزارش میدهد. نشستی که تا شروع آداپتور کار میکند و سپس یخ میزند، همان حلقه است.
DNS و UDP را تا انتهای زنجیره دنبال کنید
هدایت دینامیک OpenSSH اتصالهای TCP را حمل میکند. این یک انتقال UDP-associate یا ICMP نیست و آداپتور نمیتواند با پذیرفتن بستههای UDP هدایت UDP از خود درآورد. هر چیزی که بر UDP اصرار دارد، از جمله QUIC و رسانه WebRTC، بسته به برنامه یا شکست میخورد یا به TCP برمیگردد.
DNS تصمیم خودش را لازم دارد. برنامهای که نامی را بهصورت محلی حل میکند پرسوجو را پیش از اتصال از resolver معمولی میفرستد، پس تونل اتصال را حمل میکند اما جستوجو را نه. کلاینت پروکسیآگاه با گزینه DNS راه دور از آن پرهیز میکند؛ برنامهای که گرفته شده و آن را ندارد، نه. بررسی کنید کدام resolver پاسخ داد، بهجای اینکه فرض کنید آداپتور آن را تغییر داده است.
شنونده SOCKS را به loopback مقید نگه دارید، کلید میزبان سرور SSH را در اولین استفاده بررسی کنید و اعتبارسنجی عادی HTTPS را برای سایت نهایی سر جایش بگذارید. SSH بخش گوشی به سرور را محافظت میکند؛ آنچه سرور بعداً انجام میدهد را رمزگذاری نمیکند.
دو عمر را بررسی کنید و تصمیم بگیرید
آداپتور و نشست SSH عمرهای جداگانه دارند. اگر SSH قطع شود در حالی که آداپتور همچنان ضبط میکند، برنامهها میتوانند بدون خطای آشکار معلق بمانند، چون بستههایشان هنوز وارد رابط مجازیای میشوند که دیگر خروجی کارا ندارد. اگر آداپتور بایستد، برنامهها بسته به سیاست VPN دستگاه یا مستقیم میروند یا مسدود میشوند.
هر دو جهت را عمداً بیازمایید: نشست SSH را با آداپتور در حال اجرا بکشید، سپس آداپتور را متوقف کنید در حالی که SSH بالا میماند. کاری که گوشی در هر حالت میکند همان سیاستی است که واقعاً مستقر میکنید، هر چه دستورالعمل نصب ادعا کرده باشد.
اگر گردشکار به پوشش کل دستگاه با حالت شکست قابل پیشبینی نیاز دارد، یک VPN واقعی IP، یا یک آداپتور نگهداریشده که برای این زنجیره طراحی شده، پاسخ صادقانه است. نشست پوسته رهاشده در کنار یک برنامه ضبط بیربط، تونل دستگاه نگهداریشده نیست؛ دو مؤلفه است که توافقی درباره اینکه وقتی یکی تمام شود چه میشود ندارند.