VPN แอปหรือ IKEv2 ในตัวบน iPhone: จะเลือกอย่างไร
แอป VPN สำหรับ iPhone และไคลเอนต์ IKEv2 ในตัวแก้ปัญหาต่างกัน เริ่มจากเปรียบเทียบการรองรับโปรโตคอล การยืนยันตัวตน การควบคุมอุปกรณ์ และการกู้คืน
สัปดาห์ที่แล้วเพื่อนร่วมงานยื่น iPhone ของเขาให้ผม ซึ่งในการตั้งค่ามีรายการ VPN สองรายการ: รายการหนึ่งมาจากแอปของผู้ให้บริการ อีกรายการมาจากโปรไฟล์ IKEv2 ที่คัดลอกมาจากหน้าสนับสนุน ทั้งสองไม่ใช่เวอร์ชันที่แข่งขันกันของสิ่งเดียวกัน แอปของผู้ให้บริการเป็นคอนเทนเนอร์ที่พาโค้ดอุโมงค์ของตัวเองมาได้ ส่วนไคลเอนต์ในตัวของ Apple เป็นไคลเอนต์ IKEv2 ที่กำหนดค่าด้วยมือหรือผ่านโปรไฟล์ โปรโตคอล การจัดการข้อมูลรับรอง การควบคุมอุปกรณ์ และการกู้คืนเป็นตัวกำหนดการเลือก
แอปกับไคลเอนต์เนทีฟอยู่คนละชั้น
ไคลเอนต์ VPN ในตัวของ Apple ในทางปฏิบัติคือไคลเอนต์ IKEv2 แบบฟอร์มด้วยมือยังคงแสดง L2TP บน IPsec และตัวเลือก Cisco IPsec ที่เลิกใช้แล้ว แต่ไม่มีช่องสำหรับการรับส่งของผู้ให้บริการและไม่มีที่ให้วางการกำหนดค่า OpenVPN หรือ WireGuard คุณจะกรอกแบบฟอร์มในการตั้งค่า > ทั่วไป > VPN & การจัดการอุปกรณ์ หรือนำเข้าโปรไฟล์ที่มีเพย์โหลด VPN พื้นผิวคือที่อยู่เซิร์ฟเวอร์ สองอัตลักษณ์ วิธีการยืนยันตัวตน และกฎตามต้องการแบบเลือกได้
แอปของผู้ให้บริการทำงานสูงขึ้นหนึ่งชั้น มันมาพร้อมผู้ให้บริการอุโมงค์แพ็กเก็ต Network Extension ดังนั้นโค้ดโปรโตคอลและตรรกะการกำหนดเส้นทางจึงอยู่ในแอป และ iOS เพียงส่งแพ็กเก็ตผ่าน บางแอปใช้ WireGuard หรือ OpenVPN บางแอปใช้การรับส่งที่อำพรางของตัวเอง และบางแอปเพียงติดตั้งโปรไฟล์ IKEv2 แล้วขับไคลเอนต์ในตัวผ่านหน้าจอที่สวยกว่า กลุ่มหลังนี้เองทำให้การเลือกแอปหรือโปรไฟล์บางครั้งเป็นทางเลือกลวง
ผลที่ตามมาเป็นเรื่องปฏิบัติ: ไฟล์ .ovpn หรือ WireGuard ไม่ใช่สิ่งทดแทนช่องเหล่านั้น เพราะแฮนด์เชกเป็นโปรโตคอลอื่น
อ่านเพย์โหลดก่อนเปรียบเทียบฟีเจอร์
เมื่อโปรไฟล์เป็น IKEv2 คีย์ในเพย์โหลดอธิบายความล้มเหลวได้มากกว่าการเปรียบเทียบฟีเจอร์ใด ๆ เอกสารอ้างอิงการตั้งค่า IKEv2 ของ Apple อธิบายทุกคีย์ เพย์โหลดที่ตัดทอนมีลักษณะดังนี้:
<key>VPNType</key><string>IKEv2</string>
<key>RemoteAddress</key><string>vpn.example.net</string>
<key>RemoteIdentifier</key><string>vpn.example.net</string>
<key>LocalIdentifier</key><string>[email protected]</string>
<key>AuthenticationMethod</key><string>Certificate</string>
<key>ServerCertificateIssuerCommonName</key><string>Example Issuing CA</string>
สามช่องรับน้ำหนักการวินิจฉัยส่วนใหญ่ RemoteIdentifier คือชื่อที่ไคลเอนต์คาดว่าเซิร์ฟเวอร์จะแสดง ดังนั้นเกตเวย์หลัง NAT หรือโหลดบาลานเซอร์ที่ใบรับรองระบุพูลแทนที่อยู่จะล้มเหลวแม้ที่อยู่จะถูกต้อง LocalIdentifier คืออัตลักษณ์ที่เซิร์ฟเวอร์คิดว่าคุณเป็น และเมื่อยืนยันด้วยใบรับรองต้องตรงกับอัตลักษณ์ที่ผูกกับบัญชีของคุณ ServerCertificateIssuerCommonName ตรึง CA ผู้ออก ดังนั้นโปรไฟล์อาจล้มเหลวในวันที่ออกใบรับรองใหม่ โดยไม่มีข้อความแสดงข้อผิดพลาดใดกล่าวถึงใบรับรอง
ถ้า AuthenticationMethod เท่ากับ SharedSecret เซิร์ฟเวอร์กำลังยืนยันผู้ใช้แบบ EAP และความลับที่คุณได้มาจริง ๆ แล้วคือข้อมูลรับรองบัญชี เรื่องนี้สำคัญเมื่อผู้ให้บริการส่งเอกสารสองฉบับ ฉบับหนึ่งสำหรับชื่อผู้ใช้และรหัสผ่าน อีกฉบับสำหรับใบรับรอง และมีเพียงฉบับเดียวที่ตรงกับสิ่งที่คุณนำเข้า
สิ่งที่แอปทำได้และไคลเอนต์ในตัวทำไม่ได้
การเลือกโปรโตคอลคือข้อได้เปรียบที่ชัดเจน ถ้าเซิร์ฟเวอร์ของคุณพูด WireGuard หรือ OpenVPN แอปคือไคลเอนต์ iOS เดียวที่ใช้ได้ และการแก้ไขแบบฟอร์มในตัวจะไม่เจรจาให้ แอปยังสามารถใช้อุโมงค์แยกตามปลายทางหรือแอป การจัดการ DNS ของตัวเอง การบล็อกสไตล์คิลสวิตช์ การเลือกเซิร์ฟเวอร์ และการเชื่อมต่อใหม่ที่ปรับให้เข้ากับเครือข่ายของตัวเอง
ราคาคือซอฟต์แวร์ที่คุณไม่ได้ตรวจสอบ ซึ่งทำงานด้วยสิทธิ์ของเน็ตเวิร์กเอ็กซ์เทนชัน คุณภาพแปรผันมากกว่าที่การ์ดในสโตร์บอก แอปหนึ่งเชื่อมต่อใหม่ได้สะอาด ขณะที่อีกแอปหนึ่งรั่วไหลสองสามวินาทีหลังเครือข่ายเปลี่ยน และคิลสวิตช์ในแอปเป็นฟีเจอร์ของแอปนั้น ไม่ใช่ของ iOS บนอุปกรณ์ที่จัดการอยู่ ให้ตรวจรายการที่อนุมัติก่อน
สิ่งที่โปรไฟล์ IKEv2 ในตัวทำได้ถูกต้อง
ชิ้นส่วนที่เคลื่อนไหวน้อยกว่าคือข้อโต้แย้งทั้งหมด ไคลเอนต์ IKEv2 และสแตก IPsec มาพร้อมระบบปฏิบัติการ จึงไม่มีเอ็กซ์เทนชันให้พัง ไม่มีโปรเซสต่อแอปให้คงชีวิต และไม่มีรอบอัปเดตของบุคคลที่สามระหว่างคุณกับอุโมงค์ที่ใช้งานได้ โปรไฟล์ยังล็อกได้ บนอุปกรณ์ที่อยู่ภายใต้การกำกับ ผู้ใช้ไม่สามารถลบสิ่งที่การจัดการติดตั้งไว้ และ Always On VPN ซึ่งเชื่อมต่อใหม่บนทุกเครือข่ายโดยไม่มีสวิตช์ของผู้ใช้ มีอยู่เฉพาะในรูปแบบที่อยู่ภายใต้การกำกับและจัดการด้วยโปรไฟล์นั้น
สิ่งที่เส้นทางในตัวไม่ให้คือความยืดหยุ่น ไม่มี VPN ต่อแอปโดยไม่มีการจัดการแอป ไม่มีคิลสวิตช์สำหรับผู้ใช้ และไม่มีการรับส่งที่ดูเหมือน HTTPS บนเครือข่ายที่บล็อก IPsec ในเครือข่ายโรงแรมที่ทิ้ง UDP 500 และ 4500 IKEv2 ในตัวไม่มีทางสำรอง
ตารางการตัดสินใจที่แก้ปัญหาได้ส่วนใหญ่
ในทางปฏิบัติ คำถามเรื่องโปรโตคอลตัดสินใจกรณีส่วนใหญ่ก่อนที่ฟีเจอร์จะสำคัญ
| What you were given | Device situation | What to use |
|---|---|---|
| An .ovpn or WireGuard config | Personal phone | Provider app; the native form cannot load it |
| IKEv2 host plus CA name | Personal or managed | Profile, or the app's own IKEv2 mode |
| IKEv2 with username and secret | Personal phone | Either; the profile is simpler if you never switch servers |
| A management-installed profile | Supervised, MDM | Native client; do not add a second app entry |
| A per-app tunnelling requirement | Personal phone | App, or accept a full tunnel; iOS cannot split by app without management |
| IPsec blocked on your main network | Any | App with a transport that survives the block |
สองแถวสมควรได้รับการมองครั้งที่สอง ข้อกำหนดต่อแอปบนโทรศัพท์ส่วนตัวคือกรณีที่คนอ่านผิด: การตั้งค่ามีอยู่ใน iOS แต่ถูกขับเคลื่อนโดยการจัดการดังนั้นอุปกรณ์ที่ไม่ได้จัดการจะไม่เสนอให้ เครือข่ายที่ถูกบล็อกไม่ใช่เหตุผลให้ไม่ไว้ใจ IKEv2 แต่เป็นเหตุผลที่แอปของผู้ให้บริการมีอยู่
ตรวจสอบการเลือกด้วยการทดลองหนึ่งครั้ง
ทดสอบโหมดความล้มเหลว ไม่ใช่ปุ่มเชื่อมต่อ เชื่อมต่อหนึ่งครั้ง ยืนยันว่าไฟแสดง VPN ปรากฏ จากนั้นเปิดหน้าที่สะท้อนที่อยู่สาธารณะของคุณและเปรียบเทียบกับครั้งก่อน สลับจาก Wi-Fi ไปยังข้อมูลมือถือโดยไม่แตะ VPN และสังเกตการเชื่อมต่อใหม่ จากนั้นพาโทรศัพท์ผ่านโหมดเครื่องบิน รีบูตและดูว่าอุโมงค์กลับมาเองหรือไม่ โปรไฟล์ที่มี OnDemandEnabled ควรกลับมา ขณะที่แอปหลายตัวต้องเปิดก่อน
เมื่อมันไม่กลับมา ให้แยกความล้มเหลวตามว่ามีอุโมงค์อยู่หรือไม่ การไม่มีไฟแสดง VPN หมายถึงอุโมงค์ไม่เคยขึ้น: ไม่แฮนด์เชกล้มเหลวที่ RemoteIdentifier, CA ที่ตรึงไว้ หรือข้อมูลรับรอง หรือการเชื่อมต่อไม่เคยถูกพยายามเพราะกฎตามต้องการไม่ตรงและไม่มีแอปใดเริ่มมัน ไฟแสดงที่มีทราฟฟิกล้มเหลวหมายถึงการกำหนดเส้นทาง DNS หรือนโยบายฝั่งเซิร์ฟเวอร์ และการติดตั้งไคลเอนต์ใหม่ไม่แตะสิ่งใดในนั้น
รายการสั้น ๆ เพื่อให้อุปกรณ์อธิบายได้สำหรับคนถัดไป:
- รายการ VPN หนึ่งรายการ ไม่ใช่สอง;
- โปรไฟล์หรือแอปตั้งชื่อตามเซิร์ฟเวอร์ที่เชื่อมต่อ;
- ค่าอัตลักษณ์เขียนไว้ในที่ที่คุณหาได้
เริ่มจากแถวโปรโตคอลในตาราง และหยุดตรงนั้นถ้ามันตอบคำถาม