All Projects → pia-foss → Tunnel Apple

pia-foss / Tunnel Apple

Licence: mit
Private Internet Access - Tunnel for Apple platforms

Programming Languages

swift
15916 projects

Projects that are alternatives of or similar to Tunnel Apple

Subnet
Simple, auditable & elegant VPN, built with TLS mutual authentication and TUN.
Stars: ✭ 1,040 (+1407.25%)
Mutual labels:  vpn, vpn-client
Fanqiang Vpn.github.io
2021年 中国翻墙软件、VPN推荐指南,对比VPS搭建梯子、SSR机场、蓝灯、WireGuard、V2ray、老王VPN等科学上网软件与翻墙方法,中国最新科学上网翻墙VPN梯子下载推荐,稳定好用。
Stars: ✭ 390 (+465.22%)
Mutual labels:  vpn, vpn-client
Android Vpn Client Ics Openvpn
⭐ Create your Android VPN App by using Android Studio and publish to Google Play Store 🤖
Stars: ✭ 270 (+291.3%)
Mutual labels:  vpn, vpn-client
android
Android eduVPN application
Stars: ✭ 80 (+15.94%)
Mutual labels:  vpn, vpn-client
Openconnect
OpenConnect client extended to support Palo Alto Networks' GlobalProtect VPN
Stars: ✭ 654 (+847.83%)
Mutual labels:  vpn, vpn-client
Strongswan
strongSwan - IPsec-based VPN
Stars: ✭ 1,112 (+1511.59%)
Mutual labels:  vpn, vpn-client
Macosvpn
🔧 Create macOS VPNs programmatically (L2TP & Cisco)
Stars: ✭ 348 (+404.35%)
Mutual labels:  vpn, vpn-client
iosvpn.github.io
iPhone和iOS 翻墙梯子VPN推荐,2022中国苹果手机iPhone翻墙软件和科学上网避坑指南,稳定梯子推荐。
Stars: ✭ 72 (+4.35%)
Mutual labels:  vpn, vpn-client
Openvpn3
OpenVPN 3 is a C++ class library that implements the functionality of an OpenVPN client, and is protocol-compatible with the OpenVPN 2.x branch.
Stars: ✭ 510 (+639.13%)
Mutual labels:  vpn, vpn-client
Algo
Set up a personal VPN in the cloud
Stars: ✭ 24,275 (+35081.16%)
Mutual labels:  vpn, vpn-client
desktop-app-daemon
Official IVPN Desktop app (service)
Stars: ✭ 34 (-50.72%)
Mutual labels:  vpn, vpn-client
Node
Mysterium Network Node - official implementation of distributed VPN network (dVPN) protocol
Stars: ✭ 681 (+886.96%)
Mutual labels:  vpn, vpn-client
KidVPN
The world's smallest VPN server and client.
Stars: ✭ 63 (-8.7%)
Mutual labels:  vpn, vpn-client
Gof5
Open Source F5 BIG-IP VPN client for Linux, MacOS, FreeBSD and Windows
Stars: ✭ 47 (-31.88%)
Mutual labels:  vpn, vpn-client
nordvpn
NordVpn Docker Client
Stars: ✭ 475 (+588.41%)
Mutual labels:  vpn, vpn-client
Pi Hole On Google Compute Engine Free Tier With Full Tunnel And Split Tunnel Wireguard Vpn Configs
Run your own privacy-first ad blocking service at home, or in the cloud for free with Google Cloud Services.
Stars: ✭ 343 (+397.1%)
Mutual labels:  vpn, vpn-client
desktop-app-ui2
IVPN Desktop app
Stars: ✭ 19 (-72.46%)
Mutual labels:  vpn, vpn-client
killswitch-windows
VPN kill switch for windows.
Stars: ✭ 22 (-68.12%)
Mutual labels:  vpn, vpn-client
Docker Ipsec Vpn Server
Docker image to run an IPsec VPN server, with IPsec/L2TP, Cisco IPsec and IKEv2
Stars: ✭ 4,356 (+6213.04%)
Mutual labels:  vpn, vpn-client
Aws Vpn Server Setup
Setup your own private, secure, free* VPN on the Amazon AWS Cloud in 10 minutes. CloudFormation
Stars: ✭ 672 (+873.91%)
Mutual labels:  vpn, vpn-client

PIA logo

Discontinued

We're sorry to say that we have been discontinued this library in favour of TunnelKit.

Private Internet Access

Private Internet Access is the world's leading consumer VPN service. At Private Internet Access we believe in unfettered access for all, and as a firm supporter of the open source ecosystem we have made the decision to open source our VPN clients. For more information about the PIA service, please visit our website privateinternetaccess.com or check out the Wiki.

Tunnel for Apple platforms

