Wireguard 实现两个局域网互联

本文最后更新于 2026年1月3日 下午

一直很想把家庭网络和工作网络互联互通起来,方便我下班在家的时候能快速查看工作电脑里的文件,或者上班的时候远程控制家里的 NAS 下载东西。

经过了连续三天的尝试和摸索,最终利用 Wireguard 将两个局域网联通起来,实现了家庭网络和工作网络下的所有设备互访,另外其他的 Wireguard 节点(例如手机)也能同时访问到这两个网络。

一、Wireguard 基本原理和组网条件

Wireguard 是一种端到端的隧道连接协议,对端(Peer)没有服务器和客户端之分,但是要求有一个 Peer 有公网 IP 或者两个 Peer 能连接到一个有公网 IP 的中转服务器上,通常我们认为被连接的一端为服务端。Wireguard 的配置非常简单,对 Linux 系统非常友好,而且资源消耗也非常小,即使运行在 OpenWrt 路由器上也不会很卡。另外 Wireguard 加密强度很高,不用担心被监听或者被拦截。

由于 Wireguard 通过虚拟网卡进行通信,我们只需要在系统中添加虚拟网卡,配置好两个对端虚拟网卡的 IP 地址、公钥、密钥、公网 IP 和监听端口,就能让两个对端建立连接。Wireguard 不负责路由转发,你只需要在 AllowedIPs 设置项中添加 CIDR,Wireguard 就会帮你在系统中添加路由。

为了方便大家理解,我将两个网络的拓扑图绘制出来,如下图:



C4Context

Container_Boundary(home, "家庭网络") {

        Container(pc1, "电脑", "IP:192.168.2.5")
        Container(nas, "NAS", "IP:192.168.2.2")
        Container_Boundary(router, "OpenWRT路由器") {
            Container(lan, "LAN1", "IP: 192.168.2.1", "网段 192.168.2.0/24")
            Container(wg, "Wireguard1", "IP: 192.168.9.1", "网段 192.168.9.0/24")
        }
}

Container_Boundary(office, "办公网络") {
        Container(mac, "办公电脑2", "IP:192.168.1.10","Mac Mini")
        Container(printer, "打印机", "IP:192.168.1.5")       
        Container(router2, "TP-LINK路由器", "IP:192.168.1.1")        
        Container_Boundary(pc2, "办公电脑1") {
            Container(eth, "以太网", "IP: 192.168.1.2", "网段 192.168.1.0/24")
            Container(wg2, "Wireguard", "IP: 192.168.9.4", "网段 192.168.9.0/24")
        }
}

BiRel(mac, router2, "")
BiRel(eth, router2, "")
BiRel(eth, wg2, "")
BiRel(wg, wg2, "")
BiRel(wg, lan, "")
BiRel(pc1, lan, "")
BiRel(nas, lan, "")
BiRel(router2, printer, "")

UpdateLayoutConfig($c4ShapeInRow="4", $c4BoundaryInRow="1")


可以看到,家庭网络的网段是192.168.2.0/24,办公网络的网段是192.168.1.0/24,Wireguard 隧道网络的网段是192.168.9.0/24。家庭网络有公网 IP,在家中的 OpenWrt 路由器中添加端口转发,将 Wireguard 的监听端口暴露到外网,办公电脑通过连接公网 IP 和端口,就能连接到家庭网络。

要保证家庭网络和工作网络相互连接的关键有三点:

  1. 家庭路由器中 Wireguard 和 LAN 的数据能够转发数据;
  2. 办公室中办公电脑上的以太网和 Wireguard 虚拟网卡能够转发数据;
  3. 在家庭路由器和办公室路由器上添加静态路由使两个网域能够互访。

二、Wireguard 配置

1. 安装 Wireguard

首先,我们分别在互相连接的设备上安装 Wireguard。我这里连接的设备分别是家中的 OpenWrt 系统的路由器和办公室里的 Windows 系统电脑。

OpenWrt 系统中,打开“软件” > “软件包”,点击“更新列表…”更新软件列表,然后在“过滤器”中输入 Wireguard,依此安装 luci-proto-wireguardkmod-wireguardwireguard-tools 等3个软件,重启 OpenWrt 后就安装好了。

Windows 系统上,访问 Wireguard 官网,使用官方链接 https://download.wireguard.com/windows-client/wireguard-installer.exe 下载并安装。

2. 配置 Wireguard

各设备上安装好 Wireguard 后,我们需要配置两个对端节点。Wireguard 配置文件的结构非常简单,如下所示:

1
2
3
4
5
6
7
8
9
10
11
[Interface]
PrivateKey = <私钥> # 填写本机的私钥
Address = <本机 Wireguard 的 IP> # 填写本机 Wireguard 的 IP
ListenPort = 51820 # 有公网的一端需要填写

[Peer]
PublicKey = <对端 publickey> # 必填。WireGuard 对端的公钥。
Endpoint = <对端公网 server 的 IP 或域名>:<对端公网 server 的监听端口>
AllowedIPs = <路由 CIDR> # 非常关键。允许对端在隧道内使用的 IP 地址和前缀。通常包括对端隧道 IP 地址和允许对端通过隧道路由的网络。
PersistentKeepalive = 25 # 保持连接消息的间隔秒数。默认值为 0(禁用)。若设备处于 NAT 网络环境下,推荐值为 25。
PresharedKey = <客户端的预共享密钥> # 可选。Base64 编码的预共享密钥。添加在额外的对称密钥加密层中,用于抵抗未来的量子计算破解。

OpenWrt 的 Wireguard-Tools 和互联网上都有 Wireguard 的配置生成器,不需要我们自己生成公钥(PublicKey)和私钥(PrivateKey),以 OpenWrt 上配置 Wireguard 为例。

第一步: 点击 “网络” > “端口” > “添加新端口…”,输入名称(例如:wg),协议选择 “Wireguard VPN” 然后 “创建接口”。

第二步: 点击 “网络” > “端口” 中新建的 wg 接口右边的 “编辑” 按钮。在弹出窗口的 “常规设置” 中点击 “生成新的密钥对”,生成新的公钥(PublicKey)和私钥(PrivateKey)。监听端口保持默认。IP 地址输入虚拟网域的 IP,例如 192.168.9.1/24。“不创建到对端的路由” 默认不勾选,如图 1 所示。

常规设置
图1 Wireguard 接口常规设置

第三步: 切换标签页至 “对端”,点击 “添加对端”。在弹出的窗口中,填写对端的 “描述”,点击 “生成新的密钥对”、“生成预共享密钥”。填写允许的 IP(例如:192.168.9.4192.168.1.0/24)并勾选 “为允许的 IP 创建路由”,Wireguard 就会在 OpenWrt 上添加一条静态路由。这样你访问办公网络(192.168.1.0/24)下的设备时就会走这个对端(192.168.9.4)的隧道。另外,推荐在 “持续保持连接” 中填写推荐值 25,如图 2 所示,点击 “保存”。

对端设置
图2 Wireguard 接口对端设置

第四步: 点击上图中的 “生成配置”,Wireguard-Tools 就能自动生成配置文件。生成的配置文件是给对端(办公室的电脑)使用的。

生成配置
图3 Wireguard 生成对端配置

注意! 我们需要对图 3 中被圈出的 “允许的 IP”、“DNS 服务器”、“地址” 进行修改。“允许的 IP” 应修改为 192.168.9.0/24192.168.2.0/24,否则对端(办公室的电脑)上所有网络访问会全部走 Wireguard 隧道。“DNS 服务器” 直接删掉,让对端(办公室的电脑)直接使用办公网络的 DNS 服务器。“地址” 中 192.168.1.0/24 一栏删掉,否则办公网络给对端(办公室的电脑)分配的 IP(192.168.1.2)会和 Wireguard 配置的 IP(192.168.1.0/24)冲突。

修改完毕后对端配置应该如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
[Interface]
PrivateKey = <生成的对端私钥>
Address = 192.168.9.4
# ListenPort not defined
# DNS not defined

[Peer]
PublicKey = <OpenWrt Wireguard的公钥>
PresharedKey = <生成的对端预共享公钥>
AllowedIPs = 192.168.2.0/24, 192.168.9.0/24
Endpoint = <公网IP或域名>:54132
PersistentKeepAlive = 25

第五步: 将生成好的配置复制粘贴到办公电脑的 Wireguard 客户端上。

完成以上五步,两个对端的配置就完成了。理论上办公室的电脑可以通过 Wireguard 隧道访问家庭网络中的设备了。

三、家庭网络配置

虽然办公室的电脑可以访问家庭网络中的设备,但是,家庭网络中的设备是没有办法访问办公室的电脑的。比如,我可以用办公室里安装了 Wireguard 的电脑 RDP 远程访问家里的电脑,但是家里的那台电脑不能 RDP 访问办公室里安装了 Wireguard 的电脑。主要原因是家庭网络的路由器,即 OpenWrt 路由器,没有设置 LAN 和 Wireguard 虚拟网卡的路由转发。LAN 的 192.168.2.0/24 网段和 Wireguard 的 192.168.9.0/24 网段不能互访。

解决以上问题的方法是在 OpenWrt 的防火墙中设置 LAN 区域和 Wireguard 区域的路由转发。

第一步: 打开 “网络” > “接口” 设置,修改编辑 Wireguard 接口,切换 “防火墙” 标签页,创建防火墙区域,例如 wg,并选择它,如图 4 所示。

创建分配防火墙区域
图4 创建分配防火墙区域

第二步: 打开 “网络” > “防火墙” 设置,入站数据选择 “接受”,出站数据选择 “接受”,区域内转发选择 “接受”。允许转发到目标区域选择 lan,允许来自源区域的转发选择 lan,然后点击 “保存”,如图 5 所示。

防火墙区域设置
图5 防火墙区域设置

完成以上设置后,家庭网络下的任何设备都能访问办公室里安装了 Wireguard 的那台电脑了。

四、办公网络配置

当然,目前的设置只能让家庭网络下的设备通过 192.168.9.4 这个 IP 来访问办公室里那台安装了 Wireguard 的电脑,不能访问到办公网络下的所有设备。所以办公网络下也需要进行一定的设置,才能让家庭网络和办公网络的所有设备进行互访。

需要解决的问题有两个。第一,需要让办公室里安装了 Wireguard 的电脑里的网卡(IP: 192.168.1.2)和 Wireguard 虚拟网卡(IP: 192.168.9.4)能够路由转发;第二,需要在办公网络的路由器中添加静态路由,让办公网络里的设备知道 192.168.2.0/24 和 192.168.9.0/24 从哪来,到哪里去。

1. 启用 Windows 的路由转发

首先需要查看 Windows 中所有的网卡设备。在打开 Wireguard 并连接隧道之后,在 PowerShell 中输入以下命令。

1
Get-NetIPInterface | select ifIndex,InterfaceAlias,AddressFamily,ConnectionState,Forwarding | Sort-Object -Property IfIndex | Format-Table

找到电脑的以太网卡和 Wireguard 虚拟网卡,记下 InterfaceAlias 下面显示的设备接口名称,例如我办公室电脑上物理网卡的接口名称是 “以太网 4”,Wireguard 虚拟网卡的接口名称是 “Windows”。

接着在 PowerShell 中输入以下命令,开启物理网卡和 Wireguard 虚拟网卡的路由转发。

1
Set-NetIPInterface -InterfaceAlias "以太网 4","Windows" -Forwarding Enabled

不同电脑上网卡接口名称不同,请按自己电脑上的设备情况修改 -InterfaceAlias 后面的接口名称。

由于每次断开隧道后,Wireguard 的网卡会消失,再次连接后需要重新启用路由转发,因此我们可以在 Wireguard 的配置文件中添加脚本,让 Wireguard 在连接和断开隧道后自动开启和关闭 Windows 路由转发。

需要注意,如果要让 Windows 版本的 Wireguard 运行脚本,我们必须修改注册表[1],否则 Wireguard 程序会提醒你“脚本已禁用(依管理策略)”,如图 6 所示。

脚本已禁用(依管理策略)
图6 脚本已禁用(依管理策略)

