免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 34599 | 回复: 8
打印 上一主题 下一主题

[网络管理] 发布一个速度匹配的内核模块(hashspeed) [复制链接]

论坛徽章:
0
1 [报告]
发表于 2008-01-02 19:46 |显示全部楼层
不知道可不可以和IPRANGE一起匹配使用,我试试先!

iptables -I FORWARD 18 -m iprange --src-range 192.168.1.12-192.168.80 -m hashspeed \! --hashspeed-bytes 256K --hashspeed-mode dstip --hashspeed-name dlimit -j DROP

我的编译成功了,但是运行上面这一句提示:iptables: No chain/target/match by that name
可是用iptables -m hashspeed --help 显示
hashspeed v1.3.8 options:
required parameter: <hashspeed-name>  <hashspeed-mode>  <hashspeed-bytes|hashspeed-packets>
only one revert parameter is accepted, meaning ! hashspeed-bytes or ! hashspeed-packets or ! <hashspeed-bytes || hashspeed-packets>
[--hashspeed-bytes <avg>]       Bytes per second unless followed by K M postfixes
[--hashspeed-bytes-burst <num>] max bytes a burst, default avg*0.1
[--hashspeed-packets <num>]             [Packets per second]
[--hashspeed-packets-burst <num>]       max packets a burst, default 5
--hashspeed-mode <mode>         mode is a comma-separated list of
                                        dstip,srcip
--hashspeed-name <name>         name for /proc/net/ipt_hashspeed/
[--hashspeed-htable-size <num>] number of hashtable buckets
[--hashspeed-htable-max <num>]  number of hashtable entries
[--hashspeed-htable-gcinterval] interval between garbage collection runs
[--hashspeed-htable-expire]     after which time are idle entries expired?
这应该是正常安装上去了呀!
下面是安装记录
[root@mack2050 hashspeed-0.1]# make
make -C /lib/modules/2.6.22.8/build M=/root/hashspeed-0.1 modules
make[1]: Entering directory `/usr/src/linux-2.6.22.8'
  CC [M]  /root/hashspeed-0.1/ipt_hashspeed.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /root/hashspeed-0.1/ipt_hashspeed.mod.o
  LD [M]  /root/hashspeed-0.1/ipt_hashspeed.ko
make[1]: Leaving directory `/usr/src/linux-2.6.22.8'
cc -O2 -Wall -DIPTABLES_VERSION=\"1.3.8\" -I/usr/src/iptables-1.3.8/include -fPIC -c libipt_hashspeed.c
cc -shared -o libipt_hashspeed.so libipt_hashspeed.o
[root@mack2050 hashspeed-0.1]# make install
cp ipt_hashspeed.ko /lib/modules/2.6.22.8/kernel/net/ipv4/netfilter/
cp libipt_hashspeed.so /lib/iptables/

请大家指点,谢谢!

