SSD Nodes Learn Hosting plans →
指南 Matt Connor作者: Matt Connor

WireGuard vs OpenVPN:自托管 VPN 选哪个?

自托管 VPS 的 VPN 应优先选 WireGuard:约 4,000 行代码、配置约十行、连接不到一秒。仅在 TCP 443、证书颁发机构、密码或二因素认证、Layer 2 桥接等四种需求下考虑 OpenVPN。

简短结论

对于个人在自己的 VPS 上运行 VPN 服务器这一场景,WireGuard 和 OpenVPN 并不是势均力敌的选择:应选择 WireGuard。WireGuard 代码更少,运行在 Linux 内核中,连接只需不到一秒,正常工作的客户端配置大约只有十行。如果以下四项实际需求都与您无关,就不需要 OpenVPN。

这四项需求分别是:绕过只允许 TCP 443 端口的网络限制,接入现有的证书颁发机构,使用密码或第二因素验证指定用户,以及在 Layer 2 层进行桥接。下面的内容将给出支持上述建议的证据,并明确说明每个例外从什么情况下开始适用于您。

WireGuard 为自托管用户胜出

代码库足够小,便于审阅。 WireGuard 项目将其协议实现控制在约 4,000 行代码。算上 OpenVPN 依赖 OpenSSL 执行所有加密操作的部分,OpenVPN 的代码量达到 6 位数。代码规模很重要,因为每一行都是攻击面,而您和审阅者都不可能阅读 100,000 行代码。但 4,000 行可以读完。

它在内核中运行。 自 Linux 5.6 起,WireGuard 已进入主线内核,因此 Ubuntu 24.04 和 Debian 13 都已随系统提供,无需编译。数据包在内核空间中直接加密,无需复制到用户空间进程再复制回来。先执行以下检查:

sudo modprobe wireguard && echo ok

在 KVM VPS 上,该命令会输出 ok。在 OpenVZ 或 LXC 等共享宿主机内核的容器虚拟化环境中,该命令会失败并输出 Operation not supported,因为您无法将模块加载到不属于您的内核中。

无需协商。 WireGuard 只有一套固定的密码套件:数据使用 ChaCha20-Poly1305,密钥使用 Curve25519。不存在可降级的版本,也没有容易配置错误的选项。OpenVPN 会与每个客户端协商密码和 TLS(传输层安全)版本。这种机制提供了灵活性,也带来了配置错误。服务器如果保留 data-ciphers AES-256-GCM:AES-128-CBC,而客户端没有提供更好的选项,就会自动回退到 CBC 密码;日志也不会将较弱的密码标记为问题。如果数据通道卸载可用,OpenVPN 会输出一条提示,说明 CBC 条目已关闭卸载。这只是速度警告,不是安全警告。

端口不会响应。 WireGuard 数据包未通过消息身份验证检查时,会直接丢弃且完全不回复。因此,nmap -sU -p 51820 无法区分 WireGuard 服务器和被防火墙静默丢弃数据包的端口:两者都会返回 open|filtered。只有未经过滤且没有进程监听的端口会暴露自身,因为内核会返回 ICMP 端口不可达,nmap 会将其报告为 closed。TCP 模式下的 OpenVPN 服务器会先完成 TCP 握手,再决定拒绝连接。这足以让扫描器确认该端口上存在服务。使用 tls-crypt 的 UDP 模式 OpenVPN 几乎同样安静,因此这里反对的是在 TCP 上运行 OpenVPN,而不是反对 OpenVPN 本身。

漫游无需额外处理。 WireGuard 根据公钥而不是地址识别对等端。您的笔记本从家庭网络切换到移动热点后,会从新地址发送一次握手,服务器随后更新用于回复的 endpoint。连接不会重新建立,因为之前从未建立持续连接。OpenVPN 也可以通过 float 实现类似功能,但客户端通常会拆除并重新建立完整的 TLS 会话。因此,打开笔记本盖子后,OpenVPN 会出现明显的暂停,而 WireGuard 不会。

2026 年的速度:差距已经缩小

多年来,关于速度的准确说法是:OpenVPN 将每个数据包复制到用户空间,在那里加密,再复制回去;而 WireGuard 始终不会离开内核。如今情况已经不完全如此,忽略这一点的比较已经过时。

OpenVPN 2.7 于 2026 年 2 月发布,支持上游 ovpn 内核模块。该模块已合并到 Linux 6.16 中。这就是 DCO(数据通道卸载):控制通道仍在用户空间中运行,大量数据路径则移入内核,这与 WireGuard 一直采用的方式大致相同。在内核和 OpenVPN 版本都足够新、可以使用该功能时,两者的吞吐量属于同一水平,而不是相差一个等级。检查实际安装的版本:

uname -r
openvpn --version | head -n 1
modinfo ovpn 2>/dev/null | head -n 3

截至 2026 年 10 月,标准 Ubuntu 24.04 LTS 提供的是 OpenVPN 2.6,而不是 2.7;ovpn 模块需要 2.7。在该版本中,只有通过较旧的 openvpn-dco-dkms 软件包才能使用卸载功能。该软件包会针对当前运行的内核构建一个树外模块,因此每次升级内核都必须重新构建。这是 WireGuard 不需要处理的一个额外组件。Ubuntu 26.04 LTS 提供 OpenVPN 2.7.0 和 Linux 7.0 内核,两者都足以支持 ovpn,因此在该版本中,应检查上面的 modinfo 行。

在将 DCO 作为继续使用 OpenVPN 的理由前,请先阅读其限制。它只支持第 3 层隧道,只接受 AEAD 密码(带有关联数据的认证加密:AES-GCM 或 ChaCha20-Poly1305),不支持压缩,并且在服务器上只能与 topology subnet 配合使用。这些限制中的每一项都会削弱 OpenVPN 原本主张的灵活性。经过优化的 OpenVPN,其配置方式已经接近 WireGuard。

不要相信任何人发布的吞吐量数据,包括本页的数据。VPS 的性能上限通常由 CPU 配额或网络配额决定,而不是由协议决定。让 iperf3 通过隧道运行,测量你自己的吞吐量;然后在隧道外再次运行,并比较两次结果。

OpenVPN 仍然适用的场景

您需要通过 TCP 443 端口访问外部网络。 WireGuard 仅支持 UDP,这是有意的设计,也不会增加 TCP 模式。仅按端口号过滤的酒店网络通常会放行配置了 proto tcp-server 和 port 443 的 OpenVPN。但不要将其误认为伪装:OpenVPN over TCP 使用自己的数据包封装,而不是普通的 TLS 会话,因此检查或终止 HTTPS 的企业防火墙或代理仍然可以识别并阻止它。WireGuard 需要使用 wstunnel 或 udp2raw 等封装程序才能通过同一网络,这会增加一个需要运行和及时修补的进程。注意端口冲突:如果该 IP 地址上的 Web 服务器已经占用 TCP 443,其中一个服务就必须改用其他端口。

您已经运行证书颁发机构。 OpenVPN 使用 X.509 证书进行身份验证,因此可以接入您已经运行的 PKI(公钥基础设施)。证书会自动过期;要撤销证书,只需将其加入证书吊销列表,服务器通过 crl-verify 读取该列表。WireGuard 没有证书、过期机制或证书吊销列表。移除对等端需要编辑服务器配置并重新加载。只有 10 个对等端时,这样做没有问题。达到 400 个对等端且有审计要求时,证书模型就能切实减少管理工作。

您需要具名用户,而不只是密钥。 OpenVPN 可以通过 auth-user-pass-verify 或 openvpn-plugin-auth-pam.so 等插件将身份验证交给外部系统,这也是接入 LDAP 或一次性密码二次验证的方式。WireGuard 完全没有用户概念。密钥要么存在于配置中,要么不存在。如果您的要求是“Sara 必须输入手机上的验证码”,WireGuard 本身无法表达这一要求。

您需要 Layer 2,或需要支持某些老旧客户端。 使用 dev tap 的 OpenVPN 可以桥接以太网帧,这对广播协议和老旧局域网游戏很重要。WireGuard 仅支持 Layer 3,并且一直如此。OpenVPN 还提供适用于某些硬件和操作系统的客户端,而这些平台永远不会获得 WireGuard 应用。这两点作为选择依据的重要性都在下降,而且 dev tap 与 DCO 不兼容,因此使用桥接时必须采用较慢的处理路径。

两个方案的实际成本

WireGuard 身份只需执行一条命令。括号很重要,因为它会在密钥生成前设置文件模式:

(umask 077; wg genkey > private.key)
wg pubkey < private.key > public.key

OpenVPN 的等价操作是创建一个由您负责维护的证书颁发机构。只要 VPN 继续运行,您就必须维护它:

sudo apt install -y easy-rsa
make-cadir ~/openvpn-ca
cd ~/openvpn-ca
./easyrsa init-pki
./easyrsa build-ca
./easyrsa gen-req server nopass
./easyrsa sign-req server server

