ChrisKim
Do not go gentle into that good night.
颢天

基于 WireGuard 实现 OpenWrt 跨网段互通

有时候我们希望两个路由器网段能够互通,例如 192.168.6.0/24 和 192.168.7.0/24 的设备能够直接通过 IP 互访。如果这两个路由器都可互访对方 IP,那么这个需求通过配置路由器的路由表就可以轻松实现。

但大多数情况下,我们并不能保证两个路由器都可互访对方 IP,可能只有一侧有公网 IP,那么 WireGuard 这种基于 VPN 隧道的连接,就可以完美解决这个跨网段互通的问题。

1 教程环境

为了方便介绍,这里约定以下环境:

  • 路由器 Arona:WAN 有公网 IP 123.123.123.123,LAN 网段 192.168.6.0/24
  • 路由器 Plana:WAN 只有内网 IP 172.16.1.100,LAN 网段 192.168.7.0/24

本教程可实现两个路由器下的所有设备都可直接互访,例如 192.168.6.1 和 192.168.7.1 互访、 192.168.6.8 和 192.168.7.9 互访,如下图所示。

https://assets.zouht.com/img/blog/4563-01.webp
网络拓扑图

2 配置服务端

WireGuard 的设计是没有服务端和客户端这一概念的,所有节点都称为 Peer,它们都是对等的。但对于我们这个场景,将会配置为一个星型的拓扑,中心服务器是有公网 IP 的一端,因此为了方便也可以称有公网 IP 一端为服务端,其他为客户端。对于我们这个例子,便是配置 Arona 这台路由器。

2.1 安装 WireGuard

安装对应的软件包,SSH 后用指令或者在 LuCI 界面装都行:

# opkg 管理器
opkg install kmod-wireguard wireguard-tools luci-proto-wireguard
# apk 管理器
apk add kmod-wireguard wireguard-tools luci-proto-wireguard

2.2 新建 WireGuard 接口

新建接口

在 LuCI 界面的 网络 → 接口 → 添加新接口 进入 新建接口 页面,如下配置:

  • 名称:wg0
  • 协议:WireGuard VPN
  • 设备:未指定

新建后,进入接口详情页面进行配置,一共有 常规设置、高级设置、防火墙设置、DHCP 服务器和对端 五个选项卡,其中高级设置和 DHCP 服务器两个选项卡在我们的需求里完全不需要修改,全部保持默认。

配置密钥

这里配置的是本节点(即服务端)的 WireGuard 信息,我们要生成一对非对称的公私钥,在路由器的 SSH 中执行以下指令即可获得:

(
  private_key=$(wg genkey)
  printf 'PrivateKey = %s\n' "$private_key"
  printf 'PublicKey = %s\n' "$(printf '%s\n' "$private_key" | wg pubkey)"
)

例如生成的一组服务端的密钥如下:

# 服务端 Arona 私钥
PrivateKey = iMeiGoGt/X4vH9+O2b20z8wQwSw+yqA4I3eZ5G1Uo24=
# 服务端 Arona 公钥
PublicKey = oiUMDxKn+oiOILSHDa/ke4qD237Aa5QG4GGxq56E3mI=

每个节点保有自己的私钥,然后将公钥给对端来进行连接。因此,这里将生成的私钥填写到常规设置的私钥框里。

配置 IP 和端口

监听端口保持默认的 51820 即可。

然后 IP 地址需要填写一个用于 VPN 的网段地址,需要和 Arona、Plana 两端的路由器网段均不同。本教程使用 10.10.0.1/24 作为 VPN 服务端的地址,大概率你也能用。

2.3 配置防火墙

配置防火墙区域

双向的跨网段互通存在数据包的转发,因此需要使用防火墙区域来配置转发规则。

在 LuCI 界面的 网络 → 防火墙 → 常规设置 → 区域 → 添加 进入 新建区域 页面,如下配置:

  • 名称:vpn
  • 入站数据:接受(Plana 访问 Arona 的关键点)
  • 出站数据:接受(Arona 访问 Plana 的关键点)
  • 转发:接受(本示例确实接受和拒绝没区别,但是如果有多个客户端互联,则必须选接受)
  • IP 动态伪装:不启用(我们希望双方都用真实的 IP 来访问,不进行地址转换)
  • MSS 钳制:不启用
  • 允许转发到目标区域:LAN(Plana 访问 Arona 路由器下的设备的关键点)
  • 允许来自源区域的转发:LAN(Arona 路由器下的设备访问 Plana 的关键点)

配置好后保存应用即可。

放通 WireGuard 端口

由于 OpenWrt 防火墙的存在,必须放通 WireGuard 的 51820 UDP 端口,才能让 WAN 侧访问到路由器的 WireGuard 程序。

在 LuCI 界面的 网络 → 防火墙 → 通信规则 → 添加 进入 新建规则 页面,如下配置,未提到项目保持默认:

  • 名称:wgserver
  • 协议:UDP
  • 源区域:WAN
  • 目标区域:设备(输入)
  • 目标端口:51820
  • 操作:接受

配置好后保存应用即可。

3 配置客户端

大多数操作都是一模一样的,仅有少数细节有差异,有差异的部分将会着重强调。

3.1 安装 WireGuard

同 2.1 节的操作,一模一样。

3.2 新建 WireGuard 接口

新建接口

同 2.2 节新建接口的操作,一模一样。

配置密钥

同 2.2 节配置密钥的操作,一模一样。

