wg-easy 部署:限制管理入口、撤销设备与备份恢复

wg-easy 部署:限制管理入口、撤销设备与备份恢复

Kevin Wu
2026年10月11日· 8 分钟阅读

wg-easy 部署是在 WireGuard 外增加管理界面,主机安全、路由和恢复仍由你负责。本教程把界面放在 SSH 通道后,为每台设备建立独立身份,并把撤销记录纳入恢复流程。

关键要点

  • 对外发布隧道端口,管理端口只绑定主机回环地址。
  • 设备配置及其二维码都含有秘密,不能当作普通图片分享。
  • 撤销、重启后检查新流量,不凭绿色指示判断成功。
  • 先关闭业务入口,再恢复数据并重放后续撤销记录。

wg-easy 部署适合你的维护方式吗?

先按自建责任清单确定更新、凭据、防火墙和退役的负责人。WireGuard 网页管理界面方便统一创建设备,但不安全的备份或导出也可能泄露全部设备秘密。授予管理权前,先理解WireGuard 的公钥身份模型。

如果只需要日常互联网出口,不想维护服务器,可先比较租用 VPS 与使用托管 VPN 的责任。若实际任务是管理 Xray 入站,则参照限制管理入口的 3x-ui 流程;其凭据和恢复数据不同,不能当作 WireGuard 的另一种界面。

适用范围与证据: Ubuntu 24.04 LTS、带 Compose 插件的 Linux Docker Engine、wg-easy v15.4.0,以及另一台获授权的 WireGuard 客户端。本文依据来源制作,作者未完成端到端部署或性能实测,不提供冒充观察结果的截图或终端输出。固定版本是操作基线,不代表宣称它是最新版。[1]

步骤 1:准备主机和独立恢复通道

选择有公网入口的专用主机,或已获授权的上游 UDP 端口映射。确认镜像支持主机架构、Linux 内核支持 WireGuard。本教程不涵盖工作站上的 Docker Desktop 网关。按 Docker 官方发行说明安装 Engine 与 Compose,并检查版本。

私下记录原有接口、路由、DNS、防火墙管理者、Docker 已发布端口和云安全组。实际建立一条新的 SSH 连接,并确认提供商恢复控制台可用。不要把管理连接改到即将建立的隧道上。

预留 UDP 51820 和主机 TCP 51821;已有占用时停止。把 Compose 桥接子网与主机、客户端和局域网路由比较,排除冲突。默认私有 IPv6 桥接网不证明公网 IPv6 出口有效。本次有限 IPv4 验证应使用没有可用 IPv6 默认路由的受控客户端;否则先设计并验证双栈覆盖,不要为了通过检查关闭共享机器的 IPv6。

步骤 2:启动前限制 WireGuard 网页管理界面

下载并阅读选定版本的 Compose,保留相互配套的卷、能力、网络及转发设置,不混入 v14 的环境变量。上游文件会发布两个服务端口,因此必须明确修改管理端口。[2]

sudo install -d -m 700 /etc/docker/containers/wg-easy
sudo curl --fail --show-error --location \
  https://raw.githubusercontent.com/wg-easy/wg-easy/v15.4.0/docker-compose.yml \
  -o /etc/docker/containers/wg-easy/compose.yaml
sudoedit /etc/docker/containers/wg-easy/compose.yaml

在已有 wg-easy 服务内替换以下对应字段。这只是片段,不是完整 Compose;保持原有缩进和其它必要设置,包括 NET_ADMIN 与文档要求的模块处理。不要追加 privileged,也不挂载 Docker socket。

image: ghcr.io/wg-easy/wg-easy:15.4.0
environment:
  - INSECURE=true
ports:
  - "51820:51820/udp"
  - "127.0.0.1:51821:51821/tcp"
restart: "no"

INSECURE=true 允许这个受限界面使用 HTTP,不会关闭 WireGuard 认证,也不授权公开明文管理。本方案中浏览器到服务器的路径由 SSH 保护,不能改用公网 HTTP 管理地址。将来若需要公开网页入口,应另行设计认证和 HTTPS。[4]

项目目录保持仅 root 可访问。下面在 sudo 权限内显式指定 Compose 文件,普通 sudo 管理员无需进入该目录。[7]

通过提供商防火墙及实际负责主机/Docker 策略的管理者放行 UDP 51820,不开放公网 TCP 51821,IPv6 也一样。Docker 发布流量可能绕过人们预期保护普通主机服务的 UFW 规则,单独一条 UFW deny 不足以证明限制成立。不要关闭 Docker 防火墙编程或清空规则表。[3]

sudo docker compose -f /etc/docker/containers/wg-easy/compose.yaml config --quiet
sudo docker compose -f /etc/docker/containers/wg-easy/compose.yaml pull
sudo docker compose -f /etc/docker/containers/wg-easy/compose.yaml up -d
sudo docker compose -f /etc/docker/containers/wg-easy/compose.yaml ps
sudo docker compose -f /etc/docker/containers/wg-easy/compose.yaml port wg-easy 51821

管理映射应显示 127.0.0.1:51821。若出现通配地址或其它地址,立即停止容器,在初始化前修正文件。初次验收使用 restart: "no",完成后面的检查后再启用自动重启策略。

步骤 3:经 SSH 初始化并创建一台设备

在管理工作站替换下列大写占位符。信任文件必须包含经过独立核验的主机密钥;密钥不匹配应停止,不能关闭校验。工作站本地 51821 也须空闲。

ssh -N -T -o ExitOnForwardFailure=yes -o StrictHostKeyChecking=yes \
  -o UserKnownHostsFile=/PATH/TO/VERIFIED_KNOWN_HOSTS \
  -L 127.0.0.1:51821:127.0.0.1:51821 ADMIN@SERVER_IP

保持终端运行,浏览 http://127.0.0.1:51821。用独立管理员名称和强密码完成首个用户设置,选择新配置,填写公网隧道入口与 UDP 51820,随后在接口/客户端设置中确定 DNS 和路由。不要把回环地址填成设备 endpoint。官方设置说明区分了新配置与旧安装导入。[5]

新建一台设备,使用能够对应所有者和用途的清晰名称,私下把导出的配置交付到该设备。不同人员不要共用一个 peer 文件,不将它粘到聊天中,不公开二维码。设备与公钥的对应清单应和私钥分开保管。

用于 IPv4 互联网出口时,检查生成配置的 AllowedIPs 是否包含 0.0.0.0/0,并确认 DNS 可达。客户端路由不是服务器端访问控制,也不意味着 VPS 能访问任意私有局域网。确认 endpoint、路由、地址分配和 DNS 符合实际拓扑后再导出。

步骤 4:分别验证访问、流量和拒绝

连接前私下记录客户端原出口,连接新设备并产生新请求。在确实使用 WireGuard 接口的浏览器中核对可见出口 IP,预期 IPv4 应与服务器已知出口一致,同时考虑提供商 NAT。

sudo docker compose -f /etc/docker/containers/wg-easy/compose.yaml exec wg-easy wg show wg0
sudo docker compose -f /etc/docker/containers/wg-easy/compose.yaml restart wg-easy

产生新流量后查看握手时间和传输计数。过去的握手只证明过去发生过交换,不能证明当前请求经过隧道。不要把公钥和入口地址放进共享日志。身份验证失败时,按WireGuard 密钥不匹配的排查顺序比较目标 peer,而不披露任何私钥。

读者检查预期条件失败时处理
获授权外部主机访问公网管理地址TCP 51821 无管理连接停容器,检查 Docker 绑定及两种地址族
经 SSH 的新浏览器尚未登录无法执行特权面板操作停止设置,调查认证并移除匿名访问
有效设备发起新互联网请求新握手、计数增加、出口正确区分入口/UDP 与转发、NAT、DNS、路由
分别进行 DNS 和应用 UDP 检查解析路径正确,受控 UDP 请求成功独立排查,不以浏览器 TCP 成功代替
断开隧道实际回退符合明确策略不宣称断线保护,必要时另行设计并验证

用自己控制的 DNS 测试检查实际解析路径,另用获授权 UDP 应用验证 UDP。HTTPS 浏览不能代替 UDP 检查。本文没有提供客户端断线保护,全隧道配置断开后可能恢复普通网络,不要拿敏感业务探索这种行为。

步骤 5:撤销设备并制作 wg-easy 备份

保留第二台获授权设备作为对照。在面板禁用或删除第一台,保存变更,确认其公钥不再是运行态接受的 peer。保留旧客户端配置并强制产生新流量,预期不能完成新的有效握手或转发请求。确认对照设备仍能工作,再重启容器,重复两边的检查。

把撤销公钥和日期写进独立于被替换备份的私有台账。删除自己客户端上的文件,无法撤销另一台设备已有的副本;面板截图也不能证明当前接口和下次重启都遵守撤销。

停止容器后制作一致备份。下面带日期的目标目录必须尚不存在,下一份快照应换日期或标签;每条命令确认成功后才继续。复制失败时保留源卷,有意识地恢复服务,不能把失败副本算作可恢复备份。

sudo docker compose -f /etc/docker/containers/wg-easy/compose.yaml stop wg-easy
sudo docker compose -f /etc/docker/containers/wg-easy/compose.yaml cp wg-easy:/etc/wireguard /root/wg-easy-backup-20261011
sudo chmod -R go-rwx /root/wg-easy-backup-20261011
sudo cp /etc/docker/containers/wg-easy/compose.yaml /root/wg-easy-compose-20261011.yaml
sudo chmod 600 /root/wg-easy-compose-20261011.yaml
sudo docker compose -f /etc/docker/containers/wg-easy/compose.yaml start wg-easy

