การส่งออก VPN บน Android: อะไรที่ย้ายไปยังโทรศัพท์ใหม่จริง ๆ
การส่งออก VPN บน Android ส่งการตั้งค่าและบางครั้งก็ส่งคีย์ แต่ไม่เคยส่งการอนุญาตของอุปกรณ์ ตรวจสอบว่าอะไรย้ายจริงก่อนลบโทรศัพท์เครื่องเก่า
การส่งออกโปรไฟล์ VPN จาก Android รู้สึกเหมือนขั้นตอนสำรองข้อมูล และเมนูที่เสนอสิ่งนั้นไม่ได้ทำอะไรเพื่อแก้ไขความรู้สึกนั้น สิ่งที่คุณได้คือข้อมูลป้อนเข้าของ parser คีย์ที่ระบบปฏิบัติการอาจไม่คืนให้เลย และการอนุญาตที่ออกให้กับโทรศัพท์เครื่องนั้นโดยเฉพาะ แยกสามสิ่งนี้ออกแล้วคำถามที่มีประโยชน์ก็ปรากฏขึ้น: ส่วนใดยังขาดหายไปในอุปกรณ์ใหม่?
ไฟล์เป็นส่วนที่ง่าย ส่วนอีกสองอย่างเป็นตัวตัดสินว่าการย้ายจะได้ผลหรือไม่
โปรไฟล์ที่ส่งออกมีอะไรอยู่จริง ๆ
เปิดไฟล์ในโปรแกรมแก้ไขข้อความก่อนจะเชื่อถือ โปรไฟล์ OpenVPN เป็นภาษาการกำหนดค่าขนาดเล็ก: remote, proto, data-ciphers และบ่อยครั้งเป็นบล็อก <ca>, <cert>, <key> หรือ <tls-crypt> แบบอินไลน์ที่ไคลเอนต์ส่งให้สแตก TLS ของตน การกำหนดค่า WireGuard แบนกว่า: [Interface] มี PrivateKey และ Address จากนั้นหนึ่ง [Peer] ต่อจุดปลายที่มี PublicKey, AllowedIPs และ Endpoint IKEv2 มาในรูป .mobileconfig พร้อมพจนานุกรมเพย์โหลดแทนบล็อกคีย์
ไม่มีข้อความใดเป็นข้อมูลรับรองในตัวเอง ข้อมูลรับรองคือคีย์ส่วนตัว และแต่ละรูปแบบก็วางคีย์ไว้ข้างในหรือชี้ไปยังนามแฝงที่แก้ได้เฉพาะภายในไคลเอนต์ที่สร้างมันขึ้นมา
คีย์อยู่ที่ไหนจริง ๆ บน Android
Android เก็บข้อมูลแอปไว้ใต้ /data/data/<package> ซึ่งอ่านได้เฉพาะ UID ของแอปนั้น ไม่มีวิธีที่รองรับในการคัดลอกไดเรกทอรีส่วนตัวของแอปอื่นจากโทรศัพท์ที่ไม่รูท และ adb backup ก็เลิกเป็นคำตอบทั่วไปหลังจาก Android 12 ยกเลิกมันและไคลเอนต์เริ่มประกาศ allowBackup="false" ดังนั้นการส่งออกจากไคลเอนต์ Android จึงหมายถึงสิ่งที่ไคลเอนต์นั้นนำไปใช้ ไม่ใช่สำเนาของระบบไฟล์
ชั้นข้อมูลระบุตัวตนอยู่ใต้แอป หากไคลเอนต์นำคีย์ของคุณเข้าสู่ Android Keystore วัสดุจะถูกสร้างหรือห่อที่นั่น และการส่งออกในภายหลังอาจอ้างอิงนามแฝงของ Keystore แทนไบต์ คีย์ที่รองรับด้วยฮาร์ดแวร์ถูกสร้างขึ้นเพื่อให้แม้แต่แอปเจ้าของก็อ่านออกไม่ได้ ดังที่ Keystore documentation อธิบาย โปรไฟล์ที่ชี้ไปยังนามแฝงนั้นจึงนำเข้าได้สะอาดบนโทรศัพท์เครื่องเดิมและล้มเหลวทุกที่อื่น
นั่นไม่ใช่การส่งออกที่เสีย แต่เป็นคุณสมบัติที่แพลตฟอร์มถูกขอให้มอบให้
สิ่งที่โปรไฟล์พาไปไม่ได้
เทียบวัตถุกับสิ่งที่ปลายทางจะยอมรับ:
| วัตถุ | ย้ายไหม | ทำไม |
|---|---|---|
| โปรโตคอลและจุดปลาย | ใช่ ถ้าไคลเอนต์ปลายทางรองรับ | ข้อความธรรมดาในโปรไฟล์ |
| ใบรับรอง CA และการตรวจสอบชื่อโฮสต์ | โดยปกติ | วัสดุสาธารณะ แต่ชื่อโฮสต์ยังต้องตรงกับใบรับรอง |
| ใบรับรองไคลเอนต์ | ใช่ เว้นแต่ผูกไว้กับอุปกรณ์แต่ละเครื่อง | ใบรับรองพกพาได้ ผู้ออกเป็นผู้กำหนดว่าอุปกรณ์กี่เครื่องใช้ใบเดียวได้ |
| คีย์ส่วนตัว | เฉพาะเมื่อสร้างนอก Keystore | คีย์ที่รองรับด้วยฮาร์ดแวร์ส่งออกไม่ได้ ทำได้เพียงแทนที่ |
| บัญชี MFA เซสชัน SSO | ไม่ | โทเคนหมดอายุและยังผูกกับอุปกรณ์ที่ได้มา |
| เส้นทาง DNS และขอบเขตแอป | เป็นข้อความกำหนดค่าเท่านั้น | Android ใช้ค่าเหล่านี้เมื่อเชื่อมต่อผ่าน VpnService.Builder |
| รายการแอปของอุโมงค์แยก | แทบไม่เคย | ชื่อแพ็กเกจต่างกันระหว่างอุปกรณ์ และรายการเป็นสถานะของไคลเอนต์ |
สองแถวทำให้เกิดความสับสนมากที่สุด คีย์ที่สร้างบนอุปกรณ์และทำเครื่องหมายว่าไม่สามารถส่งออกได้จะหายไปพร้อมข้อมูลแอปจริง ๆ ดังนั้นการแทนที่คือคีย์ใหม่บวกใบรับรองที่ออกให้ โทเคนเซสชันที่คัดลอกไปยังโทรศัพท์ใหม่มักตายเมื่อรีเฟรชครั้งแรก ซึ่งดูเหมือนการนำเข้าที่ล้มเหลว
การนำเข้าคือการแยกวิเคราะห์ แล้วจึงเป็นการขอความยินยอม
ฝั่งผู้รับ การนำเข้าคือการแยกวิเคราะห์ตามด้วยการคอมมิต ไคลเอนต์อ่านการกำหนดค่า ตรวจว่าทุกบล็อกที่อ้างถึงมีอยู่ แล้วเขียนนิยามอุโมงค์ลงในแซนด์บ็อกซ์ของตน นั่นคือเหตุผลที่ไฟล์ที่คุณเลือกจากดาวน์โหลดไม่ใช่สิ่งที่เชื่อมต่อในภายหลัง
จากนั้นมาถึงขั้นตอนการอนุญาตที่ไม่มีไฟล์ใดข้ามได้ Android กำหนดให้แอปเรียก VpnService.prepare() และได้รับความยินยอมของคุณก่อนจะสร้างอุโมงค์ได้ ดังนั้นโปรไฟล์ที่เพิ่งนำเข้าจึงยังแสดงกล่องโต้ตอบของระบบหนึ่งครั้ง จากนั้นอุโมงค์ถูกสร้างอย่างชัดเจนผ่าน addAddress, addRoute, addDnsServer และ addAllowedApplication หรือ addDisallowedApplication สำหรับการกำหนดเส้นทางรายแอป ไม่มีสิ่งใดถูกบอกเป็นนัยจากจุดปลาย โปรไฟล์เดียวกันจึงอาจให้ชุดเส้นทางที่มีผลต่างกันในสองไคลเอนต์
การตั้งค่าที่ใช้ใบรับรองเพิ่มทางแยกอีกทาง เมื่อเซิร์ฟเวอร์ออกใบรับรองให้อุปกรณ์ใดอุปกรณ์หนึ่ง เช่นที่ MDM และการลงทะเบียน SCEP ทำ การนำใบรับรองนั้นกลับมาใช้บนโทรศัพท์เครื่องที่สองจะได้ผลจนกว่าเซิร์ฟเวอร์จะบังคับหนึ่งเซสชันต่อหนึ่งตัวตน หรือล้มเหลวที่การจับมือ TLS ตรวจสอบนโยบายของผู้ออกก่อนวางแผนนำกลับมาใช้
ตรวจสอบอุปกรณ์ใหม่ก่อนปลดระวางเครื่องเก่า
เชื่อมต่อโทรศัพท์เครื่องเก่าไว้จนกว่าเครื่องใหม่จะผ่านอะไรที่ดีกว่าไอคอนสีเขียว ยืนยันที่อยู่ขาออกจากอุปกรณ์ใหม่และตัวแก้ไข DNS ที่ใช้จริง หาก split tunneling สำคัญ ให้เปิดแอปที่ควรข้ามอุโมงค์และแอปที่ไม่ควร แล้วดูว่าตัวไหนไปถึงผู้ให้บริการของคุณ
การตรวจครั้งเดียวตัดสินที่อยู่ขาออก เปิด https://ifconfig.me ในเบราว์เซอร์ของโทรศัพท์ จากนั้นรัน curl -s https://ifconfig.me จากแล็ปท็อปบน Wi-Fi เดียวกัน และเทียบทั้งสองคำตอบกับที่อยู่ที่ผู้ให้บริการของคุณจัดสรรให้
จากนั้นจึงปลดระวางตัวตนเก่า และทำผ่านผู้ออก: เพิกถอนใบรับรองหรือนำอุปกรณ์ออกจากบัญชี การลบไฟล์จากดาวน์โหลดไม่ได้จบอะไร เพราะอุปกรณ์สองเครื่องที่ถือใบรับรองเดียวกันจะดูเหมือนกันในบันทึกของเซิร์ฟเวอร์
หากการส่งออกกลายเป็นพกพาไม่ได้ ทางแก้คือการลงทะเบียนใหม่ ไม่ใช่ชุดการกำหนดค่าสาธารณะ ขอโปรไฟล์สำหรับอุปกรณ์เครื่องที่สอง หรือสร้างคู่คีย์บนโทรศัพท์ใหม่แล้วส่ง CSR ช้ากว่า และเป็นเส้นทางที่ผู้ออกสนับสนุน
ทำตามรายการตรวจสอบก่อนลบอะไร: อุปกรณ์ใหม่เชื่อมต่อได้ ที่อยู่ขาออกและ DNS ตรงกัน ขอบเขตต่อแอปเป็นอย่างที่ตั้งใจ ตัวตนเก่าถูกเพิกถอน และไฟล์กำหนดค่าใดที่เก็บไว้อยู่ในที่จัดเก็บที่เข้ารหัส