手上有几台机器——公司一台、家里一台、云上一台——想把它们拉进同一个"内网"?WireGuard 是目前的答案:内核级速度、几百行代码、十分钟组网。这篇覆盖点对点、星型拓扑和内网穿透全套玩法。对比篇见NAT 服务器与内网穿透对比。
一、为什么是 WireGuard
| WireGuard | OpenVPN | 内网穿透(frp 等) | |
|---|---|---|---|
| 速度 | 内核级,接近裸线 | 用户态,慢一截 | 取决于中转 |
| 代码量 | ~4000 行,攻击面极小 | 数十万行 | 看实现 |
| 配置 | 一个配置文件 | 证书 + 多文件 | 服务端客户端 |
| 漫游 | 自动切换端点,无感重连 | 重连慢 | 依赖服务端在线 |
| 定位 | 虚拟组网(L3 VPN) | 虚拟组网 | 端口转发 |
WireGuard 的心智模型:它不"连接服务器",它在你的所有设备间建一张虚拟网卡组成的网——每台设备拿一个 10.x.x.x 的内网地址,互相直连。云上的 NAT 型服务器没有独立公网 IP?没关系,让它当"召集人"(hub),所有设备连它,照样一张网。
二、核心概念:五个词讲明白
WireGuard 的配置只有五个关键词,懂了就会配了:
| 概念 | 说明 |
|---|---|
| 私钥/公钥 | 每台设备一对,wg genkey 生成;公钥公开,私钥绝密 |
| Interface | 虚拟网卡,有一个内网 IP(如 10.10.0.2/24) |
| Peer | 对端设备:它的公钥 + 它的内网 IP(AllowedIPs) |
| Endpoint | 对端的公网地址(IP:端口),没有公网 IP 的设备留空 |
| ListenPort | 本机监听端口,有公网 IP 的填,NAT 后的填不了 |
流量规则:发往某个内网 IP 的流量,WireGuard 查哪台 Peer 的 AllowedIPs 覆盖它,就连谁。
三、实战一:星型组网(最常用)
场景:云服务器(有公网 IP,NAT 型也行,只要端口能映射)当中心,家里电脑、手机、公司电脑全连它,组成 10.10.0.0/24 虚拟内网。
家里电脑 10.10.0.2 ─┐
手机 10.10.0.3 ─┼──> 云服务器 10.10.0.1 (wg0, UDP 51820) <── 有公网,当 Hub
公司电脑 10.10.0.4 ─┘第 1 步:服务器端(Hub)
# 安装(主流发行版都有)
apt install wireguard-tools # Debian/Ubuntu
# 或 yum install wireguard-tools # RHEL/CentOS
# 生成密钥对
wg genkey | tee /etc/wireguard/server_private.key | wg pubkey > /etc/wireguard/server_public.key# /etc/wireguard/wg0.conf
[Interface]
PrivateKey = <服务器私钥>
Address = 10.10.0.1/24
ListenPort = 51820
# 开启转发 + NAT(让虚拟网内的设备能通过服务器上外网)
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -s 10.10.0.0/24 -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -s 10.10.0.0/24 -o eth0 -j MASQUERADE
[Peer]
# 家里电脑
PublicKey = <家里电脑公钥>
AllowedIPs = 10.10.0.2/32
[Peer]
# 公司电脑
PublicKey = <公司电脑公钥>
AllowedIPs = 10.10.0.3/32systemctl enable --now wg-quick@wg0第 2 步:客户端(家里电脑)
# /etc/wireguard/wg0.conf
[Interface]
PrivateKey = <本机私钥>
Address = 10.10.0.2/24
DNS = 10.10.0.1
[Peer]
PublicKey = <服务器公钥>
AllowedIPs = 10.10.0.0/24 # 只走虚拟内网(科学分流),上外网走本地
Endpoint = 服务器IP:51820
PersistentKeepalive = 25 # NAT 保活,关键!Windows/Mac 装官方客户端,导入 .conf 文件即可;手机(iOS/Android)也有官方 App,配置同一个文件,或扫二维码。
第 3 步:验证
wg show # 看 peer 握手没有(latest handshake 应在几秒内)
ping 10.10.0.1 # 通即组网成功
ping 10.10.0.3 # 到另一台客户端也通PersistentKeepalive = 25 必须加:NAT 后面的设备不主动发包,映射几秒到几分钟就过期,加上它每 25 秒保活,映射永不掉。
四、NAT 型服务器当 Hub:完全可行
这是最多人问的:NAT 型云服务器没有独立公网 IP,能当 WireGuard 中心吗?——能,有一个前提。
前提是端口映射:WireGuard 走 UDP 51820,让商家把 外网端口 → 服务器 51820/UDP 映射出来,客户端 Endpoint 填 服务器IP:外网端口 即可。映射操作见NAT 端口映射完全指南。
要注意的三点:
- 确认映射的是 UDP——WireGuard 只用 UDP,映射成 TCP 白费
- 一台 NAT 机只能映射一个 WireGuard 端口,想跑多个实例(不同端口)需要多个映射
- 稳定性看商家:映射丢了的症状是"peer 全部掉线、wg show 里 handshake 变老",需要确认商家的映射保活策略
NAT 型当 Hub 的真实优势:价格比独立 IP 机型省一半以上,而组网场景恰好"吃配置不吃公网 IP"——hub 只需要稳定在线 + 一点点带宽,NAT 型正中下怀。
五、实战二:站点互联(Site-to-Site)
场景:公司内网 192.168.1.0/24 和家里内网 192.168.2.0/24 互通,两边都上云服务器中转。
在两边的网关设备(路由器/常开主机)上装 WireGuard,配置文件只需把对方的网段加进 AllowedIPs:
# 公司侧网关
[Peer]
PublicKey = <服务器公钥>
AllowedIPs = 10.10.0.0/24, 192.168.2.0/24 # 虚拟网 + 对方内网
Endpoint = 服务器IP:51820
PersistentKeepalive = 25服务器侧把两个网段都登记为不同 Peer 的 AllowedIPs,打开 IP 转发,两边内网设备互访 192.168.x.x 即通。零接触改造对方内网——不用改一台员工电脑的路由,流量自动走。
六、实战三:远程访问内网服务
组网后,"访问家里 NAS""连公司内网数据库"就是直连内网 IP 的事:
# 连上 WireGuard 后,直接访问对端内网 IP
ssh admin@192.168.1.10 # 公司内网跳板机
smb://192.168.2.5 # 家里 NAS
mysql -h 192.168.1.20 # 内网数据库这比传统"开端口 + 动态域名"的方案安全一个量级:服务不暴露在公网,只有组网内的设备能访问。配合防火墙只放行 wg0 网卡,见Linux 防火墙配置。
安全红线:WireGuard 的安全全靠私钥。私钥丢了 = 那台设备的身份归别人,第一件事应该是从所有 Peer 里删掉它的公钥,然后重新签发。团队使用要建立密钥管理制度,别在微信里传 .conf 文件。
七、常见问题排查
| 症状 | 原因 | 解决 |
|---|---|---|
wg show 没有 peer | Endpoint 填错 / 防火墙挡 UDP | 核对 IP:端口;云安全组放行 UDP |
| 有 peer 但 ping 不通 | AllowedIPs 没包含对方 | 检查双方 AllowedIPs 是否覆盖彼此 |
| 时通时断 | NAT 映射过期 | 客户端加 PersistentKeepalive = 25 |
| 能连虚拟网但上不了外网 | 服务器没开转发/NAT | 检查 PostUp 的 iptables 规则、net.ipv4.ip_forward=1 |
| 重启后 peers 全丢 | 配置没保存 | 确认用 wg-quick@wg0 服务管理,别手动 wg |
| 两台 NAT 后设备互连失败 | 都没有公网入口 | 双方都连 hub(星型),别直连 |
网络层排查工具见Linux 网络排查工具大全,抓包见Tcpdump 实战。
八、运维清单
- [ ] 私钥文件权限 600,别进 Git(代码泄露防范见Git 仓库安全)
- [ ] 每台设备独立密钥对,别共享配置——踢人时删公钥即可
- [ ]
wg show定期看 handshake 时间,异常即掉线 - [ ] 配置变更走文件 + 服务重启,别手敲
wg set(重启即丢) - [ ] 换设备先加新 Peer 验证,再删旧的——永远先建后删
结语
WireGuard 把"组网"这件事简化到了配置文件级别:星型组网连全家设备、站点互联打通公司家里、NAT 后设备靠 PersistentKeepalive 常在线。对有 NAT 型服务器的用户来说,它还顺带解决了一个哲学问题——没有独立公网 IP,照样能织一张自己的网。
需要组网中枢的服务器,可以看看财富云计算:NAT 型云服务器支持 UDP 端口映射、稳定在线、价格比独立 IP 机型省一半以上——当 WireGuard Hub 这种"要稳定不要公网 IP"的场景,NAT 型刚好对症。
延伸阅读
- Homepage 个人仪表盘:把散落各处的服务收进一个首页
- SSL 证书完全指南:免费证书、自动续期与不过期监控
- 数据备份体系完全手册:从随手拷到 3-2-1,让数据永远丢不了
- 压测与容量规划:上线前就知道你的服务器能扛多少人
- AdGuard Home 内网 DNS:全家去广告、防劫持、内网解析一站解决
- Hugo 静态博客搭建:秒开的博客,部署只要一个目录
- 安全应急响应完全手册:服务器被入侵后,按这个流程走
- 游戏服运营完全手册:从开服到停服,把一台服务器运营成百年老店

[...]}证书自动续期见SSL 证书完全指南,反代细节见Nginx 反向代理实战。暴露面考量:仪表盘会暴露你有哪些服务(信息搜集价值),建议:只在内网/WireGuard 内网用(组网方案)或对外时加 Basic Auth,别裸奔Docker socket 只读挂载已经是权限最小化——绝不给读写权限,那等于把宿主机交出去(Docker 逃逸风险,见Docker 安全加固)六、和其他工具的分工仪表盘生态里各[...]
2026-10-19 回复
[...]netsh advfirewall firewall add rule name="GameRange" dir=in action=allow protocol=UDP localport=26901-26903完整的 Windows 环境准备(远程桌面连接、运行库安装、SteamCMD 用法、开机自启、8 个常见坑)见:《Windows 云服务器开服通用前置教程》→ htt[...]
2026-10-19 回复