在 CMD 或者 Powershell 中运行以下指令添加到注册表。

1
reg add HKLM\Software\WireGuard /v DangerousScriptExecution /t REG_DWORD /d 1 /f

修改好注册表后,Wireguard 应该可以运行配置文件中的脚本了,在[Interface] 中添加启用路由转发的脚本:

1
2
PostUp = powershell.exe -Command "Set-NetIPInterface -InterfaceAlias '以太网 4','Windows' -Forwarding Enabled"
PostDown = powershell.exe -Command "Set-NetIPInterface -InterfaceAlias '以太网 4','Windows' -Forwarding Disabled"

就可以实现启用隧道时开启转发,关闭隧道时停止转发。

2. 办公网络路由器设置

要达成家庭网络设备访问办公网络下的所有设备,办公室网络的路由器设置非常关键,网上的教程都只讲了 Windows 网卡和 Wireguard 网卡的路由转发,没有提到两个网域互联的最后一个关键步骤,就是办公网络的静态路由。

前面的设置中,家庭网络设备,例如家庭电脑 192.168.2.5,只能访问办公网络里安装了 Wireguard 的电脑,原因就是家庭电脑访问 192.168.1.0/24 时,会先询问默认网关 OpenWrt 路由器,OpenWrt 中 Wireguard 创建了静态路由,将 192.168.1.0/24 的所有请求指向办公电脑 Wireguard 虚拟网卡 192.168.9.4,由于办公电脑的 Wireguard 虚拟网卡 192.168.9.4 和物理网卡 192.168.1.2 开启了路由转发,访问 192.168.9.4 或者 192.168.1.2 都能得到办公电脑的响应。

如果要访问办公室打印机 192.168.1.5,请求虽然可以到达办公室打印机,但是打印机响应源地址 192.168.2.5,返回到的是办公网络默认网关即路由器 192.168.1.1,而不是 192.168.1.2,导致访问请求能去不能回,访问失败。

所以我们需要在办公室的路由器上添加静态路由,让办公网络的设备响应 192.168.2.0/24 这个网段的请求指向安装了 Wireguard 的办公电脑 192.168.1.2 上,这样就可以让请求和响应完成闭环,如下表所示。



flowchart TB
    subgraph 家庭网络
        pc1["`家庭电脑
        IP:192.168.2.5`"]
        subgraph OpenWrt
            lan1["`LAN
            IP:192.168.2.1/24`"]
            wg1["`Wireguard
            IP:192.168.9.1/24`"]
            lan1--路由:
            192.168.1.0/24
            →192.168.9.4-->wg1
            wg1--路由:
            192.168.2.0/24
            →192.168.2.1-->lan1
        end
        pc1--访问192.168.1.5-->lan1
        lan1-->pc1
    end

    subgraph 办公网络
        printer["`打印机
        IP:192.168.1.5`"]
        router["`路由器
        IP:192.168.1.1`"]
        subgraph Windows 电脑
            lan2["`LAN
            IP:192.168.1.2`"]
            wg2["`Wireguard
            IP:192.168.9.4`"]
            lan2<-->wg2
        end
        router-->printer
        printer--响应192.168.2.5-->router
        lan2--路由:
        192.168.1.0/24
        →192.168.1.1-->router
        router--路由:
        192.168.2.0/24
        →192.168.1.2-->lan2
    end
wg1<-->wg2


不同路由器添加静态路由的方法都差不多,你只需要设置好 192.168.2.0/24 的下一跳是 192.168.1.2(安装 Wireguard 的电脑)即可。

至此,两个网段的所有设备可以互相访问了。如果其他的对端也想同时访问两个网段,推荐在办公网络的路由器上也添加 192.168.9.0/24 的静态路由。

参考资料

  1. Registry Keys for Admins. Github - WireGuard/wireguard-windows. https://github.com/WireGuard/wireguard-windows/blob/master/docs/adminregistry.md

Wireguard 实现两个局域网互联
https://vickey.fun/2025/12/27/Wireguard-implementation-for-interconnecting-two-local-area-networks/
作者
饶玮琪
发布于
2025年12月27日
许可协议