在 iOS 和 macOS 上安装 OpenVPN 客户端

本文记录了如何在 iOSmacOS 上安装和配置 OpenVPN 客户端,主要介绍如何编写客户端配置文件 client.ovpn 并导入。

安装 OpenVPN Connect

配置 OpenVPN Connect

客户端配置文件模板 client.ovpn 以及 ca.crtca),client.crtcert),client.keykey)等文件均在安装 OpenVPN 服务端时获得。

客户端提供了两种方式导入配置文件:

  1. 通过 URL,建议 URL 仅限在私有网络内访问。
  2. 通过其他方式例如邮件(安全性降低),下载为本地文件再导入。本人使用 OneDrive 共享到 iPhone

对于客户端配置而言,iOS 的困难点在于其文件系统封闭,ca.crtca),client.crtcert),client.keykey)不能放置到指定位置。因此配置文件分为两种形式:

  1. CA 根证书 ca.crt,客户端证书 client.crt,客户端密钥 client.key 的内容复制粘贴到 client.ovpn 中,形成一个联合配置文件。这种方式简单方便,推荐!。
  2. 使用 opensslCA 根证书 ca.crt,客户端证书 client.crt,客户端密钥 client.key 转换为 PKCS#12 文件,先导入 client.ovpn12 再导入 client.ovpn不推荐的原因在于本人导入失败,最终放弃。

单一 client.ovpn

  1. 从目录 C:\Program Files\OpenVPN\sample-config 复制客户端配置文件模板 client.ovpn,修改配置
  2. remote your-server 1194 中的地址和端口替换成你的 OpenVPN 服务端对外的地址和端口
  3. ca ca.crtcert client.crtkey client.keytls-auth ta.key 1 注释掉,再将各自文件中的内容以类 XML 的形式粘贴到 client.ovpn
  4. 将修改好的客户端配置文件导入到客户端中
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
remote your-server 1194

;ca ca.crt
;cert client.crt
;key client.key

;tls-auth ta.key 1

<ca>
-----BEGIN CERTIFICATE-----
paste contents of ca.crt
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
paste contents of client.crt
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
paste contents of client.key
-----END PRIVATE KEY-----
</key>

client.ovpn + client.opvn12(失败)

  1. 使用 openssl 命令将客户端的证书和密钥文件转换为 PKCS#12 形式的文件。该命令会提示 Enter Export Password,可以为空,但为了安全建议设置密码。
    1
    openssl pkcs12 -export -in cert -inkey key -certfile ca -name MyClient -out client.ovpn12
  2. 由于在 iOS 中导入 PKCS#12 文件到 Keychain 中时只导入了客户端证书和密钥,CA 根证书并没有导入,client.ovpn 文件中必须要保留 CA根证书的配置。
    既可以用传统的引用文件的方式:
    1
    ca ca.crt
    也可以用类 XML 的形式粘贴 ca.crt 内容到 client.ovpn 中:
    1
    2
    3
    <ca>
    paste contents of ca.crt here
    </ca>
  3. 先导入 client.ovpn12(需要输入转换时的密码),再导入 client.ovpn

但是我失败了……导入 client.ovpn12 时密码一直错误,没有解决。推荐使用第一种方式。

NAT 和 DDNS

本人的设置如下,仅供参考:

  • OpenVPN 服务端配置的端口号为默认的 1194
  • 在路由器管理后台的 NAT 设置中,配置一个自定义的高位端口号如 49999 作为对外端口号映射到 Windows 10 主机的 1194 端口号。这既是为了安全,也是为了避免不必要的检测风险(有没有用我也不知道啊 =_= )。
  • 由于公网 IP 是动态的,一旦 IP 发生变化,就需要修改配置文件。因此使用 ddns-go 配合 Cloudflare 实现动态域名解析。

参考文章