คุณเข้าสู่ระบบผ่าน SSH เพิ่ม -D 1080 และคำสั่งสำเร็จ ตอนนี้มีตัวรับฟัง SOCKS บนโทรศัพท์ และแอปครึ่งหนึ่งยังออกผ่านข้อมูลมือถือ นี่คือผลลัพธ์ปกติ ไม่ใช่ทันเนลที่เสีย: ssh -D สร้างจุดปลายพร็อกซี และแอป Android ใช้พร็อกซีก็ต่อเมื่อมีบางอย่างบังคับ การไล่ตามห่วงโซ่ทีละขั้นแสดงว่าส่วนไหนของงานอยู่ที่ใดจริง ๆ

เริ่มจากจุดที่ทราฟฟิกเริ่ม

เลือกแอปหนึ่งที่ควรใช้ทันเนล และตรวจว่ามีการตั้งค่าพร็อกซีของตัวเองหรือไม่ เบราว์เซอร์ที่มีช่อง 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 เอง

เพิ่มส่วนที่ Android ต้องการ

แอปที่ไม่มีการตั้งค่าพร็อกซีต้องมีสิ่งที่ดักจับแพ็กเก็ตและเปลี่ยนเป็นพร็อกซีคอนเนกชัน บนอุปกรณ์ที่ไม่มี root นั่นคือ อะแดปเตอร์บริการ VPN: แอปที่รับอินเทอร์เฟซเสมือนและส่งทราฟฟิกที่เลือกไปยังตัวรับฟัง SOCKS ภายในเครื่อง ห่วงโซ่กลายเป็นแอป อะแดปเตอร์ ตัวรับฟัง SOCKS การเชื่อมต่อ SSH ปลายทาง

ติดตั้งอะแดปเตอร์ ให้สิทธิ์ VPN และเลือกแอปหรือเส้นทางที่ควรดักจับ ไอคอนกุญแจในแถบสถานะจะแทนอะแดปเตอร์ ไม่ใช่ VPN เชิงพาณิชย์แยกต่างหาก Android อนุญาตการเชื่อมต่อบริการ VPN ที่ใช้งานอยู่เพียงหนึ่งรายการต่อโปรไฟล์ผู้ใช้ ดังนั้นการเปิดแอป VPN ตัวที่สองจึงไม่เพิ่มชั้นให้ห่วงโซ่ แต่แข่งขันในบทบาทเดียวกัน

นี่คือขั้นที่การทดสอบที่สำเร็จอาจหลอกคุณ หากอะแดปเตอร์ถูกตั้งให้ดักจับเฉพาะเบราว์เซอร์ที่คุณชี้ไปที่พร็อกซีแล้ว ทุกอย่างทำงานและไม่มีอะไรอื่นถูกครอบคลุม อ่านรายการดักจับก่อนสรุปว่าอุปกรณ์อยู่ในทันเนล

เก็บการขนส่ง SSH ไว้นอกการดักจับ

การเชื่อมต่อ SSH เองต้องไม่ถูกป้อนกลับเข้าทันเนล SOCKS ที่มันดูแลอยู่ หากอะแดปเตอร์ดักจับทราฟฟิกของแอป SSH ทันเนลจะขึ้นอยู่กับการเชื่อมต่อที่รอทันเนลอยู่ และผลลัพธ์คือลูปที่หยุดหรือล้มเหลวทันทีที่อะแดปเตอร์เริ่มทำงาน

การใช้งานแบบรวมศูนย์ปกป้องซ็อกเก็ตการขนส่งของตัวเอง ด้วยแอปแยกกันคุณต้องมีข้อยกเว้นที่รองรับ: เก็บแอป SSH ไว้นอกการดักจับ หรือยกเว้นจุดปลาย SSH ตามที่อยู่ ทั้งสองมีต้นทุน การยกเว้นแอปเทอร์มินัลทั้งหมดยังนำกิจกรรมเครือข่ายที่ไม่เกี่ยวข้องออกจากทันเนล และข้อยกเว้นตามที่อยู่จะพังเมื่อที่อยู่เซิร์ฟเวอร์เปลี่ยนหรือเมื่อชื่อถูกแปลงต่างไปในการเชื่อมต่อครั้งถัดไป

