为全球中文用户,精选值得用的数字资源独立编辑 · 透明推荐
RANGKA JOURNAL · 2026.10.31

WireGuard 异地组网入门:家里 NAS、VPS 和手机连成一个内网,业务端口不用再暴露公网

让卡优选编辑 · 依据公开资料整理

WireGuard 异地组网入门:家里 NAS、VPS 和手机连成一个内网,业务端口不用再暴露公网(AI 概念图)

家里有台 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 解析即可。另外,隧道本身只解决“连通”和“加密传输”,设备上的服务仍要设好自己的账号密码,别因为“在内网里”就裸奔。

参考资料

📢 订阅让卡优选 Telegram 频道,第一时间获取 VPS 优惠、免费资源与注册福利推送。

资料核查:2026年10月31日。本文根据公开资料独立整理撰写;封面为 AI 生成的概念插画。

内容仅供信息参考,具体条件以官方最新说明为准。编辑与商业说明 →