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

เริ่มจากสามสิ่งที่ผู้ใช้หมายถึง

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

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

สิ่งที่แอปสร้างได้จริง

NetworkExtension ให้แอปมีการกำหนดค่าของตัวเองผ่าน NEVPNManager ด้วยสิทธิ์ Personal VPN และความยินยอมของผู้ใช้ แอปจะบันทึกการกำหนดค่าที่ปรากฏใน Settings ภายใต้ชื่อของตัวเอง และสามารถเริ่มหรือหยุดการเชื่อมต่อนั้นเพียงหนึ่งเดียวได้ นี่คือความสามารถจริงที่ตรวจสอบได้ และยังเป็นขอบเขตทั้งหมดด้วย: ตัวจัดการอ่านและเขียนเฉพาะสิ่งที่ตัวเองสร้าง

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

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

การอ่านสถานะก็ชนกำแพงเดียวกัน

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

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

On Demand และ Always On คือคันโยกจริง

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

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

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

ส่งมอบเส้นทางที่รองรับ

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

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

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

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