这两份清单都没有偏袒任何一方。CA 提供了过期和吊销机制,但您需要保护一个必须保存多年的私钥,记得续期,并在丢失私钥后重新构建整个体系。如果您不需要这些功能,就等于为没有使用的功能付费。完整的 WireGuard 配置流程包括转发、NAT(网络地址转换),以及可能浪费一下午时间的握手失败排查,详见 在 VPS 上自行托管 WireGuard VPN 的指南。

防火墙需要为每种协议配置什么

WireGuard 只需要一条入站规则,允许 ListenPort 中端口上的 UDP 流量:

sudo ufw allow 51820/udp
sudo ufw status verbose

OpenVPN 默认需要开放 UDP 1194;如果选择该方案,也可以使用 TCP 443。之后,两者都需要启用 IP 转发,并配置源 NAT 规则,因为 Linux 主机会丢弃目标地址不是本机的数据包。这部分配置对两种协议完全相同,也是大多数“隧道已连接但无法访问互联网”问题的来源。如果您不熟悉 ufw,请先阅读 VPS 上的 ufw 防火墙基础知识。还要注意,大多数服务商会在控制面板中提供第二层网络防火墙:如果数据包根本没有到达服务器,您在服务器上添加的规则不会生效。了解端口是什么以及 Linux 如何监听端口,可以更快完成这两项检查。

如何选择:一段话说明

除非您能明确说出 WireGuard 无法满足的具体需求,否则请使用 WireGuard。如果需要通过 TCP 443 绕过网络限制,请在该端口运行 OpenVPN;也可以考虑同时运行两者:它们使用不同端口,可以在同一台服务器上共存,不会发生冲突。如果需要按用户管理账户或添加第二因素,请不要强行让 WireGuard承担这些功能,而应在其上层部署身份管理层。自托管 Headscale 控制服务器底层使用 WireGuard,并增加账户模型、密钥分发和设备审批功能;这些工作在使用原生 WireGuard 时需要您自行处理。

无中断迁移 OpenVPN

不存在转换过程。OpenVPN 的 PKI 不会转换为 WireGuard 密钥,因为 WireGuard 没有可供转换的证书。每个客户端都需要一对新的密钥,生成方式与服务器密钥对相同。

不要直接切换,而应并行迁移。WireGuard 使用 UDP 51820 端口,OpenVPN 使用 1194 端口,两者可以同时运行在同一台服务器上。因此,先启动 wg0,再通过 sudo wg show 确认其状态,检查是否列出了最近的 latest handshake,然后逐个迁移客户端。当 OpenVPN 对等端列表不再变化后,使用 sudo systemctl disable --now openvpn-server@server 停止服务。确认不再需要 CA 文件之前,请保留这些文件,因为删除 CA 后,无法重新构建已撤销客户端的配置。

有一项内容确实无法迁移:用户名和密码账户,以及与其关联的撤销记录。应在关闭旧服务器之前决定这些内容存放在哪里,而不是关闭之后再处理。

FAQ

WireGuard 比 OpenVPN 快吗?

在标准 Ubuntu 24.04 服务器上,是的,而且快很多。原因是 WireGuard 在内核中执行加密,而 OpenVPN 2.6 会将每个数据包交给用户空间进程处理。使用 OpenVPN 2.7 和 Linux 6.16 的 ovpn 内核模块后,数据路径也位于内核中,两者的性能处于同一水平。请使用 iperf3 测量通过隧道的实际性能,不要直接相信博客中的数据,因为在 VPS 上,限制通常来自 CPU 或带宽配额。

WireGuard 可以通过 TCP 443 端口运行吗?

不能单独实现。WireGuard 按设计仅支持 UDP,也没有计划加入 TCP 模式。要穿过只允许 TCP 443 的网络,必须使用 wstunnel 或 udp2raw 等方式将其封装在隧道中;这会要求在两端运行并维护额外进程。如果这是您通常的工作环境,那么在仅按端口过滤的网络中,使用带有 proto tcp-server 和 port 443 的 OpenVPN 会更简单。不过,能够检查 HTTPS 内容的代理仍可能识别并阻止它。

OpenVPN 现在不安全吗?

不是。启用 AEAD 密码(例如 AES-256-GCM)和 tls-crypt 的当前版本 OpenVPN 是可靠的 VPN。WireGuard 的优势在于其他方面:OpenVPN 包含更多代码和更多选项,因此管理员配置错误的方式也更多。选项越少,错误配置的可能性越低。

在 VPS 上部署个人 VPN,应该选择哪一个?

WireGuard。每台设备使用一对密钥,一个约 10 行的配置文件,只需开放一个 UDP 端口,并且握手会在您察觉之前完成。只有在您经常从阻止 UDP 的网络连接,或者必须接入现有的证书颁发机构或用户目录时,才选择 OpenVPN。