WireGuard 组网笔记:把手机、NAS 和 VPS 缝成一个内网
背景:宽带是大内网,没有公网 IPv4;IPv6 有但公司网络和手机热点环境经常不靠谱。需求就一句话:在外面能连回家里的 NAS 和 jellyfin,顺带让 VPS 和家里互通,方便备份。试过 frp 逐端口映射、ZeroTier、Tailscale,最后落在最朴素的方案上:自建 WireGuard,VPS 当中心节点。
拓扑
手机 (蜂窝/公司Wi-Fi)
│ wg
▼
VPS (公网 IPv4) ◄── wg ── 家里 N100 (运营商内网,主动拨出)
│
└── 其他零散设备(笔记本等)
星型而不是网状。家里没有公网地址,所有跨端流量都经 VPS 转发,带宽上限就是 VPS 的出口带宽——小鸡 30M,看 1080p 够用,4K 想都别想。
配置
VPS 侧(10.66.0.1):
[Interface]
Address = 10.66.0.1/24
ListenPort = 51820
PrivateKey = (VPS 私钥)
# 不开 NAT 转发,纯内网互联,不需要 PostUp MASQUERADE
[Peer] # 家里 N100
PublicKey = (N100 公钥)
AllowedIPs = 10.66.0.10/32
PersistentKeepalive = 25
[Peer] # 手机
PublicKey = (手机公钥)
AllowedIPs = 10.66.0.20/32
家里 N100(10.66.0.10):
[Interface]
Address = 10.66.0.10/24
PrivateKey = (N100 私钥)
[Peer]
PublicKey = (VPS 公钥)
Endpoint = vps.example.com:51820
AllowedIPs = 10.66.0.0/24
PersistentKeepalive = 25
要点只有两个:被动端必须 PersistentKeepalive = 25 保 NAT 会话;AllowedIPs 只写隧道网段,不做全局代理,避免手机流量全走 VPS。
MTU 踩坑
配完当天一切正常,第二天手机用公司 Wi-Fi 连回家,小文件没问题,大文件传输卡死在第一个 GB。典型的 MTU 黑洞:公司网络出口是 PPPoE,有效 MTU 1452,而 WireGuard 默认 1420 是假设底层 1500。PPPoE(1492→1452 这段链路有二次隧道) 再套 WG 头就炸了。把各端 MTU 统一降到 1380 后稳定:
[Interface]
MTU = 1380
排查工具很简单:ping -f -l 1400 10.66.0.1 从大到小试,找到不丢包的最大值再减 28。
用了三个月的感受
比 ZeroTier/Tailscale 少了打洞失败的玄学报错,比 frp 少了每加一个服务改一次配置的烦躁。VPS 上 WG 进程内存占用 6MB。如果说后悔,就是后悔没早两年这么干。