许多小企业都运行着多年前由某个人搭建、之后再没人动过的 OpenVPN 服务器。它一直正常工作,直到服务器的操作系统升级,或者新笔记本带着最新版客户端到来,忽然部分或全部用户都连不上了。Debian 12 和 13 以及 Ubuntu 24.04 都自带 OpenVPN 2.6 系列,并基于 OpenSSL 3 构建,二者一起淘汰了好几项旧的默认设置。本指南说明 OpenVPN 2.6 升级时通常会出什么问题,如何正确修复而不是把旧设置重新打开,以及在配置文件已经打开的时候还应检查什么。

加密算法:从 cipher 到 OpenVPN data-ciphers

较旧的配置里常有 cipher BF-CBC 或 cipher AES-256-CBC 这样的行,或者什么都不写,依赖旧的 Blowfish 默认值。从 2.5 版开始,OpenVPN 会根据 OpenVPN data-ciphers 选项设定的列表来协商数据通道的加密算法,默认接受 AES-256-GCM 和 AES-128-GCM,在 2.6 中如果加密库支持,还包括 CHACHA20-POLY1305。cipher 选项不再自动加入该列表。无法进行协商的非常老的客户端,或者仍只配置了 Blowfish 的服务器,都会连接失败。

OpenSSL 3 还增加了第二道障碍:除非显式加载其 legacy provider,否则它不再提供 Blowfish 和其他遗留算法。这个选项只是临时的过渡桥梁,而不是最终目的地。长久的解决办法是更新客户端,让双方协商使用 AES-GCM 或 ChaCha20。

压缩默认关闭

2.3 和 2.4 时代的配置里经常带有 comp-lzo 或 compress 行。压缩与加密结合使用可能泄露流量的信息,这就是所谓的 VORACLE 攻击,因此 OpenVPN 压缩多年来一直不被推荐。在 2.6 中,除非配置中明确提到压缩,否则 allow-compression 默认为 no。服务器与客户端设置不一致,表现为隧道能建立但不传输任何流量。干净的做法是从服务器和每个客户端配置文件中删除压缩。如果部分客户端无法立即更新,可以只在短暂的过渡期内保留一个明确的、不对称的设置。

证书、密钥与“CRL has expired”

升级时往往会暴露出三类证书问题:

  • 薄弱的旧密钥和签名。按 Debian 和 Ubuntu 的配置,OpenSSL 3 会拒绝短于 2048 位的 RSA 密钥,以及使用过时哈希算法签名的证书。十年前用小密钥创建的证书颁发机构必须更换,每位用户都需要新的配置文件。
  • 即将到期的证书。新版 easy-rsa 签发的服务器和客户端证书有有限的有效期。请现在就查清到期日期,而不是等到它们失效的那天早上。
  • 过期的吊销列表。如果服务器使用 crl-verify,证书吊销列表有自己的有效期,easy-rsa 默认为 180 天。到期之后,即使其他一切都没变,所有客户端也都会报“CRL has expired”。用 easyrsa gen-crl 重新生成,复制到服务器读取它的位置,并安排好定期续期,避免再次发生。

顺便做好 OpenVPN 服务器加固

升级是添加旧配置所缺设置的好时机:

  • tls-crypt,或为每个客户端使用单独密钥的 tls-crypt-v2,可对控制通道加密并认证,因此服务器不会响应任何没有密钥的人。它能让服务器躲过扫描,并削弱拒绝服务攻击。
  • 控制通道使用 1.2 的最低 TLS 版本。
  • 每位用户独立的证书加第二重验证,这样仅凭复制来的配置文件无法连接。
  • 按组设置防火墙规则,让外包人员的配置文件只能访问一个应用,而不是整个办公室网络。
  • Linux 上 2.6 新增的数据通道卸载,将数据包加密移入内核,在繁忙的服务器上获得更高吞吐量。

每个选项及其当前默认值都列在 OpenVPN 2.6 参考手册中,工作期间值得一直开着。

不会在周一早上造成中断的 OpenVPN 2.6 升级路径

  1. 把当前的服务器配置、密钥和客户端配置文件复制到安全的地方。
  2. 列出所有在用的客户端:操作系统、客户端版本以及归属人。
  3. 在测试实例或另一个端口上构建新配置,并为每种类型各连接一台已更新的客户端。
  4. 在证书或加密算法发生变化的地方签发新配置文件,并向用户发送简短说明,指导他们在自己的设备上完成 OpenVPN 客户端设置。
  5. 在安静的时段切换,并保留旧服务器随时可以回退,直到所有人都已连上。

对于从零开始的 Linux VPN 安装,同样的清单就成了设计方案:现代加密算法、不使用压缩、tls-crypt,以及能够自动续期吊销列表的证书。如果您更愿意把工作交给别人,我们的 OpenVPN 设置服务涵盖证书颁发机构、防火墙规则和客户端配置文件。

常见问题:OpenVPN 2.6 升级

升级后用户需要新的配置文件吗?

只有当他们持有的内容发生变化时才需要:新的证书颁发机构、新证书、tls-crypt 密钥或不同的加密算法设置。去掉压缩通常也意味着要修改配置文件,这也是许多升级最后会给所有人换新配置文件的原因。

如何避免 CRL 再次过期?

在 CRL 有效期之内尽早安排 easyrsa gen-crl,把新文件复制到 crl-verify 所指定的路径,并在下次更新日期临近时发出提醒。当前版本会在文件变化时重新读取,因此无需重启,但该文件必须能被运行 OpenVPN 服务器的用户读取。

过渡期间旧客户端还能继续使用吗?

短时间内可以,方法是在服务器上明确允许它们的加密算法或压缩。请把它当作一个截止期限,而不是永久设置。

升级后客户端连不上,或者有一台多年没人看过的 OpenVPN 服务器?我们的 OpenVPN 安装与配置服务涵盖服务器加固、证书,以及适用于 Windows、macOS、Linux 和移动设备的每用户配置文件;作为一项 VPN 配置服务,它也可以纳入更广泛的网络与 VPN 安全工作,服务于长滩(Long Beach)和洛杉矶(Los Angeles)的办公室。请联系我们,并告知服务器的操作系统版本和您团队使用的客户端版本。