本文目录导读:

针对 QuickQ(通常指基于 OpenWrt 或类似系统的路由器,GL.iNet 等品牌),使用 WireGuard 进行策略路由时,核心需求通常是:让某些设备或流量走 WireGuard VPN,其他流量走正常宽带。
“标记”是实现策略路由的关键步骤,通常使用 iptables(防火墙)的 MARK(标记)功能 配合 ip rule(策略路由规则) 来完成。
以下是在 QuickQ 系统中标记 WireGuard 流量的标准操作步骤和原理:
核心原理
- 创建路由表:新建一个专用的路由表(如
vpn表),默认路由指向 WireGuard 接口。 - 标记流量:使用
iptables的mangle表,根据条件(源IP、目标端口、协议等)给数据包打上特定标记(如0x1)。 - 策略路由:使用
ip rule规则,将所有带有该标记的数据包,强制使用vpn路由表。
具体操作步骤(以 QuickQ/OpenWrt 为例)
你可以通过 SSH 命令行 或 QuickQ 后台的“高级设置” > “自定义脚本” 来实现。
按“源IP/设备”标记(最常用,让某台设备走VPN)
假设你想让局域网内 IP 为 168.1.100 的设备 所有流量走 WireGuard,其他设备走正常线路。
创建自定义路由表(如下一步中一起配置,或先手动执行)
echo "100 vpn" >> /etc/iproute2/rt_tables
配置策略路由规则(在QuickQ的“自定义脚本”或启动脚本中)
# 在防火墙启动后执行(/etc/firewall.user 或 启动脚本) # (a) 在 mangle 表里,标记来自 192.168.1.100 的数据包 iptables -t mangle -A PREROUTING -s 192.168.1.100 -j MARK --set-mark 0x1 # (b) 创建一个新的路由表(名为 vpn,编号100) # 添加默认路由到你的 WireGuard 接口(假设接口名是 wg0) ip route add default dev wg0 table 100 # (c) 设置策略路由:所有标记了 0x1 的流量,查路由表100 ip rule add fwmark 0x1 table 100 priority 100 # (d) (可选)防止 VPN 流量回环,添加本地路由 ip route add 192.168.1.0/24 dev br-lan table 100
解释:
-t mangle:iptables 的 mangle 表专门用于修改数据包标志。-A PREROUTING:在数据包刚进入路由器(还没做路由决策前)进行标记。-s 192.168.1.100:匹配源IP。-j MARK --set-mark 0x1:给匹配到的数据包打上标签1。ip rule add fwmark 0x1:告诉系统,看到标签为1的数据包,就去查编号100的路由表。ip route add default dev wg0 table 100:告诉路由表100,这些数据的默认出口是wg0。
按“目标”标记(例如仅让访问特定网站走VPN)
假设你想让所有访问 8.8.8 的数据走 WireGuard。
iptables -t mangle -A PREROUTING -d 8.8.8.8 -j MARK --set-mark 0x1 # 其他规则同上(ip route add default dev wg0 table 100 和 ip rule ...)
标记并排除本地流量(避免断网)
如果你标记了所有流量,需要确保路由器自己发起的 DNS 请求(去 WireGuard 对端)不要被路由策略干扰,否则可能无法连接对端。
# 非常重要:允许 WireGuard 对端的连接(假设对端IP是 10.0.0.1) iptables -t mangle -A PREROUTING -s 192.168.1.100 -d 10.0.0.1 -j RETURN
在 QuickQ 图形界面如何操作(如果支持)
- 进入:QuickQ 后台 > 应用 > VPN 隧道 > WireGuard。
- 策略:部分 QuickQ 固件自带“策略路由”选项卡,你可以直接选择:
- “指定设备走 VPN”。
- “指定目标走 VPN”。
- 图形界面本质上是自动生成了上述 iptables 命令。
- 如果没选项:你需要开启“高级”或“SSH”功能,手动执行上述命令。
常见问题和确认方法
-
如何确认标记成功?
# 查看 mangle 表的规则 iptables -t mangle -vL PREROUTING
应该能看到
MARK set 0x1和匹配的数据包计数(pkts数字在增长)。 -
如何查看路由规则?
# 查看所有策略路由规则 ip rule show # 应该看到类似:100: from all fwmark 0x1 lookup vpn
-
重启会失效怎么办? 将上述命令添加到
系统>启动项>本地启动脚本中,或者/etc/firewall.user文件中。
总结关键点
- 标记工具:
iptables -t mangle -A PREROUTING -j MARK --set-mark X。 - 匹配条件:
-s(源IP/段)、-d(目标IP)、-p(协议如 tcp/udp)、--dport(端口)。 - 路由映射:
ip rule add fwmark X table Y+ip route add default dev wg0 table Y。 - 接口名:通常是
wg0,你可以用ip link show确认。
如果你能告诉我你想让哪台设备或哪个网站走 WireGuard,我可以给出更精确的命令。