家庭访问是一项私有服务,而不是第二个上网出口。WireGuard 终止在路由器后面的 Linux 主机上,路由器保留原有职责,笔记本只把家庭网段送进隧道。由谁转发、由谁终止,是后面每条规则都依赖的决定。这个分工一旦弄错,你就要去调试自己从没打算添加的 NAT。

确定谁来转发、谁来终止

路由器负责公网入口:它接收 UDP 包并交给 Linux 主机。那台主机负责 WireGuard 监听和进入 LAN 的转发决定。实践中,映射把 UDP 51820 送到 192.168.50.10,应用自己的端口保持关闭。把角色分开,防火墙规则就能保持简短。

在创建接口之前先写好地址规划。路由器 192.168.50.1,网关 192.168.50.10,服务 192.168.50.20,隧道 10.77.0.0/24,网关为 .1,笔记本为 .2。隧道网段不能与笔记本已经可达的网络重叠,否则 目标会变得含糊。运营商级 NAT 或上游路由器可能挡住入站访问,任何本地端口转发都修不好。

交换密钥,然后确定 AllowedIPs 的大小

为每个端点单独生成一对密钥,并且只通过可信渠道传递公钥。网关的 peer 条目只放笔记本的隧道源地址,因为家庭 LAN 在网关后面,而不在笔记本后面。把 LAN 写进那个条目,描述的是你并没有搭建的拓扑。

[Interface]
Address = 10.77.0.2/32
PrivateKey = LAPTOP_PRIVATE_KEY_BASE64

[Peer]
PublicKey = HOME_PUBLIC_KEY_BASE64
Endpoint = home-vpn.example.com:51820
AllowedIPs = 192.168.50.0/24, 10.77.0.1/32

AllowedIPs 是家庭网段加上网关的隧道地址,绝不是 0.0.0.0/0,这样日常浏览仍走本地路径。只保留一个配置负责人,永远不要把同一个接口再挂到第二个网络管理器上。

回程路由才是人们常漏掉的部分

这个设计保留笔记本的 10.77.0.2 源地址,而不用网关做地址伪装,所以家庭设备必须知道怎么回包。在家庭路由器上为 10.77.0.0/24 添加静态路由,下一跳为 192.168.50.10,并读一读 wg-quick 在它的 参考 中如何从 AllowedIPs 推导。没有这条路由,握手完成了,应用的回包却永远到不了。

如果路由器承载不了这条路由,就选一套有文档的回程方案。悄悄加上 NAT,反而会改变你刚刚写下的源地址模型。

只放行一个服务,而不是整个子网

在网关上开启 IPv4 转发,并把防火墙的三项职责分开:放行 WireGuard 监听,只把笔记本源地址转发到 192.168.50.20,其余家庭网络对该 peer 保持关闭。把规则并入正在使用的防火墙管理器,而不是直接清空它。为整个家庭网段配了路由,并不等于可以使用里面的每一台设备。

应用自身的身份验证和主机防火墙是另一道门。把规则集允许的服务名字写清楚,下一位复核者才能对照预期任务检查。

先从外部测试,再干净地下线

通过所有者把配置文件起起来,确认握手,然后从获批的外部网络访问预期应用并检查回包。再试一个必须保持拒绝的家庭服务,因为宽松的规则在有人使用之前是看不出来的。HTTPS 要用证书上的名字,让校验正常执行;直接敲裸地址、点过警告,对路径什么也证明不了。PersistentKeepalive 是可选项:它帮助受 NAT 约束的 peer 在空闲后保持可达,但它既不是缺失的路由,也不是权限的修复。

动态公网地址需要更新 DNS,地址变化后笔记本还要重新解析端点;新的 DNS 记录不会移动已经配置好的端点。下线笔记本的方式是从保存的和生效的配置中删掉它的 peer;只删笔记本上的配置文件,并不会撤销网关的授权。

相关文章