Skip to content

OpenVPN 与 OpenConnect ​

办公笔记本、路由器和受限设备上往往已经自带 OpenVPN 和 OpenConnect 这两种 VPN。NX 把两者都作为端点提供:每个用户用自己的账户名和密码登录,面板为他们生成客户端配置。

适用场景 ​

  • OpenVPN:OpenVPN 官方应用、内置客户端的路由器和防火墙,以及任何能导入 .ovpn 文件的用户。
  • OpenConnect:Cisco Secure Client(AnyConnect)和 OpenConnect 客户端,常见于工作设备。

两者都不能放在 CDN 后面。

OpenVPN ​

端点 → 添加,类型选 openvpn-server。通用表单见 端点。表单初始包含一个随机端口、tls 模式、udp、一个客户端地址池和节点证书。

字段
Listen port用户连接的端口
Modetls(默认)是面向客户的模式:服务器用证书证明身份,每个用户用自己的名称和密码登录。static_key 是面向单个客户端的点对点隧道,见下文
Networkudp(默认)或 tcp。一个端点只监听其中一种;需要两种时再添加一个端点
Address (CIDR list)用户隧道地址所取自的地址池,例如 10.9.0.1/24
TLS 证书默认是节点证书,或 证书 中的证书。只有选择端点自带的证书时才显示证书字段
Verify client certificate(高级)默认关闭。要求客户端证书会把端点从用户订阅中移除,因为面板不签发这类证书

+ 添加设置下是微调选项。大多数添加时都从节点在没有它时本就使用的值开始,因此添加后在修改之前不会改变任何东西。例外是 Data ciphers fallback:节点本身没有这个值,添加它会让早于 OpenVPN 2.4 的客户端用它指定的加密算法连接。

  • Data ciphers、Data ciphers fallback、Auth digest:数据通道。fallback 用于 OpenVPN 2.4 之前的客户端。
  • Min/Max TLS version、TLS 1.2 cipher suites、TLS key exchange groups、Certificate profile:控制通道的 TLS。
  • MTU、MSS fix (bytes)、Replay window (packets)、Max clients、Topology。
  • Ping interval/restart、Renegotiate every/after、Handshake window:服务器端的计时。

控制通道保护 ​

开启控制通道保护,用密钥对每个控制通道数据包签名(tls_auth)或同时加密(tls_crypt、tls_crypt_v2)。这样没有密钥的探测完全得不到响应;使用 tls_crypt 或 tls_crypt_v2 时,网络上无法读取 TLS 握手和服务器证书。三者都不能隐藏这是 OpenVPN 流量:数据包头仍然可读,无论选哪种都能据此识别出 OpenVPN。

密钥由面板生成,重新生成按钮会生成新密钥。每个用户的 .ovpn 文件和订阅都带有对应的客户端部分:

  • tls_crypt 和 tls_auth:所有人使用同一个密钥。
  • tls_crypt_v2:每个用户有自己的密钥,用服务器密钥封装。服务器密钥永远不会离开端点。用户每次得到的都是同一个密钥;重新生成服务器密钥会给所有用户新密钥,他们需要重新下载文件。

推送给客户端 ​

推送给客户端是服务器在每个客户端连接后告诉它的内容。关闭时使用面板默认值:全部流量走隧道,每 10 秒 ping 一次,60 秒后重启。开启时从同样的默认值开始,可以修改:

  • Route all traffic through the tunnel 及其标志,以及经由隧道发送的网络 Routes(前者关闭时只发送这些);
  • 所有客户端都读取的 DNS servers (dhcp-option)、Search domains,以及供 OpenVPN 2.6 客户端使用的 DNS 服务器(优先级、分域 DNS、DNSSEC、DNS over TLS 或 HTTPS);
  • Block DNS outside the tunnel (Windows)、额外的 DHCP 选项和客户端 ping 计时。

客户端从服务器获取所有这些内容;它们的文件不会改变。

静态密钥模式 ​

static_key 模式是本端点与持有相同密钥的单个客户端之间的一条隧道,无需登录。它需要:

  • Static key:自动生成,并带有生成新密钥的按钮;
  • Cipher;
  • Client tunnel address,客户端在隧道内的地址(地址池包含 IPv6 时还需要 IPv6 地址);
  • 使用 UDP 时,Client address 和 Client port:服务器只回应该地址。

这样的端点没有用户:没有 TLS,不推送任何内容,也不会生成 .ovpn 文件或订阅条目。它唯一的客户端需要您自己配置。

.ovpn 文件 ​

模板上的每个用户都会得到一个 .ovpn 文件,位于其 二维码 / 链接 对话框的 客户端应用 下(保存文件),也在其订阅页面上。这个文件是完整的:

  • 服务器证书就在文件里,所以自签名的节点证书无需在设备上做任何设置即可使用;
  • 用户的名称和密码也在文件里,所以 OpenVPN Connect 3 和 OpenVPN 2.6 及以上版本无需询问即可连接。

内含证书的 .ovpn 通常太大,放不进二维码;这时对话框只提供复制和保存。文件使用节点的第一个链接地址,因为保存下来的文件无法列出备选地址。

sing-box 应用的订阅中也会包含该端点的条目。

OpenConnect ​

端点 → 添加,类型选 openconnect-server。表单初始包含一个随机端口、一个客户端地址池,以及使用节点证书的 TLS。

字段
Listen port通常为 443,这是 AnyConnect 客户端所期望的
Client IP pool (CIDR)用户隧道地址所取自的地址池
TLS 证书默认为节点证书,也可使用 证书 中的证书。用户拿到的登录信息不含证书,所以客户端会像浏览器一样校验它:为真实域名签发的 ACME 证书可以避免设备上出现警告或拒绝连接
Pushed DNS servers设备应使用的解析服务器
Search domain、Split-include routes、MTU、DPD/keepalive (seconds)(高级)与任何 AnyConnect 服务器相同

OpenConnect 客户端使用服务器地址和登录信息,而不是文件。用户的 客户端应用 选项卡和订阅页面会显示这两项。sing-box 应用的订阅中也会包含该端点。

用户 ​

  • 在 OpenVPN 上每个用户同一时间只有一台设备。 用同一账户登录的第二台设备会接管会话,第一台被断开。使用 TCP 时它立即察觉;使用 UDP 时它不会收到通知,要到下一次 ping 超时时才察觉。两种情况下它都会重新连接并夺回会话。因此同一用户的两台设备会不断互相挤掉,而立即重连的客户端(例如 sing-box 应用)总是获胜。请给每台设备单独的账户,或让第二台设备使用其他协议。Allow duplicate CN 可以取消这条规则,但这样每次连接都会得到新的隧道地址,设有地址限制的用户在重连后可能会被拒绝几分钟。
  • 用户修改密码、被删除或被停用时,会立即从 OpenVPN 断开;其他用户保持连接。
  • tls 模式的 OpenVPN 端点或 OpenConnect 端点,如果其模板上没有用户,就完全不提供服务:空的 OpenVPN 服务器会接受任何密码。至少有一个用户后,面板才会把它下发给节点。
  • 与任何入站一样,流量统计、额度、速度和地址限制按用户生效。

文字与图片采用 CC BY 4.0 许可。