تتر معکوس ترافیک گوشی را به رایانه منتقل می‌کند و از طریق اتصال همان رایانه بیرون می‌برد. کابل USB به‌تنهایی این کار را نمی‌کند: گوشی به سرویس ثبتی نیاز دارد که مسیریابی آن را به دست بگیرد و رایانه به رله‌ای نیاز دارد که آن بسته‌ها را جلوتر ببرد. مسیر چهار پرش دارد: برنامه، ثبت روی گوشی، رله USB و خروج میزبان، و هر یک مالک متفاوتی دارد. این دفترچه آن مسیر را می‌سازد، VPN میزبان را جای درستش می‌گذارد و هر پرش را پیش از اعتماد به نتیجه بررسی می‌کند.

پیش از اجرای هر چیزی پرش‌ها را نقشه کنید

هر پرش سیاست خودش را اعمال می‌کند، بنابراین نتیجه‌ای که در یک سر کار می‌کند چیزی درباره سر دیگر نمی‌گوید. برنامه مقصد و حل‌کننده را انتخاب می‌کند، سرویس ثبت تصمیم می‌گیرد چه ترافیکی وارد رله شود، رله آن را به سوکت‌های میزبان می‌فرستد، و مسیریابی و VPN میزبان آدرسی را تعیین می‌کنند که مقصد در پایان می‌بیند.

HopOwnerWhat it decides
Application requestThe appDestination, resolver, address family
Capture servicePhone VpnService appWhich traffic enters the relay at all
ADB relayHost processForwarding phone flows to host sockets
Host egressHost routing and VPNExit address and host policy

در هر زمان فقط یک کارخواه سرویس VPN می‌تواند نقش ثبت گوشی را داشته باشد، پس یک برنامه VPN معمولی دوم روی رله انباشته نمی‌شود. اگر VPN متعلق به رایانه است، سرویس ثبت حلقه دسترسی به همان رایانه است، نه دلیلی بر اینکه تونلی راه‌دور از پیش نتیجه را محافظت می‌کند.

پیش از دست زدن به گوشی رله را آماده کنید

Gnirehtet نمونه مستند این معماری است: کارخواه سرویس VPN بدون root روی گوشی به‌همراه رله‌ای که با ADB روی میزبان حمل می‌شود و TCP و UDP را روی IPv4 پشتیبانی می‌کند. مخزن آن همچنین می‌گوید پروژه دیگر فعالانه نگهداری نمی‌شود، پس آن را طراحی مرجع و ابزار کارآمد برای آزمایشگاه بدانید، نه محصولی پشتیبانی‌شده برای استانداردسازی در ناوگانی مدیریت‌شده.

adb devices
adb shell getprop ro.build.version.release
gnirehtet run

نخست adb devices را اجرا کنید. گوشی‌ای که کلید اشکال‌زدایی میزبان را نپذیرفته باشد، به‌عنوان غیرمجاز گزارش می‌شود و رله تا زمانی که درخواست روی دستگاه پذیرفته نشود متصل نمی‌شود. gnirehtet run کارخواه را نصب می‌کند، رله را راه می‌اندازد و ثبت را فعال می‌کند؛ در نسخه‌ای که گام‌ها را جدا می‌کند، به‌جای آن از زیردستورهای مستند install و relay و start استفاده کنید.

دسترسی ADB رابطه کنترل دستگاه است، نه تنظیم شبکه. تنها رایانه‌ای را مجاز کنید که خودتان کنترل می‌کنید و برنامه بگیرید این مجوز را پس از پایان کار لغو کنید.

VPN میزبان را به مسیر برگردانید

رله یک فرایند معمولی روی میزبان است، بنابراین اتصال‌های بعدی آن از جدول مسیریابی میزبان پیروی می‌کنند. پروفایل تونل کامل آن‌ها را حمل می‌کند؛ تونل تقسیم‌شده ممکن است نه. اگر VPN میزبان از کنترل‌های هر برنامه استفاده می‌کند، فایل اجرایی رله را به مجموعه مجاز بیفزایید، وگرنه رله همچنان از رابط فیزیکی استفاده می‌کند در حالی که مرورگر محافظت‌شده به نظر می‌رسد.

ip route get 1.1.1.1
curl -4 https://ifconfig.me
sudo ss -tnp | grep -i relay

دو دستور نخست را پیش و پس از اتصال VPN میزبان اجرا کنید. اگر آدرس تغییر نکند، رله روی تونل نیست، هر چه پنجره کارخواه بگوید. تونل فقط خصوصی مقصدهای عمومی را نیز روی خروج معمولی میزبان می‌گذارد، که مانند نشت به نظر می‌رسد اما همان سیاستی است که تنظیم کرده‌اید.

DNS برای ترافیک عبوری از رله روی میزبان حل می‌شود، پس حل‌کننده میزبان تعیین می‌کند کدام سرور نام‌ها را می‌بیند. تنظیم DNS خصوصی روی گوشی از رله عبور نمی‌کند و آزمون حل‌کننده در سمت گوشی جست‌وجوهای میزبان را توصیف نمی‌کند.

هر پرش را جداگانه بررسی کنید

سه بررسی به این ترتیب: گوشی به رله می‌رسد، رله زیر سیاست میزبان به مقصد می‌رسد، و برنامه مقصد را درست حل و استفاده می‌کند. در نخستین شکست بایستید، به‌جای بارگذاری دوباره صفحه‌ها و حدس زدن.

adb shell dumpsys connectivity | grep -i -A3 vpn
adb logcat -s GnirehtetRelay:V Gnirehtet:V

یک ورودی شبکه VPN در خروجی اتصال‌ها نشان می‌دهد سرویس ثبت فعال است؛ گزارش خود رله نشان می‌دهد جریان‌ها می‌رسند یا نه. نبودن در یکی از این دو مشکل را تمیز تقسیم می‌کند: نبود ثبت یعنی سمت گوشی، نبود جریان یعنی سمت میزبان.

مرورگری که روی میزبان کار می‌کند مسیر مرورگر میزبان را ثابت می‌کند، نه مسیر فرایند رله را. آدرس‌هایی را که هر یک گزارش می‌کند مقایسه کنید و هم یک منبع خصوصی و هم یک صفحه عمومی را بیازمایید، چون تونل فقط خصوصی می‌تواند یکی را مسیریابی کند و دیگری را نه.

پیاده‌سازی را برچینید و رفتار خطا را انتخاب کنید

بازگردانی بخشی از دفترچه است. رله را متوقف و حذف کنید، کارخواه ثبت را حذف نصب کنید و مجوز اشکال‌زدایی میزبان را از گزینه‌های توسعه‌دهنده گوشی پس از پایان کار لغو کنید.

gnirehtet stop
gnirehtet uninstall
adb kill-server

تصمیم بگیرید گوشی هنگام ناپدید شدن رله چه کند. بدون انتخاب صریح ممکن است به داده همراه بازگردد و ترافیکی را که می‌خواستید مسیریابی کنید نشت دهد، پس رفتار مسدودسازی اتصال‌ها یا سیاست VPN را آگاهانه تنظیم کنید و برچیدن را پیش از تکیه بر آن بیازمایید.

میزبانی را که مجاز شد، نسخه رله، سیاست تونل میزبان و گام‌های برچیدن را ثبت کنید. همان ثبت است که راه‌اندازی بعدی تتر معکوس را تکرارپذیر می‌کند، به‌جای یک بعدازظهر دیگر از کشف دوباره.

مقالات مرتبط