WireGuard 两地局域网组网(A/B 路由器 + 多终端)配置总结
本次组网目标是实现 终端远程接入 A 路由器内网、跨网访问 B 路由器内网,且终端外网流量走本地,核心基于 OpenWrt 路由器的 WireGuard 插件,分网络规划、路由器配置、终端配置、故障排查四部分。
一、 核心网络规划
| 设备角色 | 隧道 IP(/32) |
内网网段 | WireGuard 角色 | 关键配置 |
|---|---|---|---|---|
| A 路由器 | 10.0.0.1 |
192.168.1.0/24 |
服务端(公网可访问) | 监听端口 2001,负责终端接入 + 流量转发 |
| B 路由器 | 10.0.0.2 |
192.168.2.0/24 |
客户端(主动连 A) | 配置心跳保活,维持 A-B 隧道 |
| 远程终端 | 10.0.0.9(示例) |
– | 客户端(主动连 A) | 配置目标网段,仅内网流量走隧道 |
二、 路由器端核心配置
1. A 路由器(服务端)配置
(1) WireGuard 接口创建
- 进入 LuCI → 网络 → 接口 → 添加新接口
- 名称:
wg0;协议:WireGuard VPN;点击创建接口 - 接口配置:
- 私钥 / 公钥:点击
生成密钥保存(公钥给 B 路由器和终端) - IP 地址:
10.0.0.1/32 - 监听端口:
2001(需在公网防火墙放行 UDP 2001)
- 私钥 / 公钥:点击
(2) 对等节点配置(分两类)
| 对等节点类型 | 配置项 | 取值 |
|---|---|---|
| 对接 B 路由器 | 公钥 | B 路由器的 WireGuard 公钥 |
| 允许的 IP 地址 | 10.0.0.2/32, 192.168.2.0/24 |
|
| 端点地址 | 留空(B 主动连 A) | |
| 持久化保活 | 0(服务端无需心跳) |
|
| 对接远程终端 | 公钥 | 终端的 WireGuard 公钥 |
| 允许的 IP 地址 | 仅填终端隧道 IP,如 10.0.0.9/32(核心!仅验证终端源 IP) |
|
| 端点地址 | 留空(终端主动连 A) | |
| 持久化保活 | 0 |
(3) 防火墙关键配置(解决跨网转发)
- 进入 LuCI → 网络 → 防火墙 → 区域设置,为
wg0接口创建wg区域 - 区域配置:
- 入站 / 出站 / 转发:全部设为接受
- 允许转发到目标区域:勾选
lan+wg(关键!允许流量转发到 B 隧道) - 允许从源区域转发:勾选
lan
- 若 LuCI 界面无
wg目标区域,添加自定义规则:bash运行iptables -A FORWARD -i wg0 -o wg0 -j ACCEPT /etc/init.d/firewall restart
2. B 路由器(客户端)配置
(1) WireGuard 接口创建
- 接口名称:
wg0;协议:WireGuard VPN - 接口配置:
- 私钥 / 公钥:生成并保存(公钥给 A 路由器)
- IP 地址:
10.0.0.2/32
(2) 对等节点配置(仅对接 A 路由器)
| 配置项 | 取值 |
|---|---|
| 公钥 | A 路由器的 WireGuard 公钥 |
| 允许的 IP 地址 | 10.0.0.1/32, 192.168.1.0/24 |
| 端点地址 | A 路由器公网 IP:2001 |
| 持久化保活 | 25(NAT 环境下维持连接) |
(3) 防火墙配置
- 创建
wg区域,配置同 A 路由器:- 入站 / 出站 / 转发:接受
- 允许转发到目标区域:勾选
lan - 确保 A-B 隧道流量能转发到 B 内网
三、 远程终端配置(以 iOS 为例)
1. 客户端配置逻辑
- 核心:
AllowedIPs决定哪些流量走隧道,服务端允许的 IP决定接受哪些终端流量。
2. 具体配置步骤
- 打开 WireGuard 客户端 → 新建隧道 → 生成私钥 / 公钥(公钥给 A 路由器)
- 接口配置:
- Address:
10.0.0.9/32(和 A 路由器对等节点配置一致) - DNS 服务器:
192.168.1.1(A 路由器内网 IP,可选)
- Address:
- 对等节点配置(对接 A 路由器):
配置项 取值 公钥 A 路由器的 WireGuard 公钥 端点地址 A 路由器公网 IP:2001AllowedIPs 192.168.1.0/24, 192.168.2.0/24, 10.0.0.1/32, 10.0.0.2/32持久化保活 25(NAT 环境必配) - 保存并激活隧道。
3. AllowedIPs 配置说明
| 配置方案 | 取值 | 适用场景 |
|---|---|---|
| 仅访问内网 | 192.168.1.0/24, 192.168.2.0/24, 10.0.0.1/32, 10.0.0.2/32 |
外网走本地(推荐) |
| 内网 + 外网都走隧道 | 0.0.0.0/0 |
需在 A 路由器开启 wg0 接口的 NAT 伪装 |
四、 关键验证步骤
- 隧道连通性验证
- A 路由器 ping B 隧道 IP:
ping 10.0.0.2 - 终端 ping A 隧道 IP:
ping 10.0.0.1 - 查看握手状态:LuCI → 状态 → WireGuard,有
latest handshake时间戳则正常。
- A 路由器 ping B 隧道 IP:
- 内网访问验证
- 终端 ping A 内网设备:
ping 192.168.1.1 - 终端 ping B 内网设备:
ping 192.168.2.1
- 终端 ping A 内网设备:
- 外网验证
- 终端激活隧道后,打开浏览器访问外网,确认流量走本地网卡。
五、 常见故障排查
| 故障现象 | 核心原因 | 解决方法 |
|---|---|---|
| 终端能连 A 但访问不了 B 内网 | A 路由器 wg 区域禁止转发到自身 |
修改 A 防火墙,允许 wg→wg 转发 |
| 隧道频繁断开 | NAT 会话超时 | 客户端(B 路由器 / 终端)设置 PersistentKeepalive = 25 |
| 服务端无法识别终端 | A 对等节点 允许的 IP 填了内网网段 |
改为仅填终端隧道 IP(如 10.0.0.9/32) |
| 终端能 ping 通路由器隧道 IP,无法 ping 内网 | 防火墙未允许 wg→lan 转发 |
勾选 wg 区域转发到 lan |
六、 核心注意事项
- 公钥配对:设备间公钥必须一一对应,不能填反。
- 端口放行:A 路由器的公网防火墙需放行 UDP 2001 端口。
- IP 唯一性:所有设备的隧道 IP 不能重复。
- 心跳配置:仅 NAT 环境下的客户端需要设置
PersistentKeepalive = 25,服务端设为 0。