PIATunnel 1.1.6

PIATunnel 1.1.6

Davide De Rosa 维护。



PIATunnel 1.1.6

  • Davide De Rosa

PIA logo

Private Internet Access

Private Internet Access 是全球领先的消费级 VPN 服务。在 Private Internet Access,我们相信所有人应该享有无拘无束的访问权利,作为开源生态系统的坚定支持者,我们决定开源我们的 VPN 客户端。有关 Private Internet Access 服务的更多信息,请访问我们的网站 privateinternetaccess.com 或查看 Wiki

适用于 Apple 平台的隧道

此库为 Apple 平台提供了 OpenVPN® 协议的简化 Swift/Obj-C 实现,同时利用了 Private Internet Access 客户端补丁定制。加密层建立在 OpenSSL 1.1.0h 之上,这又使得支持一系列加密和摘要算法。

入门指南

客户端已知与 OpenVPN® 2.3+ 服务器兼容。还包含密钥协商和重放保护,但当前不支持完整的配置文件 (.ovpn)。

  • UDP 或 TCP 上的握手和隧道传输
  • 客户端发起的协商
  • 重放保护(硬编码窗口)
  • 数据加密
    • AES-CBC (128 位和 256 位)
    • AES-GCM (128 位和 256 位)
  • HMAC 摘要
    • SHA-1
    • SHA-256
  • TLS 证书验证
    • RSA (2048 位、3072 位和 4096 位)
    • ECC (secp256r1, secp521r1, secp256k1)
    • 自定义证书

安装

要求

  • iOS 9.0+ / macOS 10.11+
  • Xcode 9+ (Swift 4)
  • Git (预安装在Xcode命令行工具中)
  • Ruby (预安装在macOS中)
  • CocoaPods 1.5.0
  • jazzy(可选,用于文档)

强烈建议使用Homebrew提供的Git和Ruby包。

CocoaPods

使用CocoaPods时,只需将其添加到Podfile中

pod 'PIATunnel'

测试

本地下载库代码库

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

假设您有一个正常工作的CocoaPods环境,设置库的工作空间只需安装pod依赖项

$ pod install

然后,在Xcode中打开PIATunnel.xcworkspace,并运行在PIATunnelTests目标中找到的单元测试。在PIATunnel-iOS上按下CMD+U也可以做到这一点。

示例

有一个名为Demo的目录,其中包含一个测试隧道的简单应用程序,称为BasicTunnel。像往常一样,启动CocoaPods

$ pod install

然后打开Demo.xcworkspace并运行BasicTunnel-iOS目标。

为了让VPN正常工作,BasicTunnel演示需要

  • 具有App GroupsKeychain Sharing功能
  • 具有Packet Tunnel权限的应用ID

这两个功能都在主应用程序和隧道扩展目标中。

要测试连接到您自己的服务器而不是PIA服务器,请修改文件Demo/BasicTunnel-[iOS|macOS]/ViewController.swift,并确保

  • builder.endpointProtocols中的.pia替换为.vanilla
  • builder.handshake设置为.custom
  • builder.ca设置为您的VPN服务器CA的PEM格式证书。

示例

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

文档

这个库分为两个模块,以便将底层协议实现与平台特定的桥接解耦,即NetworkExtension VPN框架。

公共接口的完整文档可用,可以通过jazzy生成。在安装jazzy Ruby gem后

$ gem install jazzy

进入存储库的根目录并运行

$ jazzy

生成的输出以HTML格式存储在docs目录中。

核心

在这里,您可以找到建立连接的低级实体。代码混合了Swift和Obj-C,大部分都不对消费者公开。《核心》模块依赖于OpenSSL,基本上是平台无关的。

入口点是SessionProxy类。网络层是完全抽象的,并通过使用不透明的IOInterfaceLinkInterfaceTunnelInterface)以及SessionProxyDelegate协议进行外部委托。

应用扩展

此模块的目标是将一个NEPacketTunnelProvider的实现打包为一个黑盒,NEPacketTunnelProvider是包隧道提供器应用扩展的重要组成部分。您可以在PIATunnelProvider类中找到主要实现。

目前,此扩展支持通过UDP和TCP套接字进行VPN。可选地维护和共享调试日志快照,并通过共享App Group中的UserDefaults与宿主应用共享。

贡献

通过参与此项目,您同意在《贡献者许可协议》(CLA)中声明的条款。请在此处查看

如需更多详细信息,请参阅CONTRIBUTING

问题和拉取请求应使用以下模板:ISSUEPULL REQUEST

作者

许可

此项目采用MIT (Expat) 许可协议,可在此处找到:在这里

致谢

  • SwiftyBeaver - © 2015 Sebastian Kreutzberger

此产品包含 OpenSSL 项目开发的软件,用于 OpenSSL 工具套件。(https://www.openssl.org/

© 2002-2018 OpenVPN Inc. - OpenVPN 是 OpenVPN Inc. 的注册商标。