在多地办公或家庭实验室(Home Lab)场景中,实现两个私网网段的透明互访是一项基础且重要的需求。WireGuard 凭借其高性能、现代加密算法和极简配置,成为此类场景的首选方案。
本文记录了将两台 OpenWrt 路由器通过 WireGuard 实现站点到站点(Site-to-Site)互联的完整过程,并分享了两个关键故障(路由注入与上游 NAT 漂移)的排障思路。
1. 项目目标
实现两台 OpenWrt 路由器双向互通,使两侧私有网段设备能够透明访问。
设备角色与网络拓扑
- R5S (服务端角色)
- 上游:光猫拨号,具备动态公网 IP。
- 职责:监听连接请求(DDNS + 端口映射已配置)。
- 内网网段:
172.31.0.0/24
- CPE (主动发起端/客户端角色)
- 上游:无公网 IP(位于ISP大内网之后)。
- 职责:主动向 R5S 发起握手与保活。
- 内网网段:
192.168.66.0/24
地址与端口规划
- 隧道网段:
10.66.66.0/24- R5S WG 地址:
10.66.66.1/24 - CPE WG 地址:
10.66.66.2/24
- R5S WG 地址:
- 监听端口:UDP
51820(R5S 侧)
2. 实施方案
2.1 核心设计原则
- 服务端/客户端逻辑:R5S 具备公网入口做服务端,CPE 做主动发起端。
- 不使用 NAT:目标是私网真实双向互通。
- 独立防火墙区域 (Zone):在两端分别建立
vpn区域,并开放lan <-> vpn的双向转发。 - 路由自动化:启用
Route Allowed IPs,确保 Allowed IPs 自动转化为系统路由。
2.2 关键步骤分解
R5S 端(服务端)
- 安装组件:
luci-proto-wireguard。 - 创建接口:建立
wg0,配置私钥,监听端口设为51820。 - 配置 Peer (CPE):
- 填写 CPE 的公钥。
- Allowed IPs:
10.66.66.2/32,192.168.66.0/24。
- 防火墙:创建
vpnzone 绑定wg0。允许Input/Output/Forward为ACCEPT。 - 转发规则:配置
lan -> vpn和vpn -> lan的转发。 - 端口放行:在 WAN 侧开放 UDP
51820。 - 光猫映射:将外部 UDP
51820映射至 R5S WAN 口。
CPE 端(客户端)
- 创建接口:建立
wg0,无需配置监听端口。 - 配置 Peer (R5S):
- 填写 R5S 的公钥。
- Endpoint Host:R5S 的 DDNS 域名。
- Allowed IPs:
10.66.66.1/32,172.31.0.0/24。 - Persistent Keepalive:设为
25(维持 NAT 穿透)。 - Route Allowed IPs:勾选。
- 同步配置防火墙与转发规则(同 R5S 侧)。
3. 排障过程记录
3.1 故障一:隧道互通但内网不通
现象:WireGuard 握手成功,两侧 10.66.66.x 地址可互相 ping 通,但无法访问对端 LAN 地址(如 CPE 无法访问 172.31.0.1)。
定位:
在 CPE 上执行 ip route get 172.31.0.1,结果显示流量走向了默认网关(WAN 口),而非 wg0。
根因:
CPE 端的 Peer 配置中,虽然写了对端 172.31.0.0/24 的 Allowed IPs,但 未勾选 Route Allowed IPs。导致系统路由表未注入该网段的路由。
修复:
勾选 Route Allowed IPs 后,路由自动生成,私网互通恢复。
3.2 故障二:运行一夜后隧道中断
现象:系统稳定运行后,第二天早上发现 latest handshake 停留在几小时前。CPE 端 wg show 显示只有 sent 流量,0 B received。
定位:
- CPE 侧:DDNS 域名解析正确,握手包持续发送,但无回显。
- R5S 侧:
wg0接口正常,但 ping10.66.66.2报错Destination address required(没有可用的 endpoint)。 - 系统日志:发现 R5S 在凌晨经历过重启。
根因:
R5S WAN 口通过 DHCP 获得地址。重启后,R5S 的内网地址从 192.168.1.109 漂移到了 192.168.1.67。
然而,上游光猫的端口映射目标 IP 仍指向旧地址。导致 CPE 发来的 UDP 握手包被光猫丢弃,握手无法重连。
修复: 更新光猫映射规则。 后续建议:在上游设备中为 R5S 的 WAN MAC 绑定固定 IP,或者在 R5S WAN 口使用静态 IP。
4. 总结与建议
成功三要素
- 路由注入:务必确认
AllowedIPs写全,并开启Route Allowed IPs。 - 保活机制:NAT 后的客户端必须配置
PersistentKeepalive。 - 映射稳定性:作为服务端的内网地址必须固定,防止 DHCP 漂移导致入站流量丢失。
常用调试命令
1
2
3
4
5
6
7
8
9
# 查看握手状态与流量
wg show
# 检查特定网段的路由走向
ip route get <对端IP>
# 验证 Uci 配置
uci show network | grep wg0
uci show firewall | grep vpn
WireGuard 站点互联并不复杂,但在 OpenWrt 等高度可定制化的环境中,防火墙 Zone 的配置与上游 NAT 的配合往往是容易产生“坑”的地方。希望这份记录能为您在部署类似方案时提供参考。