[ 本帖最后由 mack2050 于 2008-1-2 20:01 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-01-02 20:04 |显示全部楼层
谢谢,楼主,我马上试试!

论坛徽章:
0
3 [报告]
发表于 2008-01-02 20:07 |显示全部楼层
确实可以了,不过因为我是远程做的,所以现在还不能测试是否能达到效果,有了结果我会马上回贴的!
对了,请楼主解释一下depmod -a的意义所在?还有如果象我这样针对一段IP来做的话,如果这一段的IP当中有某一个人的流量很大的话,虽然限制了是不是还是会影响到他人,这个模块是否会有象TC一样轮询的机制,来保证其它人不受影响?

论坛徽章:
0
4 [报告]
发表于 2008-01-02 21:02 |显示全部楼层
您说的这个意思是指对每一个IP限制的带宽,而不是一批IP共享这个带宽是吗?按这样理解的话,就是前面我的那个语句指的是从12-80的这些IP,每个的最高上限为200K,任一个超过了就会阻止是吗?

还有您最后这个程序具体是怎么使用的呀?

论坛徽章:
0
5 [报告]
发表于 2008-01-02 22:33 |显示全部楼层
iptables -I FORWARD 18 -m iprange --src-range 192.168.1.12-192.168.80 -m hashspeed \! --hashspeed-bytes 256K --hashspeed-mode dstip --hashspeed-name dlimit -j DROP


我这句是想限制下载速度的,那么IPRANGE 应该是用--dst-range才对吧?

论坛徽章:
0
6 [报告]
发表于 2008-01-03 09:16 |显示全部楼层

测试没有成功

我用了这句-A FORWARD -o eth1 -m iprange --dst-range 192.168.1.12-192.168.80.0 -m hashspeed  ! --hashspeed-bytes 60K --hashspeed-mode dstip --hashspeed-name dlimit -j DROP
可是在长沙电信上测试下载还是有800K的流量呀?另ETH1是连接外网的接口,这个没错吧?后来把ETH1改成ETH0内网的接口,结果整个内网都上不了网了,删了这句还是不行,REBOOT一次才正常!!!
下面是我的配置
# Generated by iptables-save v1.3.8 on Thu Jan  3 09:13:32 2008
*filter
:INPUT DROP [55960:3875019]
:FORWARD DROP [68908:3919599]
:OUTPUT ACCEPT [21416:10431208]
-A INPUT -i eth0 -j ACCEPT
-A INPUT -p tcp -m multiport --dports 22,23,6160 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m multiport --dports 20,21 -j ACCEPT
-A FORWARD -p tcp -m multiport --dports 135,137,138,139,445 -j DROP
-A FORWARD -p udp -m multiport --dports 135,137,138,139,445 -j DROP
-A FORWARD -m iprange --src-range 192.168.1.81-192.168.1.90 -j ACCEPT
-A FORWARD -m iprange --dst-range 192.168.1.81-192.168.1.90 -j ACCEPT
-A FORWARD -m iprange --src-range 192.168.1.15-192.168.1.16 -j ACCEPT
-A FORWARD -m iprange --dst-range 192.168.1.15-192.168.1.16 -j ACCEPT
-A FORWARD -s 192.168.1.109 -p tcp -m tcp --dport 7001 -j ACCEPT
-A FORWARD -s 192.168.1.109 -p tcp -m tcp --dport 98 -j ACCEPT
-A FORWARD -m mac --mac-source 00:E0:4C:39:04:4E -m time --timestart 02:01 --timestop 19:58 -j DROP
-A FORWARD -m mac --mac-source 00:E0:4C:39:04:4E -m time --timestart 19:59 --timestop 02:00 -j ACCEPT
-A FORWARD -m mac --mac-source 00:C0:26:AC:CD:A6 -m time --timestart 19:59 --timestop 02:00 -j ACCEPT
-A FORWARD -m mac --mac-source 00:E0:4C:4A:80:F1 -m time --timestart 19:59 --timestop 02:00 -j ACCEPT
-A FORWARD -s 192.168.1.0/255.255.255.0 -m time --timestart 20:00 --timestop 08:20 -j DROP
-A FORWARD -p icmp -m icmp --icmp-type any -j ACCEPT
-A FORWARD -m ipp2p --ipp2p -j DROP
-A FORWARD -m ipp2p --xunlei -j DROP
-A FORWARD -p udp -m udp --dport 15000 -j DROP
-A FORWARD -o eth1 -m iprange --dst-range 192.168.1.12-192.168.80.0 -m hashspeed  ! --hashspeed-bytes 60K --hashspeed-mode dstip --hashspeed-name dlimit -j DROP
-A FORWARD -p tcp -m multiport --dports 53,21,80,443,444,194,119,110,25,161,22,23,91,6911,3004 -j ACCEPT
-A FORWARD -p udp -m multiport --dports 53,123,8000 -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -p tcp -m multiport --sports 23,443,444 -j ACCEPT
COMMIT
# Completed on Thu Jan  3 09:13:32 2008
# Generated by iptables-save v1.3.8 on Thu Jan  3 09:13:32 2008
*nat
REROUTING ACCEPT [412791:24627481]
OSTROUTING ACCEPT [148:7462]
:OUTPUT ACCEPT [1211:59074]
-A PREROUTING -i ppp0 -p udp -m udp --dport 7324 -j DNAT --to-destination 192.168.1.86:7324
-A PREROUTING -i ppp0 -p tcp -m tcp --dport 7324 -j DNAT --to-destination 192.168.1.86:7324
-A PREROUTING -i ppp0 -p udp -m udp --dport 14672 -j DNAT --to-destination 192.168.1.86:14672
-A PREROUTING -i ppp0 -p tcp -m tcp --dport 14662 -j DNAT --to-destination 192.168.1.86:14662
-A PREROUTING -i ppp0 -p tcp -m tcp --dport 8015 -j DNAT --to-destination 192.168.1.15:80
-A PREROUTING -i ppp0 -p tcp -m tcp --dport 3000 -j DNAT --to-destination 192.168.1.15:3000
-A PREROUTING -i ppp0 -p tcp -m tcp --dport 3001 -j DNAT --to-destination 192.168.1.15:3001
-A PREROUTING -i ppp0 -p tcp -m tcp --dport 8016 -j DNAT --to-destination 192.168.1.16:80
-A PREROUTING -i ppp0 -p tcp -m tcp --dport 3003 -j DNAT --to-destination 192.168.1.16:3003
-A PREROUTING -i ppp0 -p tcp -m tcp --dport 3002 -j DNAT --to-destination 192.168.1.16:3002
-A PREROUTING -i ppp0 -p tcp -m tcp --dport 8888 -j DNAT --to-destination 192.168.1.86:3389
-A POSTROUTING -o ppp0 -j MASQUERADE
COMMIT
# Completed on Thu Jan  3 09:13:32 2008
我测试的IP是22,我侍会儿再试试不带IPRANGE 匹配看能不能成功!

[ 本帖最后由 mack2050 于 2008-1-3 09:33 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2008-01-03 12:36 |显示全部楼层

回复 #24 springwind426 的帖子

我的线路是电信的以太网接入,不用ADSL设备,但是要进行虚拟拨号才可以,所以确实用到了PPP0

-A FORWARD -o eth0 -m iprange --dst-range 192.168.1.12-192.168.80.0 -m hashspeed  /! --hashspeed-bytes 60K --hashspeed-mode dstip --hashspeed-name dlimit -j DROP

我现在是想控制内网的下载速度,限制每个IP的最高速率为60K,但是一运行这条命令之后,所有内网的机器都不能打开网页了,QQ也上不了,不过能PING通外网,去掉这一句情况还是一样,后来重启才好的,现在都不能再做测试,等下班了才好再继续测试!另我的SHELL查了一下,应该是/bin/bash,是否应该不要/   ?

[ 本帖最后由 mack2050 于 2008-1-3 12:37 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2008-01-03 15:54 |显示全部楼层
我想那是我的笔误了,我是按这个输的-A FORWARD -o eth1 -m iprange --dst-range 192.168.1.12-192.168.80.0 -m hashspeed  \! --hashspeed-bytes 60K --hashspeed-mode dstip --hashspeed-name dlimit -j DROP 可能是笔误,我下班再试一次!

论坛徽章:
0
9 [报告]
发表于 2008-01-03 18:29 |显示全部楼层
呵呵,发布最新测试反馈!
一切顺利,能把我想要的IP段限速在我指定的范围内,不过我的网关(192.168.1.11)和广播地址(192.168.1.255)也在其中,暂时似乎没有什么影响,大家看看觉得会不会有什么问题!

-A FORWARD -o eth0 -m iprange ! --dst-range 192.168.1.81-192.168.1.90 -m hashspeed  ! --hashspeed-bytes 60K --hashspeed-mode dstip --hashspeed-name dlimit -j DROP
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP