外观
安全地远程访问:WireGuard、Tailscale 与反向代理
出门在外想给虚拟机开个机、看一眼备份状态,第一反应常常是在路由器上把 8006 端口转发到公网。这篇讲为什么不该这么做,以及三种更安全的替代方案。
不建议把 8006 端口直接暴露到公网
- 影响范围:8006 是 PVE 的管理入口,一旦暴露,全网的扫描器和暴力破解脚本都会找上门;一次账号或漏洞层面的失守,影响的是这台机器上的全部虚拟机和数据。
- 前置条件:本文假设你现在没有在路由器上做 8006(或 22)到公网的端口转发。如果已经做了,先把这条规则删掉,再按下文任选一种方案重新搭建访问路径。
- 怎么回退:三种方案都不需要改动 PVE 本身的端口配置,出问题直接停用对应的 VPN 服务或反向代理容器/虚拟机即可,不影响 PVE 正常运行;唯一要小心的是回退后确认端口转发规则确实被删除,而不是留了一条没人记得的规则。
真正需要临时应急访问、又实在没有条件搭 VPN 时,退而求其次的做法也应该是限制来源 IP 的端口转发,而不是对所有人开放,参考宿主机加固里限制 pveproxy 来源的方法。
为什么需要它
管理界面暴露在公网上的风险不是「万一」,而是「一定会」被扫描到——公网上几乎所有开放端口都会在几分钟到几小时内被自动化工具发现。VPN 或反向代理把「认证」这一步挪到了 PVE 之外的另一层,即使 PVE 本身出现漏洞,攻击者也要先突破这一层。
开始之前
- 确认家里的公网出口是固定 IP、还是会变的动态 IP(决定要不要配动态 DNS)。
- 三种方案都不需要改动 PVE 的证书或端口设置,配好之后照常通过内网地址访问 Web UI。
- WireGuard 和第三方 VPN 产品,选哪个看你愿意自己维护多少东西;反向代理适合已经有公网域名、想给固定的人提供访问的场景。
三种做法对比
| 做法 | 适合 | 优点 | 代价 |
|---|---|---|---|
| WireGuard | 愿意自己搭建和维护 VPN | 开源、协议简单、性能好,完全自己掌控 | 需要一个公网可达的入口(路由器转发一个 UDP 端口,或云上有公网 IP 的跳板机),自己管密钥 |
| Tailscale(或同类产品) | 想要零配置的组网体验 | 基于 WireGuard,NAT 穿透做得好,装完基本不用管 | 第三方托管服务,账号体系、连接协调都依赖对方服务器;具体免费额度和付费层级以官方定价页为准,本站不做结论 |
| 反向代理 + 域名 | 已有公网域名,想给多人一个统一入口 | 能配真实证书,访问路径统一 | 反代本身也是暴露在公网的服务,必须放在 VPN 之后或额外加认证,否则等于换了个方式暴露管理界面 |
Tailscale 是第三方项目
Tailscale(以及 ZeroTier、Netmaker 等同类产品)不是 Proxmox 官方产品,是构建在 WireGuard 协议之上的商业化组网服务。使用前请看清楚它的隐私政策和计费方式,本站不对具体价格和免费额度下结论,以官方页面为准。
操作步骤
方式一:自建 WireGuard
在宿主机、一台专门的路由 LXC/虚拟机,或者公网上一台便宜的跳板机上安装 WireGuard,建立点对点隧道。以官方软件源安装为准,基本思路:
- 服务端(有公网可达能力的一端)生成密钥对,开放一个 UDP 端口(默认
51820,可自定义)。 - 客户端(你的笔记本、手机)也生成一对密钥,把公钥加进服务端的
[Peer]配置。 - 隧道建立后,客户端会获得一个隧道内网 IP,用这个 IP 段访问 PVE 的管理地址,而不是公网 IP。
PVE 本身不需要知道 WireGuard 的存在
WireGuard 只负责把你的设备接入内网,PVE 的 Web UI 配置完全不用改,继续监听内网地址即可。如果 WireGuard 跑在单独的路由设备或跳板机上,PVE 甚至感知不到这层网络的存在。
方式二:Tailscale 或同类组网服务
在能访问的一端(比如一台 LXC 容器,参考反向代理容器类似的做法专门起一个网络容器)安装对应客户端并登录账号,设备会出现在这个服务的管理面板里,获得一个专属的隧道地址。装好之后用这个地址访问 PVE。
别把客户端直接装在 PVE 宿主机上
能装的话优先装进一台独立的 LXC 容器或虚拟机,而不是宿主机本身——这样升级客户端软件、排查它自身的问题都不会碰到 PVE 的系统环境。
方式三:反向代理 + 域名(进阶,且仍需前置 VPN 或强认证)
有公网域名、想给团队一个统一的 https://pve.example.com 入口时,可以在已经在 VPN 内网里的一台机器上放 Nginx 之类的反向代理,转发到 PVE 的 8006。官方 Wiki 有现成的 Nginx 反代示例,需要注意:
- console 使用 WebSocket,Nginx 配置要带上
proxy_http_version 1.1、Upgrade、Connection "upgrade"这几个头,否则控制台连不上。 - 反代证书用真实域名证书(ACME 或已有证书),PVE 后端那一跳可以继续用自签证书,靠反代做一次校验。
- 反代本身如果直接挂在公网上,等于把管理入口换了个地址重新暴露,仍然建议只允许 VPN 内网访问这个反代地址,或者在反代前再加一层独立于 PVE 的认证(如 OAuth2 代理)。
检查结果
- 用手机切到移动数据网络(脱离家庭 WiFi),确认能通过 VPN 或反代地址访问 PVE,且直接访问公网 IP 的 8006 端口无法连通。
- 检查路由器的端口转发列表,确认没有遗留任何指向 8006 或 22 的规则。
- 可以用在线端口扫描工具或云端主机对着自己的公网 IP 扫一次常用端口,确认 8006/22 没有暴露。
常见问题
WireGuard 握手不上。 检查 NAT 类型是否支持穿透,确认 UDP 端口确实转发正确;对称型 NAT 环境可能需要一台公网可达的中转服务器。
手机切换网络后 Tailscale 连不上内网设备。 多数是子网路由 (subnet router) 没有正确广播,检查对应设备是否把内网网段加入了共享路由。
反代能打开页面,但控制台黑屏或连不上。 检查 WebSocket 相关的头是否配置齐全,这是最常见的反代 + PVE 控制台问题。
动态 IP 导致外部入口经常变。 给公网入口配一个动态 DNS 服务,客户端连域名而不是 IP。