Android มี API ให้นักพัฒนาแอปสร้างเครือข่ายส่วนตัวเสมือน (VPN) Google Cloud หลังจากอ่านคู่มือนี้ คุณจะทราบวิธีพัฒนาและทดสอบ ไคลเอ็นต์ VPN ของตัวเองสำหรับอุปกรณ์ที่ใช้ Android
ภาพรวม
VPN ช่วยให้อุปกรณ์ที่ไม่ได้อยู่ในเครือข่ายจริงๆ เข้าถึง เครือข่าย
Android มีไคลเอ็นต์ VPN ในตัว (PPTP และ L2TP/IPSec) ซึ่งบางครั้ง ซึ่งเรียกว่า VPN เดิม Android 4.0 (API ระดับ 14) เปิดตัว API เพื่อให้แอป นักพัฒนาซอฟต์แวร์สามารถนำเสนอโซลูชัน VPN ของตนเอง คุณจัดแพ็กเกจโซลูชัน VPN ลงในแอปที่ผู้ใช้ติดตั้งลงในอุปกรณ์ โดยปกติแล้วนักพัฒนาแอปจะสร้าง VPN เนื่องจากเหตุผลข้อใดข้อหนึ่งต่อไปนี้
- เพื่อให้บริการโปรโตคอล VPN ที่ไคลเอ็นต์ในตัวไม่รองรับ
- เพื่อช่วยให้ผู้ใช้เชื่อมต่อบริการ VPN ได้โดยไม่มีการกำหนดค่าที่ซับซ้อน
ส่วนที่เหลือของคู่มือนี้จะอธิบายวิธีพัฒนาแอป VPN (รวมถึง เปิดใช้เสมอและ VPN แบบต่อแอป) และไม่ครอบคลุม ไคลเอ็นต์ VPN ในตัว
ประสบการณ์ของผู้ใช้
Android มีอินเทอร์เฟซผู้ใช้ (UI) เพื่อช่วยกำหนดค่า เริ่มใช้งาน โซลูชัน VPN ของคุณ นอกจากนี้ UI ของระบบยังทำให้ผู้ที่กำลังใช้อุปกรณ์ ทราบถึงการเชื่อมต่อ VPN ที่ใช้งานอยู่ Android แสดงคอมโพเนนต์ UI ต่อไปนี้สำหรับ การเชื่อมต่อ VPN:
- ก่อนที่แอป VPN จะใช้งานได้เป็นครั้งแรก ระบบจะแสดง กล่องโต้ตอบคำขอการเชื่อมต่อ กล่องโต้ตอบจะแจ้งให้ผู้ที่ใช้อุปกรณ์ ยืนยันว่าพวกเขาเชื่อถือ VPN และยอมรับคำขอ
- หน้าจอการตั้งค่า VPN (การตั้งค่า > เครือข่ายและอินเทอร์เน็ต > VPN) จะแสดง VPN แอปที่ผู้ใช้ยอมรับคำขอเชื่อมต่อ มีปุ่มสำหรับกำหนดค่า ตัวเลือกระบบหรือลืม VPN
- ถาดการตั้งค่าด่วนจะแสดงแผงข้อมูลเมื่อมีการเชื่อมต่อ ใช้งานอยู่ การแตะป้ายกำกับจะแสดงกล่องโต้ตอบที่มีข้อมูลและลิงก์เพิ่มเติม ไปที่การตั้งค่า
- แถบสถานะจะมีไอคอน VPN (คีย์) ที่แสดงการเชื่อมต่อที่ใช้งานอยู่
นอกจากนี้ แอปของคุณต้องมี UI เพื่อให้ผู้ที่ใช้อุปกรณ์ได้ กำหนดค่าตัวเลือกของบริการ ตัวอย่างเช่น โซลูชันของคุณอาจต้อง เพื่อบันทึกการตั้งค่าการตรวจสอบสิทธิ์บัญชี แอปควรแสดง UI ต่อไปนี้
- ตัวควบคุมเพื่อเริ่มและหยุดการเชื่อมต่อด้วยตนเอง VPN แบบเปิดตลอดเวลา สามารถเชื่อมต่อได้เมื่อจำเป็น แต่อนุญาตให้ผู้ใช้สามารถกำหนดค่าการเชื่อมต่อได้ ทุกครั้งที่พวกเขาใช้ VPN ของคุณ
- การแจ้งเตือนที่ปิดไม่ได้เมื่อบริการทำงานอยู่ การแจ้งเตือนอาจ แสดงสถานะการเชื่อมต่อหรือให้ข้อมูลเพิ่มเติม เช่น สถิติเครือข่าย การแตะการแจ้งเตือนจะนำแอปไปยังเบื้องหน้า นำ การแจ้งเตือนหลังจากบริการไม่มีการใช้งาน
บริการ VPN
แอปของคุณเชื่อมต่อเครือข่ายของระบบสำหรับผู้ใช้ (หรือที่ทำงาน
โปรไฟล์) ไปยังเกตเวย์ VPN ผู้ใช้แต่ละคน (หรือโปรไฟล์งาน) สามารถเรียกใช้
แอป VPN อื่นๆ คุณสร้างบริการ VPN ที่ระบบใช้เพื่อเริ่มต้นและ
หยุด VPN และติดตามสถานะการเชื่อมต่อ บริการ VPN ของคุณรับช่วงมาจาก
VpnService
บริการนี้ยังทำหน้าที่เป็นคอนเทนเนอร์สำหรับการเชื่อมต่อเกตเวย์ VPN และ
อินเทอร์เฟซอุปกรณ์ภายในเครื่องได้ การเรียกใช้อินสแตนซ์บริการ
VpnService.Builder
เพื่อสร้างอินเทอร์เฟซภายในใหม่
แอปของคุณจะโอนข้อมูลต่อไปนี้เพื่อเชื่อมต่ออุปกรณ์กับเกตเวย์ VPN
- อ่านแพ็กเก็ต IP ขาออกจากข้อบ่งชี้ไฟล์ของอินเทอร์เฟซภายในและเข้ารหัส แล้วส่งไปยังเกตเวย์ VPN
- เขียนแพ็กเก็ตขาเข้า (รับและถอดรหัสจากเกตเวย์ VPN) ไปยัง ตัวบอกไฟล์ของอินเทอร์เฟซภายใน
มีบริการที่ใช้งานอยู่เพียง 1 บริการต่อผู้ใช้หรือโปรไฟล์ การเริ่มบริการใหม่ หยุดบริการที่มีอยู่โดยอัตโนมัติ
เพิ่มบริการ
หากต้องการเพิ่มบริการ VPN ลงในแอป ให้สร้างบริการ Android ที่รับช่วงมาจาก
VpnService
ประกาศบริการ VPN ในแอปของคุณ
Manifest ที่มีการเพิ่มดังต่อไปนี้
- ปกป้องบริการด้วย
BIND_VPN_SERVICE
สิทธิ์เพื่อให้มีเพียงระบบเท่านั้นที่สามารถเชื่อมโยงกับบริการของคุณได้ - โฆษณาบริการโดยใช้ตัวกรอง Intent
"android.net.VpnService"
เพื่อให้ ระบบจะค้นหาบริการของคุณได้
ตัวอย่างนี้แสดงวิธีประกาศบริการในไฟล์ Manifest ของแอป
<service android:name=".MyVpnService"
android:permission="android.permission.BIND_VPN_SERVICE">
<intent-filter>
<action android:name="android.net.VpnService"/>
</intent-filter>
</service>
เมื่อแอปของคุณประกาศบริการแล้ว ระบบจะเริ่มทำงานโดยอัตโนมัติ และหยุดบริการ VPN ของแอปเมื่อจำเป็น เช่น การควบคุมระบบ บริการของคุณเมื่อใช้ VPN แบบเปิดตลอดเวลา
เตรียมบริการ
โทรเพื่อเตรียมแอปให้เป็นบริการ VPN ปัจจุบันของผู้ใช้
VpnService.prepare()
หากบุคคลที่ใช้อุปกรณ์ไม่
ได้รับสิทธิ์สำหรับแอปของคุณแล้ว เมธอดจะแสดง Intent ของกิจกรรม
คุณใช้ Intent นี้เพื่อเริ่มกิจกรรมของระบบที่ขอสิทธิ์
ระบบจะแสดงกล่องโต้ตอบที่คล้ายกับข้อความการให้สิทธิ์อื่นๆ เช่น
การเข้าถึงกล้องหรือรายชื่อติดต่อ หากแอปมีการเตรียมไว้แล้ว เมธอดจะกลับมา
null
บริการ VPN ที่เตรียมไว้ในปัจจุบันจะมีเพียงแอปเดียวเท่านั้น โทรเสมอ
VpnService.prepare()
เนื่องจากผู้ใช้อาจตั้งค่า
เป็นบริการ VPN นับตั้งแต่ที่แอปของคุณเรียกใช้เมธอดครั้งล่าสุด ดูข้อมูลเพิ่มเติมได้ที่
ส่วนวงจรของบริการ
เชื่อมต่อบริการ
เมื่อบริการทำงานอยู่ คุณสามารถสร้างอินเทอร์เฟซใหม่ในเครื่อง เชื่อมต่อกับเกตเวย์ VPN แล้ว วิธีขอสิทธิ์และเชื่อมต่อกับบริการ เกตเวย์ VPN คุณต้องทำตามขั้นตอนตามลำดับต่อไปนี้
- โทร
VpnService.prepare()
เพื่อขอสิทธิ์ (เมื่อ ) - โทรหา
VpnService.protect()
เพื่อเก็บ Tunnel Socket ของแอป ภายนอก VPN ของระบบและหลีกเลี่ยงการเชื่อมต่อแบบวงกลม - โทร
DatagramSocket.connect()
เพื่อเชื่อมต่ออุโมงค์ข้อมูลของแอป ไปยังเกตเวย์ VPN - เรียกใช้เมธอด
VpnService.Builder
เพื่อกำหนดค่าท้องถิ่นใหม่ อินเทอร์เฟซ TUN บน สำหรับการรับส่งข้อมูล VPN - โทรหา
VpnService.Builder.establish()
เพื่อให้ระบบ สร้างอินเทอร์เฟซ TUN ภายในเครื่องและเริ่มกำหนดเส้นทางการรับส่งข้อมูลผ่าน ของ Google
ตามปกติแล้ว เกตเวย์ VPN จะแนะนำการตั้งค่าสำหรับอินเทอร์เฟซ TUN ภายในระหว่าง
การจับมือกัน แอปของคุณเรียกใช้เมธอด VpnService.Builder
เพื่อกำหนดค่า
บริการดังที่ปรากฏในตัวอย่างต่อไปนี้:
Kotlin
// Configure a new interface from our VpnService instance. This must be done // from inside a VpnService. val builder = Builder() // Create a local TUN interface using predetermined addresses. In your app, // you typically use values returned from the VPN gateway during handshaking. val localTunnel = builder .addAddress("192.168.2.2", 24) .addRoute("0.0.0.0", 0) .addDnsServer("192.168.1.1") .establish()
Java
// Configure a new interface from our VpnService instance. This must be done // from inside a VpnService. VpnService.Builder builder = new VpnService.Builder(); // Create a local TUN interface using predetermined addresses. In your app, // you typically use values returned from the VPN gateway during handshaking. ParcelFileDescriptor localTunnel = builder .addAddress("192.168.2.2", 24) .addRoute("0.0.0.0", 0) .addDnsServer("192.168.1.1") .establish();
ตัวอย่างในส่วน VPN ของแต่ละแอปจะแสดงการกำหนดค่า IPv6 ซึ่งประกอบด้วย
ตัวเลือกเพิ่มเติม คุณต้องเพิ่มค่า VpnService.Builder
ต่อไปนี้
ก่อนที่คุณจะสร้างอินเทอร์เฟซใหม่ได้:
addAddress()
- เพิ่มที่อยู่ IPv4 หรือ IPv6 อย่างน้อย 1 รายการพร้อมซับเน็ตมาสก์ที่ระบบ กำหนดให้เป็นที่อยู่สำหรับอินเทอร์เฟซ TUN ภายในเครื่อง โดยปกติแล้วแอปของคุณจะได้รับ IP และซับเน็ตมาสก์จากเกตเวย์ VPN ในระหว่างแฮนด์เชค
addRoute()
- เพิ่มอย่างน้อย 1 เส้นทางหากต้องการให้ระบบส่งการเข้าชมผ่าน VPN
ของ Google ระบบจะกรองเส้นทางตามที่อยู่ปลายทาง หากต้องการยอมรับการเข้าชมทั้งหมด ให้ตั้งค่า
เส้นทางแบบเปิด เช่น
0.0.0.0/0
หรือ::/0
เมธอด establish()
แสดงผล
ParcelFileDescriptor
อินสแตนซ์ที่แอปของคุณใช้เพื่ออ่านและเขียน
แพ็กเก็ตที่ส่งไปและกลับจากบัฟเฟอร์ของอินเทอร์เฟซ establish()
จะแสดง null
หากแอปไม่ได้เตรียมไว้หรือมีคนเพิกถอน
สิทธิ์
วงจรของบริการ
แอปของคุณควรติดตามสถานะของ VPN ที่เลือกของระบบและการเปิดใช้งาน การเชื่อมต่อ อัปเดตอินเทอร์เฟซผู้ใช้ (UI) ของแอปเพื่อให้ผู้ใช้สามารถใช้ อุปกรณ์ทราบถึงการเปลี่ยนแปลงใดๆ
กำลังเริ่มต้นบริการ
บริการ VPN ของคุณสามารถเริ่มต้นได้ด้วยวิธีต่อไปนี้
- แอปของคุณเริ่มให้บริการ ซึ่งปกติมักเป็นเพราะผู้ใช้แตะปุ่มเชื่อมต่อ
- ระบบเริ่มต้นบริการเนื่องจาก VPN แบบเปิดตลอดเวลาเปิดอยู่
แอปของคุณเริ่มต้นบริการ VPN โดยการส่ง Intent ไปยัง
startService()
หากต้องการเรียนรู้เพิ่มเติม โปรดอ่านการเริ่มต้น
service [บริการ]
ระบบจะเริ่มต้นบริการในเบื้องหลังด้วยการโทร
onStartCommand()
อย่างไรก็ตาม Android ได้วางข้อจำกัดเกี่ยวกับ
แอปพื้นหลังในเวอร์ชัน 8.0 (API ระดับ 26) ขึ้นไป หากคุณรองรับฟีเจอร์ดังกล่าว
ระดับ API คุณต้องเปลี่ยนบริการของคุณไปใช้เบื้องหน้าโดยการเรียกใช้
Service.startForeground()
หากต้องการเรียนรู้เพิ่มเติม โปรดอ่านการเรียกใช้
บริการที่ทำงานอยู่เบื้องหน้า
การหยุดบริการ
บุคคลที่ใช้อุปกรณ์สามารถหยุดบริการของคุณโดยใช้ UI ของแอป หยุด แทนที่จะปิดการเชื่อมต่อเพียงอย่างเดียว ระบบจะหยุดการทำงานของ เมื่อผู้ที่ใช้อุปกรณ์ดำเนินการต่อไปนี้ในหน้าจอ VPN ของแอปการตั้งค่า
- ยกเลิกการเชื่อมต่อหรือไม่จำแอป VPN
- ปิดการเชื่อมต่อ VPN ตลอดเวลาสำหรับการเชื่อมต่อที่ใช้งานอยู่
ระบบจะเรียกใช้เมธอด onRevoke()
ของบริการของคุณแต่การเรียกนี้
อาจไม่เกิดขึ้นในเทรดหลัก เมื่อระบบเรียกใช้เมธอดนี้
อินเทอร์เฟซเครือข่ายสำรองกำลังกำหนดเส้นทางการรับส่งข้อมูลอยู่แล้ว คุณสามารถกำจัดทิ้งได้อย่างปลอดภัย
แหล่งข้อมูลต่อไปนี้
- ปิดซ็อกเก็ตอุโมงค์ข้อมูลที่มีการป้องกันไปยังเกตเวย์ VPN โดยการเรียกใช้
DatagramSocket.close()
- ปิดข้อบ่งชี้ไฟล์พัสดุ (คุณไม่จำเป็นต้องระบาย) ด้วยการโทร
ParcelFileDescriptor.close()
VPN แบบเปิดตลอดเวลา
Android สามารถเริ่มใช้บริการ VPN เมื่ออุปกรณ์เปิดเครื่องและทำงานต่อไปได้ขณะ อุปกรณ์เปิดอยู่ ฟีเจอร์นี้เรียกว่า VPN แบบเปิดตลอดเวลา และมีให้ใช้งานใน Android 7.0 (API ระดับ 24) ขึ้นไป ขณะที่ Android ยังคงให้บริการ ซึ่งก็คือบริการ VPN ที่เป็นผู้รับผิดชอบเกตเวย์ VPN การเชื่อมต่อ นอกจากนี้ VPN แบบเปิดตลอดเวลายังสามารถบล็อกการเชื่อมต่อที่ไม่ใช้ VPN ได้อีกด้วย
ประสบการณ์ของผู้ใช้
ใน Android 8.0 ขึ้นไป ระบบจะแสดงกล่องโต้ตอบต่อไปนี้เพื่อทำให้ ผู้ที่ใช้อุปกรณ์ว่า VPN แบบเปิดตลอดเวลา:
- เมื่อการเชื่อมต่อ VPN ตลอดเวลายกเลิกการเชื่อมต่อหรือเชื่อมต่อไม่ได้ ผู้ใช้จะเห็น การแจ้งเตือนที่ปิดไม่ได้ การแตะที่การแจ้งเตือนจะแสดงกล่องโต้ตอบที่ จะอธิบายเพิ่มเติม การแจ้งเตือนจะหายไปเมื่อ VPN เชื่อมต่ออีกครั้งหรือเมื่อมีคน จะปิดตัวเลือก VPN แบบเปิดตลอดเวลา
- การเชื่อมต่อ VPN ตลอดเวลาช่วยให้ผู้ที่ใช้อุปกรณ์บล็อกเครือข่ายใดก็ได้ การเชื่อมต่อที่ไม่ใช้ VPN เมื่อเปิดตัวเลือกนี้ การตั้งค่า แอปจะเตือนผู้คนว่าจะไม่มีการเชื่อมต่ออินเทอร์เน็ตก่อนใช้งาน VPN เชื่อมต่อ แอปการตั้งค่าจะแจ้งให้ผู้ที่ใช้อุปกรณ์ดำเนินการต่อหรือ ยกเลิก
เนื่องจากระบบ (ไม่ใช่บุคคล) จะเริ่มต้นและหยุดการเชื่อมต่อตลอดเวลา คุณจำเป็นต้องปรับลักษณะการทำงานของแอปและอินเทอร์เฟซผู้ใช้ ดังนี้
- ปิดใช้ UI ที่ยกเลิกการเชื่อมต่อเนื่องจากระบบและการตั้งค่า จะควบคุมการเชื่อมต่อได้
- บันทึกการกำหนดค่าระหว่างการเริ่มต้นแอปแต่ละรายการและกำหนดค่าการเชื่อมต่อกับ การตั้งค่าล่าสุด เนื่องจากระบบจะเริ่มต้นแอปตามคำขอ ผู้ใช้ อุปกรณ์อาจไม่ต้องการกำหนดค่าการเชื่อมต่อเสมอไป
คุณยังใช้การกำหนดค่าที่มีการจัดการเพื่อกำหนดค่า การเชื่อมต่อ การกำหนดค่าที่มีการจัดการช่วยให้ผู้ดูแลระบบไอทีกำหนดค่า VPN ของคุณได้จากระยะไกล
ตรวจหาเปิดตลอดเวลา
Android จะไม่มี API เพื่อยืนยันว่าระบบเริ่มต้น VPN ของคุณหรือไม่ service. แต่เมื่อแอปแจ้งว่าอินสแตนซ์บริการใดเริ่มทำงานแล้ว คุณจะสันนิษฐานได้ว่า ว่าระบบเริ่มใช้บริการที่ไม่มีการแจ้งว่าไม่เหมาะสมสำหรับ VPN แบบเปิดตลอดเวลาแล้ว ดังตัวอย่างต่อไปนี้
- สร้างอินสแตนซ์
Intent
เพื่อเริ่มต้นบริการ VPN - แจ้งว่าบริการ VPN ไม่เหมาะสมโดยป้อนข้อมูลเพิ่มเติมใน Intent
- ในเมธอด
onStartCommand()
ของบริการ ให้มองหาเมธอด แฟล็กในค่าเพิ่มเติมของอาร์กิวเมนต์intent
การเชื่อมต่อที่ถูกบล็อก
ผู้ที่ใช้อุปกรณ์ (หรือผู้ดูแลระบบไอที) จะบังคับให้การเข้าชมทั้งหมดใช้ VPN ได้ ระบบจะบล็อกการจราจรของข้อมูลในเครือข่ายที่ไม่ได้ใช้ VPN ผู้ที่ใช้ อุปกรณ์จะเห็นสวิตช์บล็อกการเชื่อมต่อที่ไม่ใช้ VPN ในตัวเลือก VPN ในการตั้งค่า
เลือกไม่ใช้ฟีเจอร์เปิดตลอดเวลา
หากปัจจุบันแอปของคุณยังไม่รองรับ VPN แบบเปิดตลอดเวลา คุณสามารถเลือกไม่ใช้ได้ (สำหรับ Android
8.1 ขึ้นไป) โดยการตั้งค่า
SERVICE_META_DATA_SUPPORTS_ALWAYS_ON
ข้อมูลเมตาของบริการไปยัง false
ตัวอย่างไฟล์ Manifest ของแอปต่อไปนี้แสดงวิธีเพิ่ม
องค์ประกอบข้อมูลเมตา
<service android:name=".MyVpnService"
android:permission="android.permission.BIND_VPN_SERVICE">
<intent-filter>
<action android:name="android.net.VpnService"/>
</intent-filter>
<meta-data android:name="android.net.VpnService.SUPPORTS_ALWAYS_ON"
android:value=false/>
</service>
เมื่อแอปเลือกไม่ใช้การเชื่อมต่อ VPN ตลอดเวลา ระบบจะปิดตัวเลือก UI ควบคุมได้ในการตั้งค่า
VPN สำหรับแต่ละแอป
แอป VPN สามารถกรองแอปที่ติดตั้งซึ่งได้รับอนุญาตให้ส่งการเข้าชมผ่าน การเชื่อมต่อ VPN คุณจะสร้างรายการที่อนุญาต หรือรายการที่ไม่อนุญาตก็ได้ แต่ไม่ใช่ทั้ง 2 อย่าง หากคุณไม่สร้างรายการที่อนุญาตหรือไม่อนุญาต ระบบจะส่ง การจราจรของข้อมูลในเครือข่ายทั้งหมดผ่าน VPN
แอป VPN ต้องตั้งค่ารายการก่อนที่จะเชื่อมต่อ หากคุณ คุณต้องเปลี่ยนแปลงรายการ สร้างการเชื่อมต่อ VPN ใหม่ แอปต้องเป็นไปตาม ติดตั้งบนอุปกรณ์ เมื่อคุณเพิ่ม อุปกรณ์ลงในรายการ
Kotlin
// The apps that will have access to the VPN. val appPackages = arrayOf( "com.android.chrome", "com.google.android.youtube", "com.example.a.missing.app") // Loop through the app packages in the array and confirm that the app is // installed before adding the app to the allowed list. val builder = Builder() for (appPackage in appPackages) { try { packageManager.getPackageInfo(appPackage, 0) builder.addAllowedApplication(appPackage) } catch (e: PackageManager.NameNotFoundException) { // The app isn't installed. } } // Complete the VPN interface config. val localTunnel = builder .addAddress("2001:db8::1", 64) .addRoute("::", 0) .establish()
Java
// The apps that will have access to the VPN. String[] appPackages = { "com.android.chrome", "com.google.android.youtube", "com.example.a.missing.app"}; // Loop through the app packages in the array and confirm that the app is // installed before adding the app to the allowed list. VpnService.Builder builder = new VpnService.Builder(); PackageManager packageManager = getPackageManager(); for (String appPackage: appPackages) { try { packageManager.getPackageInfo(appPackage, 0); builder.addAllowedApplication(appPackage); } catch (PackageManager.NameNotFoundException e) { // The app isn't installed. } } // Complete the VPN interface config. ParcelFileDescriptor localTunnel = builder .addAddress("2001:db8::1", 64) .addRoute("::", 0) .establish();
แอปที่อนุญาต
หากต้องการเพิ่มแอปลงในรายการที่อนุญาต ให้โทร
VpnService.Builder.addAllowedApplication()
ถ้า
ในรายการจะมีแอปอย่างน้อย 1 รายการ จะมีเฉพาะแอปในรายการนั้นเท่านั้นที่ใช้ VPN
แอปอื่นๆ ทั้งหมด (ที่ไม่ได้อยู่ในรายการ) จะใช้เครือข่ายของระบบเสมือนว่า VPN
ไม่ทำงาน หากรายการที่อนุญาตว่างเปล่า แอปทั้งหมดจะใช้ VPN
แอปที่ไม่อนุญาต
หากต้องการเพิ่มแอปลงในรายการที่ไม่อนุญาต โปรดเรียก
VpnService.Builder.addDisallowedApplication()
แอปที่ไม่อนุญาตจะใช้เครือข่ายของระบบเสมือนว่า VPN ไม่ได้ทำงานอยู่ - ฟีเจอร์อื่นๆ ทั้งหมด
จะใช้ VPN
ข้าม VPN
VPN สามารถอนุญาตให้แอปข้าม VPN และเลือกเครือข่ายของตนเองได้ ถึง
ข้าม VPN โทรหา VpnService.Builder.allowBypass()
เมื่อ
กำลังสร้างอินเทอร์เฟซ VPN คุณจะเปลี่ยนค่านี้ไม่ได้หลังจากเริ่มต้น
บริการ VPN หากแอปไม่ได้เชื่อมโยงกระบวนการหรือซ็อกเก็ตกับแอป
การจราจรของข้อมูลในเครือข่ายของแอปจะยังคงดำเนินต่อไปผ่าน VPN
แอปที่ผูกกับเครือข่ายใดเครือข่ายหนึ่งจะไม่มีการเชื่อมต่อเมื่อมีคน
บล็อกการรับส่งข้อมูลที่ไม่ได้ผ่าน VPN เพื่อส่งการเข้าชมผ่าน
เครือข่าย วิธีการเรียกใช้แอป เช่น
ConnectivityManager.bindProcessToNetwork()
หรือ
Network.bindSocket()
ก่อนเชื่อมต่อเต้ารับ
โค้ดตัวอย่าง
โครงการโอเพนซอร์ส Android มีแอปตัวอย่างชื่อ ToyVPN แอปนี้จะแสดงวิธีตั้งค่าและเชื่อมต่อบริการ VPN