TC+Iptables+htb(样例)

40 篇文章 1 订阅

原文地址 : http://blog.csdn.net/maotianwang/article/details/8485029

前言:文章内容比较多,也相对比较复杂些,看的过程中希望用脑袋认真把每一个过程记在脑袋瓜上,这样可以加深对这章的了解,我本人也是反复看了多次 才有所收益。进入正题:队列规则 (qdisc):公平进出。例子:好比在一条高速公路上,遵守进出的原则。队列规则是用来管制网络流量的规则,若没有设置,是fifo 先进先出,既无管理制度QOS队列规则有两中:如下CBQ (Class Based Queueing) 的设定比较复杂,但可设定的东西较多,弹性较大
HTB (Hierarchy Token Bucket) 是 CBQ 的改良版 ,设定较精简,效能也比 CBQ 来的好类别:(CLASS):把不同的应用看成一个类别,比如玩游戏,下载,看电影。这属于不同的类别,根据情况将这些类型设定不同的优先权利过滤器:检查封包该属于哪个类别,并给予归类的东西,称作过滤器。
Linux QoS 过滤器有两种:u32,fw
u32: 设定比较复杂,需懂封包结构,才有办法设定
fw:fw 是靠 iptables 给封包贴标签,设定比较简单
此篇教学,以 fw 为主。---------------------------------稍微看下----------------------------iptables 指令:
Linux 负责防火墙功能的,是一个叫 NetFilter 的模块,而 iptables 就是用来设定 NetFilter 模块的指令。

tc 指令:
Linux 负责QoS (频宽管制) 功能的,是一个叫 Traffic Control 的模块,而 tc 就是用来设定 Traffic Control 模块的指令。

shell script:
俗称脚本文件(剧本),Linux 操作系统会依照里面的内容,逐行执行程序
类似 windows 下的 .bat 自动批次文件,但 shell script 功能比较强-------------------------------the end------------------------------进入TC规则:例子假设 :对外网卡:eth1
对内网卡:eth0内部网络有三台计算机给他们设置不同频宽,以保证顺畅。其中设定一个default 它不属于这三台机器,是以在某中特殊情况下加电脑。一般默认给他加上去,HTB 队列规则用的是 KByte/s (本例子中下载256KB 上传64KB)[保证频宽]是指在任何情况下别的[类别]都无法夺取此频宽。频宽的设置:剩余频宽 (可借用的频宽量) = 总频宽 - 保证频宽总和

最大下载 = 保证下载 + 下载剩余频宽
最大上传 = 保证上传 + 上传剩余频宽[最大频宽]指的是无论如何,该「类别」能使用的频宽不会超过这个数字优先劝pfifo 数字越小权利越大,反之则小。Linux QoS 有三要素:队列规则、类别、过滤器 分下载和上传上传是在外部网卡,下载是在内部网卡--------------------------------TC指令-----------------------------tc 指令 ( /etc/rc.d/rc.local ) :

CODE:

#!/bin/sh
#
# Coyote local command init script

# 清除 eth1 所有队列规则
tc qdisc del dev eth1 root 2>/dev/null

# 定义最顶层(根)队列规则,并指定 default 类别编号
tc qdisc add dev eth1 root handle 10: htb default 70

# 定义第一层的 10:1 类别 (总频宽)
tc class add dev eth1 parent 10: classid 10:1 htb rate 64kbps ceil 64kbps

# 定义第二层叶类别
# rate 保证频宽,ceil 最大频宽,prio 优先权
tc class add dev eth1 parent 10:1 classid 10:10 htb rate 2kbps ceil 4kbps prio 2
tc class add dev eth1 parent 10:1 classid 10:20 htb rate 2kbps ceil 4kbps prio 2
tc class add dev eth1 parent 10:1 classid 10:30 htb rate 32kbps ceil 40kbps prio 3


tc class add dev eth1 parent 10:1 classid 10:40 htb rate 8kbps ceil 16kbps prio 0
tc class add dev eth1 parent 10:1 classid 10:50 htb rate 4kbps ceil 12kbps prio 1
tc class add dev eth1 parent 10:1 classid 10:60 htb rate 4kbps ceil 12kbps prio 1
tc class add dev eth1 parent 10:1 classid 10:70 htb rate 4kbps ceil 12kbps prio 1


# 定义各叶类别的队列规则
# parent 类别编号,handle 叶类别队列规则编号
# 由于采用 fw 过滤器,所以此处使用 pfifo 的队列规则即可
tc qdisc add dev eth1 parent 10:10 handle 101: pfifo
tc qdisc add dev eth1 parent 10:20 handle 102: pfifo
tc qdisc add dev eth1 parent 10:30 handle 103: pfifo
tc qdisc add dev eth1 parent 10:40 handle 104: pfifo
tc qdisc add dev eth1 parent 10:50 handle 105: pfifo
tc qdisc add dev eth1 parent 10:60 handle 106: pfifo
tc qdisc add dev eth1 parent 10:70 handle 107: pfifo

