2-iptables mangle 规则

QOS的整个流程是:根据各种条件,如IP地址,数据包大小,上行,下行,这个信息在iptables里面都可以捕获到。然在iptables根据这些规则设置对应的mark,设置完mark,tc规则规则里面根据不同的mark执行不同的内容,如队列分配,限制带宽,流量分配算法。

0 数据流向
  • -i 指定数据包进入 PREROUTING、INPUT、FORWARD链时经由的接口。
  • -o 指定数据包出去 FORWARD、OUTPUT、POSTROUTING链时经由的接口。

当我们开启防火墙功能后,报文需要经过的路径是有区别的,如下图所示:
image.png

报文的流向:

  • 到本机某进程的报文: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 $
wan 到 lan通信的实验,lan是服务端 - iptables -t raw -N wan_to_lan_counter_pre_raw   - iptables -t raw -A wan_to_lan_counter_pre_raw  -i inf.4091 -p tcp  -s 192.168.3.101 -d 192.168.3.1 -j RETURN - iptables -t raw -I PREROUTING   -i inf.4091 -p tcp  -s 192.168.3.101 -d 192.168.3.1 -j wan_to_lan_counter_pre_raw   - iptables -t nat -N wan_to_lan_counter_pre_nat    - iptables -t nat -A wan_to_lan_counter_pre_nat   -i inf.4091 -p tcp  -s 192.168.3.101 -d 192.168.3.1 -j RETURN - iptables -t nat -I PREROUTING   -i inf.4091 -p tcp  -s 192.168.3.101 -d 192.168.3.1 -j wan_to_lan_counter_pre_nat   证明,在建立新的tcp连接时,后续不变,建立了DNAT转换 - iptables -t mangle -N wan_to_lan_counter_pre_man - iptables -t mangle -A wan_to_lan_counter_pre_man -i inf.4091 -p tcp  -s 192.168.3.101 -d 192.168.3.1 -j RETURN - iptables -t mangle -I PREROUTING -i inf.4091 -p tcp  -s 192.168.3.101 -d 192.168.3.1 -j wan_to_lan_counter_pre_man  计数 wan to lan通信计数 - iptables -t mangle -N wan_to_lan_counter_for_man - iptables -t mangle -A wan_to_lan_counter_for_man -i inf.4091 -p tcp  -s 192.168.3.101 -d 192.168.0.100 -j RETURN - iptables -t mangle -I FORWARD  -i inf.4091 -p tcp  -s 192.168.3.101 -d 192.168.0.100 -j wan_to_lan_counter_for_man 计数 lan to wan通信计数 - iptables -t filter -N wan_to_lan_counter_for_fil - iptables -t filter -A wan_to_lan_counter_for_fil -i inf.4091 -p tcp  -s 192.168.3.101 -d 192.168.0.100 -j RETURN - iptables -t filter -I FORWARD  -i inf.4091 -p tcp  -s 192.168.3.101 -d 192.168.0.100 -j wan_to_lan_counter_for_fil 计数 lan to wan通信计数 - iptables -t mangle -N wan_to_lan_counter_post_man - iptables -t mangle -A wan_to_lan_counter_post_man  -o inf.1 -p tcp  -s 192.168.3.101 -d 192.168.0.100 -j  RETURN - iptables -t mangle -I POSTROUTING   -o inf.1 -p tcp  -s 192.168.3.101 -d 192.168.0.100 -j wan_to_lan_counter_post_man - iptables -t nat -N wan_to_lan_counter_post_nat - iptables -t nat -A wan_to_lan_counter_post_nat -o inf.1 -p tcp  -s 192.168.3.101 -d 192.168.0.100 -j RETURN - iptables -t nat -I POSTROUTING   -o inf.1 -p tcp  -s 192.168.3.101 -d 192.168.0.100 -j wan_to_lan_counter_post_nat将以上指令写成正确格式
08-26
为什么11:22:33:44:55:66的设备进了class1而非默认类:iptables -t mangle -F iptables -t mangle -X iptables -t mangle -N zone_lan_csl iptables -t mangle -A FORWARD -j zone_lan_csl -i br0 iptables -t mangle -N zone_wan_csl iptables -t mangle -A FORWARD -j zone_wan_csl -i ae_wan@0 iptables -t mangle -N csl_lan_rule iptables -t mangle -A zone_lan_csl -j csl_lan_rule iptables -t mangle -N csl_lan_dev1 iptables -t mangle -A csl_lan_dev1 -j CONNMARK --set-xmark 0x1/0xffff iptables -t mangle -A csl_lan_dev1 -j MARK --set-xmark 0x1/0xffff iptables -t mangle -A csl_lan_dev1 -j ACCEPT iptables -t mangle -A zone_lan_csl -j csl_lan_dev1 iptables -t mangle -N csl_wan_dev1 iptables -t mangle -A csl_wan_dev1 -j CONNMARK --restore-mark --nfmask 0xffff --ctmask 0xffff iptables -t mangle -A csl_wan_dev1 -j MARK --set-xmark 0x1/0xffff iptables -t mangle -A csl_wan_dev1 -j ACCEPT iptables -t mangle -A zone_wan_csl -j csl_wan_dev1 iptables -t mangle -A csl_lan_rule -m mac --mac-source A1:2A:D4:FE:88:21 -j csl_lan_dev1 iptables -t mangle -N csl_lan_dev2 iptables -t mangle -A csl_lan_dev2 -j CONNMARK --set-xmark 0x2/0xffff iptables -t mangle -A csl_lan_dev2 -j MARK --set-xmark 0x2/0xffff iptables -t mangle -A csl_lan_dev2 -j ACCEPT iptables -t mangle -A zone_lan_csl -j csl_lan_dev2 iptables -t mangle -N csl_wan_dev2 iptables -t mangle -A csl_wan_dev2 -j CONNMARK --restore-mark --nfmask 0xffff --ctmask 0xffff iptables -t mangle -A csl_wan_dev2 -j MARK --set-xmark 0x2/0xffff iptables -t mangle -A csl_wan_dev2 -j ACCEPT iptables -t mangle -A zone_wan_csl -j csl_wan_dev2 iptables -t mangle -A csl_lan_rule -m mac --mac-source A6:2A:D4:FE:88:21 -j csl_lan_dev2 tc qdisc del dev ae_wan@0 root 2>/dev/null tc qdisc add dev ae_wan@0 root handle 3: htb default 0 # default tc class add dev ae_wan@0 parent 3: classid 3:0 htb rate 1000mbit ceil 1000mbit quantum 1500 tc qdisc add dev ae_wan@0 parent 3:0 handle 0: sfq perturb 10 # dev1 tc class add dev ae_wan@0 parent 3: classid 3:1 htb rate 20mbit ceil 20mbit quantum 1500 prio 3 tc qdisc add dev ae_wan@0 parent 3:1 handle 1: sfq perturb 10 tc filter add dev ae_wan@0 parent 3: protocol all prio 1 u32 match mark 0x1 0xffff flowid 3:1 # dev2 tc class add dev ae_wan@0 parent 3: classid 3:2 htb rate 10mbit ceil 10mbit quantum 1500 prio 3 tc qdisc add dev ae_wan@0 parent 3:2 handle 2: sfq perturb 10 tc filter add dev ae_wan@0 parent 3: protocol all prio 1 u32 match mark 0x2 0xffff flowid 3:2 # -- # # del: # tc filter del dev ae_wan@0 parent 3: protocol all prio 1 u32 match mark 0x2 0xffff flowid 3:12 # tc qdisc del dev ae_wan@0 handle 12: parent 3:12 # tc class del dev ae_wan@0 parent 3:1 classid 3:12 # -- tc qdisc del dev br0 root 2>/dev/null tc qdisc add dev br0 root handle 4: htb default 0 # default tc class add dev br0 parent 4: classid 4:0 htb rate 1000mbit ceil 1000mbit quantum 1500 prio 3 tc qdisc add dev br0 parent 4:0 handle 0: sfq perturb 10 # dev1 tc class add dev br0 parent 4: classid 4:1 htb rate 30mbit ceil 30mbit quantum 1500 prio 3 tc qdisc add dev br0 parent 4:1 handle 1: sfq perturb 10 tc filter add dev br0 parent 4: protocol all prio 1 u32 match mark 0x1 0xffff flowid 4:1 # dev2 tc class add dev br0 parent 4: classid 4:2 htb rate 20mbit ceil 20mbit quantum 1500 prio 3 tc qdisc add dev br0 parent 4:2 handle 2: sfq perturb 10 tc filter add dev br0 parent 4: protocol all prio 1 u32 match mark 0x2 0xffff flowid 4:2 # del: # tc class del dev br0 parent 4:1 classid 4:21 htb rate 30mbit ceil 30mbit quantum 1500 prio 3 # tc qdisc del dev br0 parent 4:21 handle 21: sfq perturb 10 # tc filter del dev br0 parent 4: protocol all prio 1 u32 match mark 0x1 0xffff flowid 4:21 # tc class change dev br0 parent 4:1 classid 4:21 htb rate 1000mbit ceil 1000mbit quantum 1500 prio 3
最新发布
10-24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Creator_Ly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值