使用ipp2p+iptables实现p2p协议的限流
作者:lishicun
1、下载linux 2.4.31内核,解开
2、从http://ebtables.sourceforge.net/ 下载ebtables-brnf内核补丁,用diff命令为内核打上补丁
3、下载iptables最新的内核版本和用户端版本,安装好
4、从www.ipp2p.org 下载ipp2p软件包,编译,安装
5、编译linux内核,注意要把iptables, QoS的相关选项打开,最好把所有的相关项都编译成模块。
6、编写如下的脚本
#!/bin/sh
# the modules used here are: cls_fw sch_htb ipt_ipp2p ipt_MARK ipt_mark ipt_CONNMARK iptable_mangle iptable_filter ip_tables
iptables -F -t mangle
iptables -A PREROUTING -t mangle -p tcp -j CONNMARK --restore-mark
iptables -A PREROUTING -t mangle -p tcp -m mark ! --mark 0 -j ACCEPT
iptables -A PREROUTING -t mangle -p tcp -m ipp2p --ipp2p -j MARK --set-mark 1
iptables -A PREROUTING -t mangle -p tcp -m mark --mark 1 -j CONNMARK --save-mark
tc class del dev eth0 classid 1:12
tc class del dev eth0 classid 1:10
tc class del dev eth0 classid 1:1
tc qdisc del dev eth0 root
tc qdisc add dev eth0 root handle 1: htb default 12
tc class add dev eth0 parent 1: classid 1:1 htb rate 1000mbit ceil 1000mbit
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 100kbit
# ceil 100kbps
# tc class add dev eth0 parent 1:1 classid 1:11 htb rate 10kbps ceil 100kbps
tc class add dev eth0 parent 1:1 classid 1:12 htb rate 1000mbit ceil 1000mbit
tc qdisc add dev eth0 parent 1:10 handle 20: sfq perturb 10
# pfifo limit 5
# tc qdisc add dev eth0 parent 1:11 handle 30: pfifo limit 5
tc qdisc add dev eth0 parent 1:12 handle 40: sfq perturb 10
tc filter add dev eth0 parent 1:0 protocol ip prio 4 handle 1 fw classid 1:10
#tc filter add dev eth1 parent 2:0 protocol ip prio 4 handle 1 fw classid 2:11
在这个脚本中,tc class add dev eth0 parent 1:1 classid 1:10 htb rate 100kbit 这一句最为重要,其中的100kbit表示把流速限制在100kbit。