家里有台 NAS,办公室有台电脑,出差还带着手机,再加一台境外 VPS——四台设备各在一个网络里,想互相访问怎么办?最常见的做法是把 NAS 的管理端口、SSH 端口一个个映射到公网,结果端口扫描器天天来敲门。更干净的做法是反过来:不暴露任何业务端口,只用 WireGuard 把这几台设备连成一个私人内网,内网地址互通,公网只留一个 UDP 端口。
WireGuard 是 Linux 内核里的 VPN 实现,配置只有十几行:每台设备一对密钥,互相交换公钥就算建好了信任关系,没有证书、没有复杂的协商流程。本文用一台有公网 IP 的 VPS 做中继,手把手搭一个可用的异地组网。
准备工作
- 一台有公网 IP 的 VPS(当组网中继,配置不用高,1 核 1G 足够);选购思路可参考本站的搬瓦工 CN2 GIA 选购指南,关键是看有没有公网 IP、是否放行 UDP 端口。
- 各设备安装 WireGuard:Ubuntu/Debian 用
apt install wireguard,Windows、macOS、iOS、Android 都有官方客户端。 - 规划一个隧道网段,避开家里路由器常用的 192.168.0.0/24、192.168.1.0/24,本文用 10.6.0.0/24:中继 10.6.0.1,设备依次取 10.6.0.2、10.6.0.3……
- 云厂商安全组和系统防火墙放行 UDP 51820,注意是 UDP,不是 TCP。
第一步:中继端生成密钥并写配置
在 VPS 上执行:
apt update && apt install -y wireguard umask 077 wg genkey | tee /etc/wireguard/privatekey | wg pubkey > /etc/wireguard/publickey cat /etc/wireguard/publickey
记下输出的公钥,后面客户端配置要用。然后新建 /etc/wireguard/wg0.conf:
[Interface] Address = 10.6.0.1/24 ListenPort = 51820 PrivateKey = 这里填 /etc/wireguard/privatekey 的内容 PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
注意把 eth0 换成 VPS 实际的外网网卡名(可用 ip route get 1.1.1.1 查看)。再开启 IP 转发:
echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/99-wireguard.conf sysctl -p /etc/sysctl.d/99-wireguard.conf systemctl enable --now wg-quick@wg0
第二步:给每台设备建密钥和客户端配置
以家里 NAS(Linux)为例,同样先生成一对密钥:
umask 077 wg genkey | tee client-privatekey | wg pubkey > client-publickey cat client-publickey
把这台设备的公钥加到中继的 wg0.conf 末尾(每台设备一段 [Peer],地址不重复):
[Peer] PublicKey = 这里填该设备的公钥 AllowedIPs = 10.6.0.2/32
改完重启中继隧道:systemctl restart wg-quick@wg0。然后在设备上写客户端配置 /etc/wireguard/wg0.conf:
[Interface] PrivateKey = 这里填该设备的私钥 Address = 10.6.0.2/24 DNS = 10.6.0.1 [Peer] PublicKey = 这里填中继的公钥 Endpoint = 中继的公网IP:51820 AllowedIPs = 10.6.0.0/24 PersistentKeepalive = 25
启动并设开机自启:systemctl enable --now wg-quick@wg0。手机和平板更简单:官方 App 里新建隧道、扫码或手动粘贴同样的配置即可;生成二维码可用 apt install qrencode && qrencode -t ansiutf8 < 客户端配置文件。
关于 AllowedIPs 的关键区别要先讲清:客户端写 10.6.0.0/24,只有访问内网的流量走隧道,正常上网不受影响;如果写成 0.0.0.0/0,全部流量都会经由中继转发——除非你本来就想让这台设备经 VPS 出网,否则别这么写。
第三步:验证连通
wg show ping 10.6.0.1 curl http://10.6.0.2:5000
wg show 能看到 peer、最近一次握手时间和传输字节数,说明隧道已建立。之后访问家里 NAS 就不用再记公网 IP 和映射端口,直接用内网地址,例如 http://10.6.0.2:5000 打开 NAS 管理页;内网服务只监听隧道地址,公网扫描器连端口都看不到。
常见坑:按这个顺序排查
- 握手始终不成功:先查 UDP 51820。云厂商安全组、VPS 系统防火墙(ufw/firewalld)都要放行,且协议是 UDP;只放 TCP 是最常见的错。
- 能握手但 ping 不通:多半是中继没开 IP 转发,或者 PostUp 的 NAT 规则没生效;按第一步重新核对
sysctl net.ipv4.ip_forward的输出是否为 1。 - 内网地址打不开服务:服务本身可能只绑定了 127.0.0.1 或局域网地址,改成监听 0.0.0.0 或隧道地址 10.6.0.x 再试。
- 家里网段和隧道网段冲突:如果家里路由器也是 10.6.0.0/24,路由会乱;换个冷门段,例如 10.66.0.0/24,重新分配地址。
- 手机切 Wi-Fi 后断连:家用宽带、手机网络都在 NAT 后面,NAT 映射过期后中继无法主动联系客户端;客户端配置里的
PersistentKeepalive = 25就是每 25 秒发一次保活包,别删掉。 - 个别网络下丢包严重:尝试把 MTU 从默认的 1420 调低,例如在 [Interface] 里加
MTU = 1280,改完重启隧道。 - 私钥泄露处理:私钥文件权限保持 600,不要截图发到群里、不要贴到公开文档;每台设备独立一对密钥,万一某台设备丢失,只需在中继删掉对应的 [Peer] 段并重启,其余设备不受影响。
FAQ
每台设备都需要公网 IP 吗?不需要。只有中继需要公网 IP 和放行的 UDP 端口;家里、办公室、手机都在 NAT 后面也能接入,因为是它们主动向中继发起握手。
和 frp 内网穿透有什么区别?frp 是把某个端口转发到公网,访问仍走公网入口;WireGuard 是把设备连进同一个虚拟内网,服务本身不暴露,访问控制靠隧道地址和防火墙,思路不同。
手机长期开着耗电吗?WireGuard 本身很轻量,日常待机几乎无感;只有持续传数据时才产生相应流量,保活包每 25 秒一个,开销可以忽略不计。
一台设备能同时加多个隧道吗?可以,wg0、wg1 分开配置即可,但要注意各隧道的网段不要重叠。
能用它访问家里的全部内网设备吗?可以,但要在中继的 PostUp 里做好转发、并在客户端的 AllowedIPs 里加上家里局域网段;同时建议只放行确实需要的网段,别一股脑把整个内网暴露给所有接入设备。
边界与注意事项
本文方案只用于连接你自己拥有或管理的设备,组网行为请遵守所在地法律法规;中继 VPS 的公网 IP 一旦更换,所有客户端的 Endpoint 都要同步改掉,建议给中继绑定一个域名再填 Endpoint,换 IP 时只改 DNS 解析即可。另外,隧道本身只解决“连通”和“加密传输”,设备上的服务仍要设好自己的账号密码,别因为“在内网里”就裸奔。
参考资料
- WireGuard 官网:协议介绍、安装方式与快速入门
- 搬瓦工 CN2 GIA 选购指南:中继 VPS 的机房与套餐选择参考
📢 订阅让卡优选 Telegram 频道,第一时间获取 VPS 优惠、免费资源与注册福利推送。
资料核查:2026年10月31日。本文根据公开资料独立整理撰写;封面为 AI 生成的概念插画。



