wg-easy vs WireGuard:GUI vs 命令行
要为您完成翻译,我需要您提供要翻译的正文内容(除代码块、URL 之外的文字)。请把文章的文本粘贴在这里,我会按照要求保留源链接并进行简体中文翻译。
Source: …
快速判定
wg‑easy 是大多数自行托管 WireGuard VPN 服务器的用户的更佳选择。它在底层使用完全相同的 WireGuard 协议,但在其上包装了一个简洁的网页 UI 来管理客户端。您可以通过点击来创建、禁用和撤销 VPN 客户端,而无需手动编辑配置文件。
仅在以下情况下才选择原生 WireGuard:需要在受限硬件上获得内核模式的性能、想将 WireGuard 集成到自定义自动化流水线中,或仅仅偏好命令行操作。
这并不是两种不同 VPN 协议的比较——wg‑easy 就是 WireGuard,只是在其上加了一个网页界面。
什么是 WireGuard?
WireGuard 是底层 VPN 协议和内核模块。您通过配置文件(例如 /etc/wireguard/wg0.conf)进行配置,使用 wg genkey 生成密钥,并通过编辑这些文件来管理对等点。它速度快、安全、简洁,但所有管理都是手动完成的。
wg‑easy 是什么?
wg‑easy 是一个 Docker 容器,运行 WireGuard 并添加基于网页的管理界面。您可以通过浏览器创建和管理 VPN 客户端。每个客户端都会得到一个可下载的配置文件和用于移动端设置的二维码。在内部,它生成相同的 WireGuard 配置并管理相同的 WireGuard 接口。
功能比较
| 功能 | WireGuard(原始) | wg‑easy |
|---|---|---|
| VPN 协议 | WireGuard | WireGuard(相同) |
| 客户端管理 | 手动编辑配置文件 | Web UI(创建/禁用/撤销) |
| 移动端二维码 | 使用 qrencode 生成 | 内置 |
| 客户端下载 | 手动从服务器复制 | 一键下载 |
| 客户端流量统计 | wg show 命令 | Web UI 仪表盘 |
| 密码保护 | 不适用 | Web UI 密码 |
| 客户端启用/禁用 | 在配置中添加/删除对等点 | 在 UI 中切换 |
| DNS 配置 | 客户端配置中手动设置 | 可通过环境变量配置 |
| 多服务器支持 | 多个 wg 接口 | 每个容器单实例 |
| 自定义路由规则 | 完全的 iptables 控制 | 基本(通过环境变量) |
| 内核模块支持 | 有(性能最佳) | 有(使用宿主内核模块) |
| 安装方式 | 包管理器 / 内核模块 | 仅 Docker |
| 资源开销 | ~5 MB RAM(仅内核) | ~30‑50 MB RAM(Node.js UI + WireGuard) |
| 自动化/脚本 | 完整 CLI 控制(wg 命令) | 提供 REST API |
| 是否可在无 Docker 环境运行 | 是 | 否(需要 Docker) |
安装概览
WireGuard (raw)
- 安装
wireguard-tools包。 - 生成服务器和客户端的密钥对。
- 创建
/etc/wireguard/wg0.conf。 - 配置 iptables 进行 NAT 并启用 IP 转发。
- 使用
wg‑quick up wg0启动接口。 - 添加客户端:生成新的密钥对,在服务器配置中添加
[Peer]部分,创建客户端配置文件,然后重启接口。
wg‑easy
- 创建使用
wg‑easy镜像的docker‑compose.yml。 - 通过环境变量设置你的公共主机名和管理员密码。
- 运行
docker compose up -d。 - 通过网页 UI 添加客户端(约 10 秒)。
性能与资源使用
资源消耗
| 指标 | WireGuard | wg‑easy |
|---|---|---|
| RAM(空闲) | ~5 MB | ~30‑50 MB |
| CPU(隧道) | 内核级 | 内核级(相同) |
| 磁盘占用 | ~1 MB(配置) | ~100 MB(Node.js + 依赖) |
| 吞吐量 | 最大(内核) | 最大(相同内核模块) |
对 wg‑easy 的管理服务器额外约 25‑45 MB 的 RAM 在现代硬件上可以忽略不计。
许可与社区
| 指标 | WireGuard | wg‑easy |
|---|---|---|
| 许可证 | GPLv2 | 自定义(类似 AGPL,见仓库) |
| GitHub 星标 | 不适用(内核树) | 18 k+ |
| Docker 拉取次数 | 数百万(LSIO 镜像) | 12 M+ |
| 维护者 | Jason Donenfeld / Linux 内核 | 社区(wg‑easy 组织) |
| 文档 | 手册页,WireGuard.com | README + 环境变量 |
| 活跃开发 | 稳定(协议“已完成”) | 活跃(定期发布) |
何时选择哪种
选择原生 WireGuard 如果你:
- 在路由器、嵌入式设备或任何没有 Docker 的系统上运行。
- 需要多个 WireGuard 接口以实现复杂路由。
- 想将 WireGuard 集成到 Ansible/Terraform/脚本中。
- 偏好命令行工具并希望实现极低的开销。
选择 wg‑easy 如果你:
- 想在不手动编辑配置文件的情况下管理 VPN 客户端。
- 需要二维码以快速设置移动客户端。
- 想一目了然地查看客户端连接状态和带宽。
- 已经在其他服务上使用 Docker。
- 需要一个非技术家庭成员也能使用的 UI。
- 想通过一次点击启用/禁用客户端。
结论
wg‑easy 是大多数自托管用户的显而易见的选择。它消除了运行 WireGuard 唯一真正的痛点——客户端管理,同时保留了 100 % 的 WireGuard 性能。适度的 RAM 开销是值得的,因为不必每次需要新 VPN 配置时都 SSH 进入服务器。
如果你在路由器上运行 WireGuard,或在脚本化的基础设施即代码设置中,或在没有 Docker 的设备上,仍然使用原生 WireGuard。对于其他所有人,wg‑easy 让 WireGuard 更加实用。
常见问题
Q: wg‑easy 会影响 VPN 隧道性能吗?
A: 不会。隧道使用相同的 WireGuard 内核模块,性能完全相同。Web UI 只是在上面添加了一个 HTTP 管理层。
Q: 我可以将已有的 WireGuard 密钥导入 wg‑easy 吗?
A: 不能直接导入。wg‑easy 会生成自己的密钥和配置格式。您需要通过 wg‑easy UI 创建新的客户端配置。
Q: 单个 wg‑easy 容器能管理多个 WireGuard 接口吗?
A: 不能。每个 wg‑easy 容器只管理一个接口(例如 wg0)。如果需要多个接口,请使用原生 WireGuard。
Q: 应该如何安全地暴露 wg‑easy UI?
A: 限制访问。将 51821 端口放在带身份验证的反向代理后面,只绑定到 localhost,或仅通过 VPN 暴露。切勿在没有保护的情况下公开管理员 UI。