This library provides a simplified Swift/Obj-C implementation of the OpenVPN® protocol for the Apple platforms, while also taking advantage of the Private Internet Access client patch customizations. The crypto layer is built on top of OpenSSL 1.1.0j.2, which in turn enables support for a certain range of encryption and digest algorithms.

Getting started

The client is known to work with OpenVPN® 2.3+ servers. Key renegotiation and replay protection are also included, but full-fledged configuration files (.ovpn) are not currently supported.

  • [x] Handshake and tunneling over UDP or TCP
  • [x] Client-initiated renegotiation
  • [x] Replay protection (hardcoded window)
  • [x] Data encryption
    • AES-CBC (128 and 256 bit)
    • AES-GCM (128 and 256 bit)
  • [x] HMAC digest
    • SHA-1
    • SHA-256
  • [x] TLS CA validation
    • RSA (2048, 3072 and 4096 bit)
    • ECC (secp256r1, secp521r1, secp256k1)
    • Custom certificate

Installation

Requirements

  • iOS 11.0+ / macOS 10.11+
  • Xcode 9+ (Swift 4)
  • Git (preinstalled with Xcode Command Line Tools)
  • Ruby (preinstalled with macOS)
  • CocoaPods 1.5.0
  • jazzy (optional, for documentation)

It's highly recommended to use the Git and Ruby packages provided by Homebrew.

CocoaPods

To use with CocoaPods just add this to your Podfile:

pod 'PIATunnel'

Testing

Download the library codebase locally:

$ git clone https://github.com/pia-foss/tunnel-apple.git

Assuming you have a working CocoaPods environment, setting up the library workspace only requires installing the pod dependencies:

$ pod install

After that, open PIATunnel.xcworkspace in Xcode and run the unit tests found in the PIATunnelTests target. A simple CMD+U while on PIATunnel-iOS should do that as well.

Demo

There is a Demo directory containing a simple app for testing the tunnel, called BasicTunnel. As usual, prepare for CocoaPods:

$ pod install

then open Demo.xcworkspace and run the BasicTunnel-iOS target.

For the VPN to work properly, the BasicTunnel demo requires:

  • App Groups and Keychain Sharing capabilities
  • App IDs with Packet Tunnel entitlements

both in the main app and the tunnel extension target.

In order to test connection to your own server rather than a PIA server, modify the file Demo/BasicTunnel-[iOS|macOS]/ViewController.swift and make sure to:

  • Replace .pia with .vanilla in builder.endpointProtocols.
  • Set builder.handshake to .custom.
  • Set builder.ca to the PEM formatted certificate of your VPN server's CA.

Example:

builder.endpointProtocols = [PIATunnelProvider.EndpointProtocol(.udp, 1194, .vanilla)]
builder.handshake = .custom
builder.ca = """
-----BEGIN CERTIFICATE-----
MIIFJDCC...
-----END CERTIFICATE-----
"""

Documentation

The library is split into two modules, in order to decouple the low-level protocol implementation from the platform-specific bridging, namely the NetworkExtension VPN framework.

Full documentation of the public interface is available and can be generated with jazzy. After installing the jazzy Ruby gem with:

$ gem install jazzy

enter the root directory of the repository and run:

$ jazzy

The generated output is stored into the docs directory in HTML format.

Core

Here you will find the low-level entities on top of which the connection is established. Code is mixed Swift and Obj-C, most of it is not exposed to consumers. The Core module depends on OpenSSL and is mostly platform-agnostic.

The entry point is the SessionProxy class. The networking layer is fully abstract and delegated externally with the use of opaque IOInterface (LinkInterface and TunnelInterface) and SessionProxyDelegate protocols.

AppExtension

The goal of this module is packaging up a black box implementation of a NEPacketTunnelProvider, which is the essential part of a Packet Tunnel Provider app extension. You will find the main implementation in the PIATunnelProvider class.

Currently, the extension supports VPN over both UDP and TCP sockets. A debug log snapshot is optionally maintained and shared to host apps via UserDefaults in a shared App Group.

Contributing

By contributing to this project you are agreeing to the terms stated in the Contributor License Agreement (CLA) here.

For more details please see CONTRIBUTING.

Issues and Pull Requests should use these templates: ISSUE and PULL REQUEST.

Authors

  • Jose Blaya - ueshiba
  • Davide De Rosa
  • Steve

License

This project is licensed under the MIT (Expat) license, which can be found here.

Acknowledgements

  • SwiftyBeaver - © 2015 Sebastian Kreutzberger
  • OpenSSL-Apple - © Davide De Rosa

This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit. (https://www.openssl.org/)

© 2002-2018 OpenVPN Inc. - OpenVPN is a registered trademark of OpenVPN Inc.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].