分享
 
 
 

使用 IMQ+HTB+iptable 统一流量控制心得

王朝other·作者佚名  2008-05-21
窄屏简体版  字體: |||超大  

IMQ 是中介队列设备的简称,是一个虚拟的网卡设备,与物理网卡不同的是,通过它可以进行全局的流量整形,不需要一个网卡一个网卡地限速。这对有多个ISP接入的情况特别方便。配合 Iptables,可以非常方便地进行上传和下载限速。

一、网络环境简介

目的站点 (Internet)

IP: 218.x.x.x (用 TARGET_IP 表示)

路由器 (Router)

eth1_外网IP: 221.x.x.x (用INET_IP表示)

eth0_内网IP: 192.168.0.1 (用 GW_IP 表示)

内网客户机 (PC)

IP: 192.168.0.2 (用 LAN_IP 表示)

二、数据包流程分析

要明白怎么控制流量,在什么地方控制,首先得弄清楚数据包从进网卡到出网卡这个过程中,内核对数据包做了哪些操作,具体可以看这里的图示: http://www.docum.org/docum.org/kptd/

下面就客户机上传下载时,数据包的流程走向进行一些分析

下载流程

========

PC 向 Internet 发起数据下载请求

Internet 回应相应数据

数据包通过 eth1 流入 Router [src: TARGET_IP, dst: INET_IP]

Router 重写目的地址(DNAT) [src:TARGET_IP, dst: LAN_IP]

<==================== 流量控制点 ==========================>

转发到局域网网卡 eth0

通过 eth0 流出 Router, 进入局域网

PC 接收到数据

显然,要控制 PC 的下载速率,在 DNAT 之后可以做到

小结: 下载控制, 控制外网向客户机发送数据的速率

(在 DNAT之后, iptables 的 POSTROUTING 链)

上传流程

========

Internet 向 PC 发起数据上传请求

PC 回应相应数据

数据包通过 eth0 流入 Router [src: LAN_IP, dst: TARGET_IP]

<================== 流量控制点 =======================>

Router 重写源标地址(SNAT) [src:INET_IP, dst: TARGET_IP]

转发到广域网网卡 eth1

通过 eth1 流出 Router, 进入 Internet

Internet 接收到数据

显然,要控制 PC 的上传速率,在 SNAT 之前可以做到

小结: 上传控制, 控制客户机向外网发送数据的速率

(在 SNAT之前, iptables 的 PREROUTING 链)

三、让Linux支持 IMQ

Linux 内核以及 Iptables 并不直接支持 IMQ, 需要打补丁才行.

我用的是 linux-2.6.18, iptables-1.3.6,可以从 http://www.linuximq.net/

或 http://www.digriz.org.uk/jdg-qos-script/ 下载到

打补丁的过程就不多说了....

内核支持 IMQ 后,通过 ip link show 可以看到有 imq0 这样的设备

(有多少个取决于你编译内核时的配置,默认有2个)

四、配合 Iptables 限速

假设 imq0 用于下载限速,imq1 用于上传限速, 先设置好 imq 设备的队列规定、过滤器之类的,如同真实网卡一样

IMQ 规则定义好后,只需在 iptables 的 mangle 链中加入2条规则即可:

#### 下载限速, 出口 eth0

iptables -t mangle -A POSTROUTING -o eth0 -j IMQ --todev 0

#### 上传限速,入口 eth0

iptables -t mangle -A PREROUTING -i eth0 -j IMQ --todev 1

五、单机限速

下载限速: 判断数据包的目的 IP

上传限速: 判断数据包的来源 IP

提示: 由于上传限速流控点是在 SNAT 之前,那是数据包里面还含有局域网IP的信息,故可以直接根据IP源信息来定位,无需再通过 iptables 做 MARK.

TC 例子:

### 限制 192.168.0.2 下载 100K,最大 120K

tc class add dev imq0 parent 1:1 classid 1:10 htb

rate 100kbps ceil 120kbps burst 10kb prio 2

tc qdisc add dev imq0 parent 1:10 handle 10 sfq perturb 10

tc filter add dev imq0 protocol ip parent 1:0 prio 100 u32

match ip dst 192.168.0.2 classid 1:10

### 限制 192.168.0.2 上传 40K,最大 50K

tc class add dev imq1 parent 1:1 classid 1:10 htb

rate 40kbps ceil 50kbps burst 10kb prio 2

tc qdisc add dev imq1 parent 1:10 handle 10 sfq perturb 10

tc filter add dev imq1 protocol ip parent 1:0 pr

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有