使用 iptables 的数据包的默认标记

使用 iptables 的数据包的默认标记

我正在尝试在我的设备上设置 QOS 脚本番茄-启用WRT54G路由器。该脚本执行了我需要的基础操作(确保网络上的特定计算机的优先级低于其他计算机),但我对必须为来自所有其他计算机的传出流量定义特定规则这一事实感到不满意机器而不是使用某些“默认”行为。

具体来说,我想去掉用标记 11 和 12 标记数据包的两行。

iptables -t mangle -A PREROUTING -s 192.168.1.70 -j MARK --set-mark 10 
iptables -t mangle -A PREROUTING -s 192.168.1.70 -j RETURN
iptables -t mangle -A PREROUTING -m iprange --src-range 192.168.1.2-192.168.1.69 -j MARK --set-mark 11 
iptables -t mangle -A PREROUTING -m iprange --src-range 192.168.1.71-192.168.1.254 -j MARK --set-mark 12 
iptables -t mangle -A PREROUTING -j IMQ --todev 0 

我尝试在创建 qdisk 时删除它们(添加“默认 12”),但吞吐量急剧下降。我还尝试用以下任一方法标记所有数据包

iptables -t mangle -A PREROUTING -j MARK --set-mark 12

或者

iptables -t mangle -A PREROUTING -m mark --mark 0 -j MARK --set-mark 12

作为第一个或最后一个过滤规则,但这也不起作用。

这是完整的脚本...

TCA=“tc 类添加 dev br0”
TFA=“tc 过滤器添加 dev br0”
TQA="tc qdisc 添加 dev br0"
SFQ=“sfq 扰乱 10”
tc qdisc del dev br0 根
tc qdisc 添加 dev br0 根句柄 1:htb 默认 10
tc 类添加 dev br0 父级 1: classid 1:1 htb 速率 2400kbit
$TCA 父级 1:1 classid 1:10 htb 速率 2300kbit ceil 2400kbit prio 0
$TCA 父级 1:1 classid 1:11 htb 速率 10kbit ceil 2400kbit prio 1
$TCA 父级 1:1 classid 1:12 htb 速率 10kbit ceil 2400kbit prio 2
$TCA 父级 1:1 classid 1:13 htb 速率 10kbit ceil 2000kbit prio 4
$TQA 父级 1:10 句柄 10: $SFQ
$TQA 父级 1:11 句柄 11:$SFQ
$TQA 父级 1:12 句柄 12:$SFQ
$TQA 父级 1:13 句柄 13:$SFQ
$TFA 父 1:0 prio 0 协议 ip 句柄 10 fw flowid 1:10
$TFA 父 1:0 prio 1 协议 ip 句柄 11 fw flowid 1:11
$TFA 父 1:0 prio 2 协议 ip 句柄 12 fw flowid 1:12
$TFA 父 1:0 prio 4 协议 ip 句柄 13 fw flowid 1:13
iptables -t mangle -A POSTROUTING -p tcp --sport 80 -j MARK --set-mark 10
iptables -t mangle -A POSTROUTING -p tcp --sport 443 -j MARK --set-mark 11
iptables -t mangle -A POSTROUTING -p tcp --sport 995 -j MARK --set-mark 12
iptables -t mangle -A POSTROUTING -d 192.168.1.70 -j MARK --set-mark 13


TCAU="tc 类添加 dev imq0"
TFAU="tc 过滤器添加 dev imq0"
TQAU="tc qdisc 添加 dev imq0"
模组探针 IMQ
modprobe ipt_IMQ
ip 链接设置 imq0
tc qdisc del dev imq0 根
tc qdisc 添加 dev imq0 根句柄 1:htb
tc 类添加 dev imq0 父级 1:classid 1:1 htb 速率 700kbit
$TCAU 父级 1:1 classid 1:10 htb 速率 7kbit ceil 500kbit prio 4
$TCAU 父级 1:1 classid 1:11 htb 速率 30kbit ceil 700kbit prio 2
$TCAU 父级 1:1 classid 1:12 htb 速率 663kbit ceil 700kbit prio 2
$TQAU 父级 1:10 句柄 10: $SFQ
$TQAU 父级 1:11 句柄 11:$SFQ
$TQAU 父级 1:12 句柄 12:$SFQ
$TFAU 父级 1:0 优先级 4 协议 ip 句柄 10 fw flowid 1:10
$TFAU 父 1:0 prio 2 协议 ip 句柄 11 fw flowid 1:11
$TFAU 父 1:0 prio 2 协议 ip 句柄 12 fw flowid 1:12

iptables -t mangle -A PREROUTING -s 192.168.1.70 -j MARK --set-mark 10

#
# 我应该怎么做才能避免这两行并将其他所有内容标记为“12”?
#
iptables -t mangle -A PREROUTING -m iprange --src-range 192.168.1.2-192.168.1.69 -j MARK --set-mark 11
iptables -t mangle -A PREROUTING -m iprange --src-range 192.168.1.71-192.168.1.254 -j MARK --set-mark 12
iptables -t mangle -A PREROUTING -j IMQ --todev 0

答案1

我能够通过添加与每个数据包匹配的第一条规则来声明“默认操作”。看起来“mangle”表的行为与其他表不同,它尝试匹配每个规则,而不是在第一个匹配规则处停止。这是有道理的,因为人们可能想对同一个数据包进行多次修改......

# 所有内容都会进入默认队列,除非另一个规则匹配...
iptables -t mangle -A PREROUTING -s 192.168.1.0/24 -j MARK --set-mark 12
iptables -t mangle -A PREROUTING -s 192.168.1.70 -j MARK --set-mark 10
iptables -t mangle -A PREROUTING -j IMQ --todev 0

相关内容