Openwrt2203_双wan口_简单的策略路由_DMZ设置
转载注明来源: 本文链接 来自osnosn的博客,写于 2025-11-20.
环境
- 使用openwrt2203。 op23,op24的配置方法相同, 因为都是使用的fw4。
- 有一个lan,两个wan,分别是wan1和wan2。
lan:192.168.1.1/24, wan1:10.100.9.20/gw 10.100.9.1, wan2:192.168.8.8/gw 192.168.8.1, - 仅 ipv4环境,无ipv6。
- lan口连接一台windows电脑,设置为DMZ主机。win电脑上网,所有数据包走wan1。
win: 192.168.1.55 - op配置了 wireguard,但udp走wan1干扰很大,不稳定。
需要让 wg的 udp包走 wan2。
配置方案
- 用nft防火墙规则对特定的数据包, 打上标记 (mark 100)
- 根据 mark 使用特殊的路由表。
有 mark标记的数据包,走路由表100,走wan2.
其他所有数据包 使用默认路由表,走 wan1.
策略路由配置
- op中,主路由表的缺省路由是:
default via 10.100.9.1 - 测试 (2025-12测)
win中使用tracert -d -w 1 202.12.12.12测试,数据走的是wan1
op 中使用traceroute -n -w 1 202.12.12.12测试,数据走的是wan1 - op中,路由表 100中,添加路由记录
对应的luci操作,ip route add 10.100.0.0/16 via 10.100.9.1 table 100 metric 10 ## 10.100网段还是走wan1 ip route add 0.0.0.0/0 via 192.168.8.1 table 100 metric 50 ## 其他数据走wan2Network -> Routing -> Static IPv4 Routes -> 添加路由 ---- 1 ---- - General Settings - Interface: wan1 - Route type: unicast #默认值 - Target: 10.100.0.0/16 - Gateway: 10.100.9.1 - Advanced Settings - Metric: 10 - Table: 100 - 其他内容: 默认/留空/不改变 ---- 2 ---- - General Settings - Interface: wan2 - Route type: unicast #默认值 - Target: 0.0.0.0/0 - Gateway: 192.168.8.1 - Advanced Settings - Metric: 50 - Table: 100 - 其他内容: 默认/留空/不改变 - op中,添加路由规则
ip rule add from all fwmark 100 lookup 100 pref 3000
对应的luci操作,Network -> Routing -> IPv4 Rules -> 添加规则 - General Settings - Priority: 3000 - Route type: unicast #默认值 - Table: 100 - Advanced Settings - Firewall mark: 100 - 其他内容: 默认/留空/不改变Firewall mark 支持 "值/掩码"格式,比如 luci中写 "0x64/0xff" 表示 "fwmark 0x64/0xff"
- 测试, (没有变化) (2025-12测)
win中使用tracert -d -w 1 202.12.12.12测试,数据走的是wan1
op 中使用traceroute -n -w 1 202.12.12.12测试,数据走的是wan1 - op中,添加防火墙规则, 0x64=100
对应的luci操作,nft add rule inet fw4 mangle_output ip daddr 202.12.12.12 counter meta mark set 0x64Network -> Firewall -> Traffic Rules -> 添加规则 - General Settings - protocol: Any - Source Zone: Device (output) - Output Zone: Any zone - Destination address: 202.12.12.12 - Action: XOR firewall mark - XOR mark: 100 - Advanced Settings - Restrict to address family: IPv4 only - 其他内容: 默认/留空/不改变XOR mark 支持 "值/掩码"格式,比如 luci中写 "0x64/0xff" 表示 "meta mark set meta mark & 0xffffff64 | 0x64"
- 测试, (op自身走wan2) (2025-12测)
win中使用tracert -d -w 1 202.12.12.12测试,数据走的是wan1
op 中使用traceroute -n -w 1 202.12.12.12测试,数据走的是wan2
如果 "Destination address" 留空,那么op中的所有访问都走wan2,win依然走wan1。 - op中,添加防火墙规则, 0x64=100
对应的luci操作,nft add rule inet fw4 mangle_prerouting iifname "br-lan" ip daddr 202.12.12.12 counter meta mark set 0x64Network -> Firewall -> Traffic Rules -> 添加规则 - General Settings - protocol: Any - Source Zone: LAN - Destination Zone: Any zone - Destination address: 202.12.12.12 - Action: XOR firewall mark - XOR mark: 100 - Advanced Settings - Restrict to address family: IPv4 only - 其他内容: 默认/留空/不改变XOR mark 支持 "值/掩码"格式,比如 luci中写 "0x64/0xff" 表示 "meta mark set meta mark & 0xffffff64 | 0x64"
- 测试, (lan口电脑走wan2) (2025-12测)
win中使用tracert -d -w 1 202.12.12.12测试,数据走的是wan2 - op中, 删除上面两条防火墙规则,只添加下面这条, 对端 wg的端口是 34567 和 34568,
对应的luci操作,nft add rule inet fw4 mangle_output meta nfproto ipv4 udp dport { 34567, 34568 } counter meta mark set 0x64Network -> Firewall -> Traffic Rules -> 添加规则 - General Settings - protocol: UDP - Source Zone: Device (output) - Output Zone: Any zone - Destination port: 34567 34568 #空格隔开的两个端口号 - Action: XOR firewall mark - XOR mark: 100 - Advanced Settings - Restrict to address family: IPv4 only - 其他内容: 默认/留空/不改变XOR mark 支持 "值/掩码"格式,比如 luci中写 "0x64/0xff" 表示 "meta mark set meta mark & 0xffffff64 | 0x64"
- op配置 wg连接外部的两台机器。wg通过 wan2 连接成功。
win电脑走 wan1.
(2025-12测试成功) - 如果是debian,wg连接的配置中,可能需要在 [Interface] 中用
PostUp/PreDown, 把 wg 的路由写入到 table 100 中。
也可以指定 wg自动添加的路由写入指定的table,比如在 [Interface] 中加一行Table = 100。 - op中没找到配置
PostUp/PreDown的方法,可能是通过"Import configuration"导入配置的办法,把PostUp/PreDown添加进去。
op中可以指定 wg自动添加的路由指定写到 table 100。配置在"Advanced Settings->Override IPv4 routing table"。 - 上面的"set mark"防火墙规则,只限定了两个udp口,影响不大,所以没有添加这个table,或
PostUp/PreDown设置。 - 如果wg对端是 ddns,记得在crontab中加入
*/3 * * * * /usr/bin/wireguard_watchdog
wireguard FwMark
此方法,未做测试 (2025-12)
- wireguard 本身就可以给 wg 的加密数据包打上 fwmark。
如需配置,在 [Interface] 中加一行FwMark = 0x64。
可以配置 wireguard 连接的 fwmark,而无需单独设置 "nft mangle set mark" 的防火墙规则。
配合 ip route 和 ip rule 就可以实现,wg 加密数据包走 wan2,其他数据包走 wan1. - op中 luci界面 wireguard 配置的 fwmark 的位置在:
Network -> Interfaces -> wg0的配置 -> Advanced Settings -> Firewall Mark。
只是,仅支持固定值,比如 0x64。不支持 "值/掩码" 格式。 - 如果使用 wireguard本身的 fwmark,就不需要在 PostUp/PreDown 中设置路由规则了。
DMZ设置
- 【OpenWRT配置完全开放的DMZ主机】
- 【OpenWrt开启DMZ】
- luci操作
这条dmz规则,必须是最后一条规则。否则它后面的规则都不生效。Network -> Firewall -> Port Forwards -> 添加规则 - General Settings - Restrict to address family: Auto 或者 ipv4 only - protocol: Any 或者 按需选择 - Source Zone: wan - External port: 留空 或 1-65535 - Destination Zone: lan - Internal IP address: <内网的dmz主机IP> - Internal port: 留空 或 1-65535 - Advanced Settings - 保留默认值 - 其他内容: 默认/留空/不改变
其他
- 关于"前缀抑制器 (Prefix suppressor)",【OpenWrt 下的策略路由】
- 前缀抑制器: 拒绝前缀长度小于或等于指定值的路由决策。
- 比如,新建一个规则,让指定的主机先匹配 main 路由表,然后设置前缀抑制为 0,那么其意思就是不匹配 main 表中默认路由,但是匹配其他路由条目。因为默认路由的前缀长度(掩码长度)=0。
- 如果有线网络是 IEEE802.1X 认证。
需要设置 认证机 为DMZ主机,并且 wan口 mac地址要 copy 认证机的mac。
--end----
转载注明来源: 本文链接 https://www.cnblogs.com/osnosn/p/19309459.html
来自 osnosn的博客 https://www.cnblogs.com/osnosn/ .

浙公网安备 33010602011771号