pfSense 主路由结合 OpenWrt 旁路由实现 WireGuard 客户端策略分流
pfSense 主路由结合 OpenWrt 旁路由实现 WireGuard 客户端策略分流
Zq.Lucifer在家庭或企业复杂网络环境中,很多朋友会选择 pfSense 作为主路由(负责防火墙、WireGuard VPN 服务端及稳定 DHCP 分发),同时部署 OpenWrt 作为旁路由(负责透明代理与分流服务)。
默认情况下,外网通过 WireGuard 连入主路由后,访问内网设备的流量正常,但如果想让 WireGuard 客户端的外网流量自动经过旁路由进行科学分流,往往由于跨网段路由与双向 NAT 问题导致无法联网。
本文将介绍一种无需在客户端配置复杂路由表的脱敏通用方案,通过 pfSense 策略路由 (PBR) 结合 OpenWrt 动态伪装与 TCP MSS 钳制,实现 WG 连入流量的无感旁路由分流。
1. 核心网络拓扑与网段设计
| 角色 | 部署设备 / 服务 | IP 地址 / 虚拟网段 | 核心功能 |
|---|---|---|---|
| 主路由 (Gateway / Firewall) | pfSense | 10.0.0.254 (LAN) |
局域网网关、防火墙、WireGuard Server (51820 端口) |
| 旁路由 (Sub-Gateway / Proxy) | OpenWrt (fw4/nftables) | 10.0.0.5 (LAN) |
透明代理、PassWall / 科学上网分流服务 |
| WireGuard 客户端 | 外网移动设备 / 异地主机 | 172.16.0.0/24 (WG 网段) |
通过 WG 隧道连入内网 |
2. 方案实现原理与关键配置步骤
本方案的核心依靠 pfSense 的 Policy-Based Routing (PBR 策略路由) 将来自 WG 接口的外网流量硬定向给 OpenWrt,同时在 OpenWrt 端开启 MASQUERADE 动态伪装 以解决跨网段回包问题。
1 | graph TD |
步骤一:pfSense 端设置策略路由 (PBR)
1. 定义旁路由网关 (Gateway)
- 登录 pfSense Web 后台,进入 System -> Routing -> Gateways。
- 点击 Add 添加新 IPv4 网关:
- Interface:
LAN - Name:
OpenWrt_GW - Gateway IPv4:
10.0.0.5(旁路由实际 IP)
- Interface:
- 保存并应用更改。
2. 配置防火墙策略路由规则 (Firewall Rules)
- 进入 Firewall -> Rules -> WireGuard(或您为 WG 绑定的专属 Interface)。
- 添加放行并定向规则:
- Action:
Pass - Interface:
WireGuard - Address Family:
IPv4 - Source:
WireGuard net(或指定 WG 客户端网段172.16.0.0/24) - Destination:
any(提示:如需直连内网其他设备,可在该规则上方单独加一条 Destination 为 LAN net、Gateway 为 default 的规则) - Advanced Options -> Gateway: 选择刚才创建的
OpenWrt_GW (10.0.0.5)。
- Action:
- 保存并 Apply Changes。
步骤二:OpenWrt 旁路由端配置(防火墙与转发)
由于 WireGuard 客户端的 IP(172.16.0.x)不属于 LAN 网段(10.0.0.0/24),当旁路由收到主路由硬转过来的数据包时,必须正确处理回包与 MTU:
1. 开启 IP 转发与 NAT 动态伪装 (MASQUERADE)
在 OpenWrt 防火墙 (fw4 / nftables) 中,需要开启 LAN 区域的动态伪装:
- Web 界面路径: 网络 -> 防火墙 -> 基本设置。
- 配置: 找到
lan区域,勾选 动态伪装 (MASQUERADE) 并开启 MSS 钳制。 - 原理: 旁路由收到流量后,通过 NAT 换源将 Source IP 替换为旁路由自身 IP(
10.0.0.5),确保目标回包能顺畅返回 OpenWrt 并在分流后返还给 pfSense 传回客户端。
2. 开启 MSS 钳制 (TCP MSS Clamping)
由于 WireGuard 报文额外叠加了 VPN 报头,容易发生 MTU 超限导致网页打不开或卡加载的问题。在 OpenWrt 防火墙或 PassWall 中开启 MSS 钳制,可自动调整 TCP 协商分片大小。
3. 代理分流服务监听 (PassWall / Clash)
确保 OpenWrt 上的分流插件配置为接收并代理 lan 区域的转发流量,以便对 WireGuard 客户端发起的请求进行规则匹配与科学上网分流。
3. 数据流走向全过程
- 客户端发起连接:外网 WireGuard 客户端(
172.16.0.x)访问外网,数据加密送达 pfSense 的 51820 端口。 - 主路由 PBR 强转:pfSense 解密数据包,触发 WireGuard 接口上的 PBR 策略路由规则,将目的地址为外网的数据包发往网关
10.0.0.5(OpenWrt)。 - 旁路由分流与伪装:OpenWrt 接收到数据包后,PassWall 进行分流处理,并通过 LAN 口 MASQUERADE 伪装发出请求。
- 原路回包:外网响应返回 OpenWrt 后,OpenWrt 还原 NAT 并送回 pfSense,最后由 pfSense 经 WG 隧道加密返还给终端。
总结
本方案的核心在于在 pfSense 上利用策略路由 (PBR) 将 WireGuard 接口的出站流量强制打到 OpenWrt 旁路由,同时配合 OpenWrt LAN 口的 MASQUERADE 动态伪装与 MSS 钳制,完美解决了跨网段路由与数据包丢包问题。连入 VPN 的终端无需配置任何复杂路由或代理,即可原生享受到旁路由带来的自动分流与科学上网能力。