ตรวจข้อยกเว้นจากภายนอก: เชื่อมต่ออะแดปเตอร์ใหม่ แล้วยืนยันว่าเซสชัน SSH ยังอยู่และคำขอผ่านพร็อกซียังรายงานที่อยู่เซิร์ฟเวอร์ เซสชันที่ทำงานจนอะแดปเตอร์เริ่มแล้วหยุดค้างคือลูปนั้น

ติดตาม DNS และ UDP ไปจนสุดห่วงโซ่

การส่งต่อแบบไดนามิกของ OpenSSH พาการเชื่อมต่อ TCP ไม่ใช่การขนส่ง UDP-associate หรือ ICMP และอะแดปเตอร์ไม่สามารถสร้างการส่งต่อ UDP ขึ้นมาได้ด้วยการรับแพ็กเก็ต UDP สิ่งใดที่ยืนกรานใช้ UDP รวมถึง QUIC และสื่อ WebRTC จะล้มเหลวหรือถอยกลับไปใช้ TCP ขึ้นอยู่กับแอป

DNS ต้องการการตัดสินใจของตัวเอง แอปที่แปลงชื่อในเครื่องจะส่งคำถามผ่านตัวแปลงปกติก่อนเชื่อมต่อ ดังนั้นทันเนลพาการเชื่อมต่อแต่ไม่ใช่การค้นหา ไคลเอนต์ที่ตระหนักถึงพร็อกซีซึ่งมีตัวเลือก DNS ระยะไกลหลีกเลี่ยงสิ่งนั้น แอปที่ถูกดักจับโดยไม่มีตัวเลือกนั้นไม่หลีกเลี่ยง ตรวจว่าตัวแปลงใดตอบกลับแทนที่จะสมมติว่าอะแดปเตอร์เปลี่ยนมัน

เก็บตัวรับฟัง SOCKS ให้ผูกกับ loopback ตรวจสอบคีย์โฮสต์ของเซิร์ฟเวอร์ SSH ในการใช้งานครั้งแรก และปล่อยให้การตรวจสอบ HTTPS ปกติอยู่ที่เดิมสำหรับเว็บไซต์ปลายทาง SSH ปกป้องช่วงโทรศัพท์ถึงเซิร์ฟเวอร์ มันไม่ได้เข้ารหัสสิ่งที่เซิร์ฟเวอร์ทำหลังจากนั้น

ตรวจวงจรชีวิตทั้งสองและตัดสินใจ

อะแดปเตอร์และเซสชัน SSH มีวงจรชีวิตแยกกัน หาก SSH ล่มในขณะที่อะแดปเตอร์ยังดักจับอยู่ แอปอาจค้างโดยไม่มีข้อผิดพลาดชัดเจน เพราะแพ็กเก็ตยังเข้าสู่อินเทอร์เฟซเสมือนที่ไม่มีทางออกที่ทำงานได้ หากอะแดปเตอร์หยุด แอปจะออกโดยตรงหรือถูกบล็อก ขึ้นอยู่กับนโยบาย VPN ของอุปกรณ์

ทดสอบทั้งสองทิศทางโดยเจตนา: ฆ่าเซสชัน SSH ขณะอะแดปเตอร์ทำงาน แล้วหยุดอะแดปเตอร์ขณะ SSH ยังอยู่ สิ่งที่โทรศัพท์ทำในแต่ละกรณีคือนโยบายที่คุณใช้งานจริง ไม่ว่าคำแนะนำการติดตั้งจะกล่าวอ้างอย่างไร

หากเวิร์กโฟลว์ต้องการความครอบคลุมทั้งอุปกรณ์ด้วยโหมดล้มเหลวที่คาดเดาได้ VPN IP จริง หรืออะแดปเตอร์ที่ได้รับการดูแลซึ่งออกแบบสำหรับห่วงโซ่นี้ คือคำตอบที่ซื่อสัตย์ เซสชันเชลล์ที่ปล่อยให้ทำงานข้างแอปดักจับที่ไม่เกี่ยวข้องไม่ใช่ทันเนลอุปกรณ์ที่ได้รับการดูแล มันเป็นสององค์ประกอบที่ไม่มีความตกลงกันว่าจะเกิดอะไรขึ้นเมื่อหนึ่งในนั้นสิ้นสุด

บทความที่เกี่ยวข้อง