场景与目标

你有一台家里 24h 开机的 NAS(群晖/Unraid/TrueNAS 均可),想在外面用手机安全访问:

不用 frp/花生壳等内网穿透,直接 WireGuard 打回家,全程加密,延迟低。

网络拓扑

手机 (4G/5G/WiFi)
  │
  │  UDP 51820
  ▼
家里光猫 → 路由器 (公网IP)
                │
                │  192.168.1.0/24
                ▼
            NAS (192.168.1.100)
            路由器 WG 端 (10.0.0.1)

第一步:生成密钥对

在线密钥生成器 或本机终端:

# 服务端(家里路由器)
wg genkey | tee server_priv | wg pubkey > server_pub

# 手机端
wg genkey | tee phone_priv | wg pubkey > phone_pub

得到 4 个 key 文件,私钥只存本机,公钥给对方

第二步:服务端配置(家里路由器/小主机)

假设家里路由器跑 WireGuard(OpenWrt/Ubuntu 均可),新建 /etc/wireguard/wg0.conf

[Interface]
PrivateKey = <server_priv 内容>
Address = 10.0.0.1/24
ListenPort = 51820

# 允许转发明细
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT
PostUp = iptables -A FORWARD -o wg0 -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT
PostDown = iptables -D FORWARD -o wg0 -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
# 手机
PublicKey = <phone_pub 内容>
AllowedIPs = 10.0.0.2/32
注意:eth0 换成你路由器实际出口网卡名(用 ip addr 查)。

第三步:手机端配置

手机装 WireGuard 官方 App(iOS/Android 都有),新建隧道:

[Interface]
PrivateKey = <phone_priv 内容>
Address = 10.0.0.2/24
DNS = 192.168.1.1  # 家里的 DNS

[Peer]
PublicKey = <server_pub 内容>
Endpoint = your-home-ddns.duckdns.org:51820
AllowedIPs = 192.168.1.0/24, 10.0.0.0/24
PersistentKeepalive = 25

第四步:PostUp 路由规则

关键在让流量从 WG 接口转发到内网。上面服务端配置已含 iptables 规则,但需确认:

# 开启 IP 转发(永久生效写 /etc/sysctl.conf)
sysctl -w net.ipv4.ip_forward=1

路由器如果是 OpenWrt,还需在 LuCI → 网络 → 防火墙 → 自定义规则加:

iptables -I FORWARD -i wg0 -j ACCEPT
iptables -t nat -A POSTROUTING -o br-lan -j MASQUERADE

第五步:验证连通

  1. 手机开 WG 隧道(滑到 ON)
  2. 手机终端/浏览器访问 http://192.168.1.100:5000(群晖 DSM 端口)
  3. 应能打开 NAS 登录页
  4. 在服务端 wg show 看到 handshake 时间

常见排障

现象原因解决
握手失败UDP 51820 没通路由器端口转发 + 防火墙放行
握手成功但 ping 不通 NASIP 转发未开sysctl net.ipv4.ip_forward=1
能 ping 但打不开网页没 MASQUERADE加 PostUp NAT 规则
4G 下连不上运营商封 UDP换端口如 443/UDP 或 TCP 模式
回家 WiFi 后断AllowedIPs 和家网冲突手机端 AllowedIPs 改更精确

总结:WireGuard 回家是 2026 年最稳的远程访问方案,配置量比 OpenVPN 小一个数量级,性能也好 3-5 倍。关键是把 PostUp 的 iptables 规则写对。