WireGuard 两地局域网组网(A/B 路由器 + 多终端)配置总结

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. 具体配置步骤

  1. 打开 WireGuard 客户端 → 新建隧道 → 生成私钥 / 公钥(公钥给 A 路由器)
  2. 接口配置:
    • Address:10.0.0.9/32(和 A 路由器对等节点配置一致)
    • DNS 服务器:192.168.1.1(A 路由器内网 IP,可选)
  3. 对等节点配置(对接 A 路由器):
    配置项 取值
    公钥 A 路由器的 WireGuard 公钥
    端点地址 A 路由器公网 IP:2001
    AllowedIPs 192.168.1.0/24, 192.168.2.0/24, 10.0.0.1/32, 10.0.0.2/32
    持久化保活 25(NAT 环境必配)
  4. 保存并激活隧道。

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 伪装

四、 关键验证步骤

  1. 隧道连通性验证
    • A 路由器 ping B 隧道 IP:ping 10.0.0.2
    • 终端 ping A 隧道 IP:ping 10.0.0.1
    • 查看握手状态:LuCI → 状态 → WireGuard,有 latest handshake 时间戳则正常。
  2. 内网访问验证
    • 终端 ping A 内网设备:ping 192.168.1.1
    • 终端 ping B 内网设备:ping 192.168.2.1
  3. 外网验证
    • 终端激活隧道后,打开浏览器访问外网,确认流量走本地网卡。

五、 常见故障排查

故障现象 核心原因 解决方法
终端能连 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

六、 核心注意事项

  1. 公钥配对:设备间公钥必须一一对应,不能填反。
  2. 端口放行:A 路由器的公网防火墙需放行 UDP 2001 端口。
  3. IP 唯一性:所有设备的隧道 IP 不能重复。
  4. 心跳配置:仅 NAT 环境下的客户端需要设置 PersistentKeepalive = 25,服务端设为 0。

作者: 高志远

高志远,24岁,男生

发表评论

邮箱地址不会被公开。