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

สามโครงสร้าง หนึ่งคำถาม

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

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

การสลับภายในบริบทผู้ใช้เดียว

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

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

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

การแยกตามโปรไฟล์

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

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

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

ห่วงโซ่ ที่ลำดับคือดีไซน์

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

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

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

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

ตรวจดีไซน์ก่อนจะดีบัก

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

adb shell ip -br addr
adb shell ip route get 10.20.0.8
adb shell dumpsys connectivity | grep -i vpn

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

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