不过注意,客户端请再次运行指令随机生成一对密钥,而不是复制服务端的密钥。例如生成的一组客户端的密钥如下:

# 客户端 Plana 私钥
PrivateKey = wNWhrgLMFH7Y7yzyyYRnI/CtE3/h10tnZ0gQ/f/RrX4=
# 客户端 Plana 公钥
PublicKey = xbp4N+/BXKkFhN7YqiM4RwkYuAWKQn0H9Td8OwEG2S0=

配置 IP 和端口

监听端口保持默认的 51820 即可。

然后 IP 地址填写和服务端同一网段的不同 IP,例如服务端使用 10.10.0.1/24 作为 VPN 地址,那么客户端可以使用 10.10.0.2/24,唯独不能重复。

3.3 配置防火墙

配置防火墙区域

同 2.3 节配置防火墙区域的操作,一模一样。

放通 WireGuard 端口

客户端不需要做这个操作,直接跳过。

4 配置双端互联

上述配置我们分别完成了服务端和客户端自己的信息的配置,但还没有配置对方的信息。本节要在服务端添加客户端的节点,在客户端添加服务端的节点,这样就能实现互联了。

4.1 服务端添加客户端

我们在 Arona 的 LuCI 界面 网络 → 接口 → wg0 → 编辑 → 对端 → 添加对端 新建一个对端,然后填写 Plana 的信息:

  • 描述:Plana(可任意命名)
  • 公钥:xbp4N+/BXKkFhN7YqiM4RwkYuAWKQn0H9Td8OwEG2S0=(即 Plana 的公钥)
  • 预共享密钥:空
  • 允许的 IP(即哪些地址需要走 VPN):
    • 10.10.0.2/32(即 Plana 的 VPN 地址)
    • 192.168.7.0/24(即 Plana 的 LAN 地址)
  • 路由允许的 IP:是
  • 端点主机:空
  • 端点端口:空
  • 持续 Keep-Alive:25

配置好后保存应用,然后需要 网络 → 接口 → wg0 → 重启 来重启 WireGuard 接口生效。

4.2 客户端添加服务端

我们在 Plana 的 LuCI 界面 网络 → 接口 → wg0 → 编辑 → 对端 → 添加对端 新建一个对端,然后填写 Arona 的信息:

  • 描述:Arona(可任意命名)
  • 公钥:oiUMDxKn+oiOILSHDa/ke4qD237Aa5QG4GGxq56E3mI=(即 Arona 的公钥)
  • 预共享密钥:空
  • 允许的 IP(即哪些地址需要走 VPN):
    • 10.10.0.1/32(即 Arona 的 VPN 地址)
    • 192.168.6.0/24(即 Arona 的 LAN 地址)
  • 路由允许的 IP:是
  • 端点主机:123.123.123.123(即 Arona 的 WAN 公网地址)
  • 端点端口:51820(即 Arona 的 WireGuard 端口)
  • 持续 Keep-Alive:25

配置好后保存应用,然后需要 网络 → 接口 → wg0 → 重启 来重启 WireGuard 接口生效。

5 测试互联

进行上述配置后,若无误则已经可以实现互联了,以下 ping 测试应当全部都能成功。

在 Arona 下的设备测试

ping 10.10.0.2    # 测试 Plana 的 VPN 地址
ping 192.168.7.1  # 测试 Plana 的 LAN 地址
ping 192.168.7.9  # 测试 Plana 下的设备的 LAN 地址(该设备允许 Ping 才能成功)

在 Plana 下的设备测试

ping 10.10.0.1    # 测试 Arona 的 VPN 地址
ping 192.168.6.1  # 测试 Arona 的 LAN 地址
ping 192.168.6.8  # 测试 Arona 下的设备的 LAN 地址(该设备允许 Ping 才能成功)

6 横向扩展

该例子只介绍了两个网段的互通,实际上 WireGuard 能实现任意数目。如果有一个新的路由器 Hoshino,网段为 192.168.8.0/24 要加入进来,那么只需要做以下配置:

  • 配置新客户端:在 Hoshino 路由器上重复 3.1, 3.2, 3.3 节配置方式,VPN 地址 10.10.0.3/32
  • 加入到服务端:在 Arona 路由器上重复 4.1 节配置方式
  • 修改其他节点的“允许的 IP”
    • Arona 允许的 IP:
      • 10.10.0.2/32
      • 10.10.0.3/32
      • 192.168.7.0/24
      • 192.168.8.0/24
    • Plana 允许的 IP:
      • 10.10.0.1/32
      • 10.10.0.3/32
      • 192.168.6.0/24
      • 192.168.8.0/24
    • Hoshino 允许的 IP:
      • 10.10.0.1/32
      • 10.10.0.2/32
      • 192.168.6.0/24
      • 192.168.7.0/24

本文链接:https://www.zouht.com/4563.html
本文使用:CC BY-NC-SA 4.0 许可
# # #
首页   •   教程   •   基于 WireGuard 实现 OpenWrt 跨网段互通

发表回复

textsms
account_circle
email

颢天

基于 WireGuard 实现 OpenWrt 跨网段互通
有时候我们希望两个路由器网段能够互通,例如 192.168.6.0/24 和 192.168.7.0/24 的设备能够直接通过 IP 互访。如果这两个路由器都可互访对方 IP,那么这个需求通过配置路由器的路由表就…
扫描二维码继续阅读
2026-10-21