需要整个 /etc/wireguard 持久化目录,包括数据库和生成的密钥。同时保留 Compose、镜像版本及防火墙/恢复通道清单。对异机副本加密并限制访问,检查归档能够读取;复制或列出文件都不能证明恢复成功。

恢复演练先在提供商侧关闭隧道入口,使用专用替代主机或隔离实例。重建同版本,在服务停止时恢复持久化目录及原有所有权、权限,管理界面继续只绑定回环地址。不要往运行中的数据库合并文件,也不要覆盖唯一幸存的备份。

入口关闭时启动,先重放快照之后全部撤销,再核对设备清单。随后只短暂允许获授权测试客户端,重复有效/失效身份检查,重启后再次验证。恢复后已撤销身份重新可用属于恢复失败:关闭入口,从持久化和运行态移除该身份,重新验收后才能恢复正常开放。

步骤 6:找回管理入口或退役

SSH 正常而管理员密码丢失时,在获授权主机使用文档规定的交互式重置。不要把新密码放进命令参数或记录输入。[6]

sudo docker compose -f /etc/docker/containers/wg-easy/compose.yaml exec -it wg-easy cli db:admin:reset

界面故障时,经提供商控制台只检查本 Compose 项目的配置和日志,恢复最后已知正确配置,不通过公开 UI 绕过问题。无法安全恢复管理通道时,保持业务入口关闭并停止后续修改。

退役时先关闭本部署 UDP 入口、停止容器,执行 sudo docker compose -f /etc/docker/containers/wg-easy/compose.yaml down;备份保留策略未解决前不带 -v。撤销导出的身份,只移除本项目的提供商规则和预留资源,检查残留监听,并确认新的 SSH 连接及原有服务可用。数据卷须在明确决定保留策略后再删除;停止容器不会停止 VPS 计费。

总结

  • 分开管理通道、隧道、设备清单和撤销台账。
  • 新流量与负向验证通过后才启用自动重启。
  • 可恢复备份必须保留有效设备,也必须保持现有拒绝状态。

常见问题

面板会替代 WireGuard 密钥吗?

不会,每台设备仍然需要独立 WireGuard 身份。面板只是管理配置并简化导出,因此更应保护管理员入口和导出资料。

密码足够复杂就能公开 UI 吗?

强密码不能代替受控管理入口。本方案只允许经 SSH 到回环地址的 HTTP 访问,不提供公网管理监听。

为什么 UFW 显示拒绝,容器端口仍可达?

Docker 的转发和端口发布可能不经过普通主机服务使用的 UFW 路径。应核对真实 Docker 绑定及提供商防火墙,不能只看 deny 记录。

有握手是否就证明互联网出口成功?

握手只证明某一时刻的 peer 交换。还要分别检查新流量、可见出口、DNS、UDP 和断连行为,才能判断完整路径。

恢复备份会把已撤销设备带回来吗?

如果快照早于设备删除,就可能复活旧身份。应保留独立撤销台账,在入口关闭时重放后续变更,再进行拒绝验证。

所有设备能共用一个导出文件吗?

应使用独立身份,丢失一台设备时才可以只撤销它,而不替换其它设备凭据。共用文件也会破坏设备清单与流量归属。

作者是否完成端到端部署实测?

本文不宣称作者已完成端到端实测。命令和预期条件是依据官方资料设计的读者验收流程,请记录自己获授权环境中的实际结果。

来源:

  1. wg-easy v15.4.0 — https://github.com/wg-easy/wg-easy/releases/tag/v15.4.0
  2. wg-easy v15.4.0 Compose — https://github.com/wg-easy/wg-easy/blob/v15.4.0/docker-compose.yml
  3. Docker — Packet filtering and firewalls — https://docs.docker.com/engine/network/packet-filtering-firewalls/
  4. wg-easy — No Reverse Proxy — https://wg-easy.github.io/wg-easy/latest/examples/tutorials/reverse-proxyless/
  5. wg-easy v15.4.0 — Setup — https://github.com/wg-easy/wg-easy/blob/v15.4.0/docs/content/guides/setup.md
  6. wg-easy v15.4.0 — CLI — https://github.com/wg-easy/wg-easy/blob/v15.4.0/docs/content/guides/cli.md
  7. Docker — Compose CLI — https://docs.docker.com/reference/cli/docker/compose/

Sources checked 2026 年 10 月 11 日。


延伸阅读:

开启 3 天免费试用

注册即可免费体验全部高级功能。

*仅限新用户;每位用户只能获得一次试用。

wg-easy 部署:限制管理入口、撤销设备与备份恢复 | AethoVPN