QOS的整个流程是:根据各种条件,如IP地址,数据包大小,上行,下行,这个信息在iptables里面都可以捕获到。然在iptables根据这些规则设置对应的mark,设置完mark,tc规则规则里面根据不同的mark执行不同的内容,如队列分配,限制带宽,流量分配算法。
0 数据流向
- -i 指定数据包进入 PREROUTING、INPUT、FORWARD链时经由的接口。
- -o 指定数据包出去 FORWARD、OUTPUT、POSTROUTING链时经由的接口。
当我们开启防火墙功能后,报文需要经过的路径是有区别的,如下图所示:

报文的流向:
- 到本机某进程的报文:PREROUTING–>INPUT
- 由本机转发的报文:PREROUTING–>FORWARD–>POSTROUTING
- 由本机某进程发出的报文:OUTPUT–>POSTROUTING
对于QOS我们要做的是对转发的包进行规则处理,而内部的包不应该进行干预,另外我们的功能需求有总规则跟设备规则,设备规则要在总规则之前设置,这样才能符合总规则的要求。
根据上面的需求,所以将设备规则放在FORWARD里面,总规则放在POSTROUTING里面。
iptables的底层就是netfilter,根据不同的链在2、3、4层进行分布着,如prerouting在判断是否为本机地址前面,所以应该是在第2层,在上面的iptables数据流程都走完后,会走到底层的TC规则再走一次TC规则的数据流
一个链ACCEPT后,跳出这个链,可是接下去的链还是会经过,接着匹配
1.链初始化(标准链关联QOS链)
脚本启动后会调用ipt_first_setup,将mangle表里面关于QOS的信息全部清楚一边(-F -X),然后重新创建新的规则链(-N),将新的规则链接到对应的标准链上(-g)。
mangle表的5个链PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING
ipt_first_setup() {
ipt -t mangle -F QOS_MARK_${IFACE}
ipt -t mangle -X QOS_MARK_${IFACE}
ipt -t mangle -N QOS_MARK_${IFACE}
ipt -t mangle -F QOS_MARK_FORWARD_${IFACE}
ipt -t mangle -X QOS_MARK_FORWARD_${IFACE}
ipt -t mangle -N QOS_MARK_FORWARD_${IFACE}
ipt -t mangle -F QOS_OUTPUT_${IFACE}
ipt -t mangle -X QOS_OUTPUT_${IFACE}
ipt -t mangle -N QOS_OUTPUT_${IFACE}
ipt -t mangle -F QOS_INPUT_${IFACE}
ipt -t mangle -X QOS_INPUT_${IFACE}
ipt -t mangle -N QOS_INPUT_${IFACE}
ipt -t mangle -F QOS_RULES_${IFACE}
ipt -t mangle -X QOS_RULES_${IFACE}
ipt -t mangle -N QOS_RULES_${IFACE}
ipt -t mangle -F QOS_RULES_FORWARD_${IFACE}
ipt -t mangle -X QOS_RULES_FORWARD_${IFACE}
ipt -t mangle -N QOS_RULES_FORWARD_${IFACE}
ipt -t mangle -A POSTROUTING -o ${IFACE} -g QOS_MARK_${IFACE}
ipt -t mangle -A FORWARD -o ${IFACE} -g QOS_MARK_FORWARD_${IFACE}
ipt -t mangle -A OUTPUT -o ${IFACE} -g QOS_OUTPUT_${IFACE}
ipt -t mangle -A INPUT -i ${IFACE} -g QOS_INPUT_${IFACE}
ipt -t mangle -A QOS_OUTPUT_${IFACE} -j MARK --set-mark $

最低0.47元/天 解锁文章
480

被折叠的 条评论
为什么被折叠?