# 设定过滤器
# 指定贴有 10 标签 (handle) 的封包,归类到 10:10 类别,以此类推
tc filter add dev eth1 parent 10: protocol ip prio 100 handle 10 fw classid 10:10
tc filter add dev eth1 parent 10: protocol ip prio 100 handle 20 fw classid 10:20
tc filter add dev eth1 parent 10: protocol ip prio 100 handle 30 fw classid 10:30
tc filter add dev eth1 parent 10: protocol ip prio 100 handle 40 fw classid 10:40
tc filter add dev eth1 parent 10: protocol ip prio 100 handle 50 fw classid 10:50
tc filter add dev eth1 parent 10: protocol ip prio 100 handle 60 fw classid 10:60
tc filter add dev eth1 parent 10: protocol ip prio 100 handle 70 fw classid 10:70



# QoS eth0 下载方面
#

# 清除 eth0所有队列规则
tc qdisc del dev eth0 root 2>/dev/null

# 定义最顶层(根)队列规则,并指定 default 类别编号
tc qdisc add dev eth0 root handle 10: htb default 70

# 定义第一层的 10:1 类别 (总频宽)
tc class add dev eth0 parent 10: classid 10:1 htb rate 256kbps ceil 256kbps

# 定义第二层叶类别
# rate 保证频宽,ceil 最大频宽,prio 优先权
tc class add dev eth0 parent 10:1 classid 10:10 htb rate 2kbps ceil 32kbps prio 2
tc class add dev eth0 parent 10:1 classid 10:20 htb rate 2kbps ceil 32kbps prio 2
tc class add dev eth0 parent 10:1 classid 10:30 htb rate 32kbps ceil 212kbps prio 3

tc class add dev eth0 parent 10:1 classid 10:40 htb rate 16kbps ceil 196kbps prio 0
tc class add dev eth0 parent 10:1 classid 10:50 htb rate 8kbps ceil 188kbps prio 1
tc class add dev eth0 parent 10:1 classid 10:60 htb rate 8kbps ceil 188kbps prio 1
tc class add dev eth0 parent 10:1 classid 10:70 htb rate 8kbps ceil 188kbps prio 1

# 定义各叶类别的队列规则
# parent 类别编号,handle 叶类别队列规则编号
tc qdisc add dev eth0 parent 10:10 handle 101: pfifo
tc qdisc add dev eth0 parent 10:20 handle 102: pfifo
tc qdisc add dev eth0 parent 10:30 handle 103: pfifo
tc qdisc add dev eth0 parent 10:40 handle 104: pfifo
tc qdisc add dev eth0 parent 10:50 handle 105: pfifo
tc qdisc add dev eth0 parent 10:60 handle 106: pfifo
tc qdisc add dev eth0 parent 10:70 handle 107: pfifo

# 设定过滤器
tc filter add dev eth0 parent 10: protocol ip prio 100 handle 10 fw classid 10:10
tc filter add dev eth0 parent 10: protocol ip prio 100 handle 20 fw classid 10:20
tc filter add dev eth0 parent 10: protocol ip prio 100 handle 30 fw classid 10:30
tc filter add dev eth0 parent 10: protocol ip prio 100 handle 40 fw classid 10:40
tc filter add dev eth0 parent 10: protocol ip prio 100 handle 50 fw classid 10:50
tc filter add dev eth0 parent 10: protocol ip prio 100 handle 60 fw classid 10:60
tc filter add dev eth0 parent 10: protocol ip prio 100 handle 70 fw classid 10:70
需注意(rate 后面的数字:保证频宽,ceil 后面的数字:最大频宽,单位只有:KByte/s ,不过上面要写 kbps,因为这是 HTB 的规定语法)

---------------------------iptables指令 ---------------------------

CODE:

# uploads
# 设定上传方面,先利用 iptables 给封包贴标签,再交由 fw 过滤器进行过滤

iptables -t mangle -A PREROUTING -s 192.168.1.6 -m layer7 --l7proto dns -j mark --set-mark 10
iptables -t mangle -A PREROUTING -s 192.168.1.6 -m layer7 --l7proto smtp -j mark --set-mark 20
iptables -t mangle -A PREROUTING -s 192.168.1.6 -m layer7 --l7proto http -j mark --set-mark 30

iptables -t mangle -A PREROUTING -s 192.168.1.1 -j mark --set-mark 40
iptables -t mangle -A PREROUTING -s 192.168.1.2 -j mark --set-mark 50
iptables -t mangle -A PREROUTING -s 192.168.1.3 -j mark --set-mark 60

# downloads
# 下载方面

iptables -t mangle -A POSTROUTING -d 192.168.1.6 -m layer7 --l7proto dns -j mark --set-mark 10
iptables -t mangle -A POSTROUTING -d 192.168.1.6 -m layer7 --l7proto smtp -j mark --set-mark 20
iptables -t mangle -A POSTROUTING -d 192.168.1.6 -m layer7 --l7proto http -j mark --set-mark 30

iptables -t mangle -A POSTROUTING -d 192.168.1.1 -j mark --set-mark 40
iptables -t mangle -A POSTROUTING -d 192.168.1.2 -j mark --set-mark 50
iptables -t mangle -A POSTROUTING -d 192.168.1.3 -j mark --set-mark 60

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值