iOS VPN client implementation demo based on iOS9 NetworkExtension NETunnelProvider APIs.
Apple released a new version of
Network Extension
since iOS9, which allows us to implement our own VPN protocol. This repo provides a simple demo using Network Extension
with Swift 3.
Server side demo is here.
This demo and server side demo are extremely simplified and only for demonstration purposes, a lot of stuff are hard coded. Further design and elaboration are required if you want apply this demo to your app.
Inspired by ShadowVPN-iOS.
Prerequisites to build
- Then you need an iPhone. Network Extension App cannot run in iOS Simulators, you need a real iPhone to debug.
- Login Apple developer portal, register 2 new App IDs, one for App target and another for NetworkExtension tunnel target. And make sure
App Groups
andNetwork Extensions
are checked inApp Services
section. - Register an
App Group
in developer portal as well - Then, again in
App IDs
section of developer portal, edit the 2 App IDs you created at 3rd step, configureApp Groups
to the app group you created at 4th step. - Also in developer portal, generate 2 iOS App Development provision profiles for the 2 App IDs created before, ~~~make sure
Network Extension
entitlement is selected on 'Do you need additional entitlements?' page~~~ (2017-12-27 Update: This is probably not needed as well). Then download them and save them to disk. - Open this xcodeproj with XCode, select
NEPacketTunnelVPNDemo
target, inGeneral > Identity
section, changeBundle Identifier
to App ID you created. Then import profiles you generated inGeneral > Signing (Debug)
section andGeneral > Signing (Release)
section. - Do the same thing for
NEPacketTunnelVPNDemoTunnel
target. - Find a Linux machine, build and run simple-vpn-demo, fill its IP address to ViewController.swift.
Run
- After build & run
simple-vpn-demo
, your terminal should be like this. - Your IP address displaying on http://whatismyipaddress.com/ on your iPhone should be different before and after click the
Connect
button. thus Q.E.D.