12 12
发新话题
打印

[原创] LIUNX+NAT网吧网段限速透明代理脚本(版主帮我TEST一下)

本主题由 iamshiyu 于 2008-4-7 23:30 加入精华

LIUNX+NAT网吧网段限速透明代理脚本(版主帮我TEST一下)

本文网址:http://bbs.bitscn.com/82531 复制

首先我说明一下我这的网络环境
我这里上网用的是电信(ISP)公网IP+LIUNX代理服务器(算是简单路由器吧.呵呵)
LIUNX装双网卡
ETH0  为  内网IP
ETH1  为 外网IP
另外大家有好的IPTABLES规则防火强要在下面跟帖啊,我会把帖子整理出来(会注明哪位兄弟发的 )让大家(包括我)可以学习学习:P

好了,下面是我的限速脚本(请注意空格和大小写,好象记得LIUNX对大小有要求:) )  以下是我RC.LOCAL内容
注:()里是我的注解,如果有不对的请版主指出。

# !/bin/sh

touch   /var/lock/subsys/local
echo  1  > /proc/sys/net/ipv4/ip_forward

route add default  gw  10.0.0.0   (这是加入电信网关,如果你已设了不用这条)

DOWNLOAD=640Kbit     (640/8 =80K ,我这里限制下载最高速度只能80K)
UPLOAD=640Kbit           (640/8 =80K,上传速度也限制在80K)
INET=192.168.0.           (设置网段,根据你的情况填)
IPS=1                           (这个意思是从192.168.0.1开始)
IPE=200                        (我这设置是从IP为192.168.0.1-200这个网段限速,根据自已的需要改)
ServerIP=253                (网关IP)
IDEV=eth0
ODEV=eth1

/sbin/tc  qdisc  del  dev  $IDEV root handle 10:
/sbin/tc  qdisc  del  dev  $ODEV  root handle  20:
/sbin/tc  qdisc  add  dev $IDEV  root  handle  10: cbq  bandwidth  100Mbit avpkt  1000
/sbin/tc  qdisc  add  dev  $ODEV  root  handle  20: cbq bandwidth  1Mbit  avpkt  1000
/sbin/tc  class  add  dev $IDEV  parent 10:0  classid  10:1  cbq  bandwidth  100Mbit  rate 100Mbit  allot 1514  weight  1Mbit  prio  8  maxburst  20  avpkt  1000
/sbin/tc  class  add  dev  $ODEV  parent  20:0  classid  20:1 cbq  bandwidth  1Mbit  rate  1Mbit  allot  1514  weitht  10Kbit  prio  8  maxburst  20  avpkt  1000

COUNTER=$IPS
while  [   $COUNTER  -le  $IPE   ]
    do
/sbin/tc  class  add  dev  $IDEV   parent  10:1  classid  10:1$COUNTER  cbq  banwidth  100Mbit  rate  
$DOWNLOAD  allot  1514  weight  20Kbit  prio  5  maxburst  20  avpkt  1000  bounded
/sbin/tc  qdisc  add  dev  $IDEV  parent  10:1$COUNTER  sfq  quantum  1514b  perturb15
/sbin/tc  filter  add  dev  $IDEV  parent  10:0  protocol  ip  prio  100  u32  match  ipdst  $INET$COUNTER   flowid  10:1$COUNTER
      COUNTER=` expr  $COUNTER  +  1  `
done

iptables  -t  nat  -A  POSTROUTING  -o  eth1  -s  192.168.0.0/24  -J  MASQUERADE

(完)自行用 cat  /etc/rc.local  检查脚本,有好的IPTABLES规则防火强请跟贴.好让广大兄弟姐妹受益(包括我在内:) )

另外还可以装个SQUID做做CACHE服务器,会使你网吧打开网页的速度有显著提高..
Squid是什么?    (网上找的,让不知道的朋友有个认识.知道的高手就不用看了)  我现在用的是LIUNX+IPTALBLES+SQUID做代理,感觉很好用....
  Squid是一种用来缓冲Internet数据的软件。它是这样实现其功能的,接受来自人们需要下载的目标(object)的请求并适当地处理这些请求。也就是说,如果一个人想下载一web页面,他请求Squid为他取得这个页面。Squid随之连接到远程服务器(比如:http://squid.nlanr.net/)并向这个页面发出请求。然后,Squid显式地聚集数据到客户端机器,而且同时复制一份。当下一次有人需要同一页面时,Squid可以简单地从磁盘中读到它,那样数据迅即就会传输到客户机上。当前的Squid可以处理HTTP,FTP,GOPHER,SSL和WAIS等协议。但它不能处理如POP,NNTP,RealAudio以及其它类型的东西。

下面是我的SQUID配置文件,比较简单.但应付一般的足够了.如果想得到更多更全的SQUID配置要靠大家努力..
至于安装SQUID可以到网上找找资料,蛮多的.
以下是我的SQUID基本配置文件,我的SQUID安装在/ETC/SQUID目录下.所以
VI /ETC/SQUID/SQUID.CONF    ..  SQUID.CONF配置内容


http_port 3128     (代理,也就是缓存服务器端口)
visible_hostname   hostname     (hostname你的服务器名)
cache_dir ufs /var/spool/squid   1000  16  256   (缓存目录,大小)
cache_mem   20MB
cache_swap_low  90
cache_swap_high  95
httpd_accel_host  virtual
httpd_accel_port  80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
acl  all src  0.0.0.0/0.0.0.0
http_access allow  all

保存退出,squid -k check 检查代码,如果只做到这那么你还要到每台机的IE-工具-internet选项-连接-局域网设置里设置代理服务器IP和端口,比较麻烦吧..最好是把外网80端口映射到内网的3128端口上..这样下面机器什么都不用设置真正做到透明代理...下面是我的IPTABLES规则,可以把这个加到启动项里去

iptables -t  nat  -A  PREROUTING -i  eth1  -p tcp -m  tcp --dport  80  -j REDIRCT  --to-ports  3128
iptables  -t  nat  -A  POSTROUTING  -o  etho  -j  MASQUERADE  

如果版主发现有哪需要改进或错误请指出

[ 本帖最后由 170373563 于 2007-2-7 14:38 编辑 ]

TOP

呵呵,这样啊,我没有用过TC,不敢乱说什么。不过建议最好把你的限速脚本另外做一个文件,在rc.local中启动就行,毕竟rc.local牵扯很多东西,是系统的重要启动脚本,最好不要直接放在里面……
这个是你自己写的吗?

七夕银河
一个不想当将军的裁缝,绝不是一个好司机!

TOP

另外,MASQUERADE参数大多用在需要动态分配外部地址的时候,它会自己选择可选的出口,如果是固定外部出口IP,还是用SNAT --to IP效率更高一些……

七夕银河
一个不想当将军的裁缝,绝不是一个好司机!

TOP

我跟我朋友学的,他对LIUNX比我熟...
我现在对LIUNX也算有认识了,并不是菜菜鸟.呵呵(自已夸一下自已)
你说的把脚本做另一个文件是挺不错的...但是你没把你防火强发出来哦..
比如你的IPTABLES规则做的禁P2P,或者禁PING之类的.好东西不要藏着啊,拿出来分享一下吧

TOP

iptables的难点并不在于它的功能,而是在于逻辑。如果编辑规则的时候逻辑不清,就会出现前后矛盾,导致想禁的没禁了,不想禁的倒被禁了……语句上来说反而倒没什么。
我以前说了,因为眼下p2p软件的特点是小包多请求,所以每个包的size都很小,但是很多。使用iptables的limit模块——我在你上一搁帖子里贴了它的用法,就可以限定每IP在某个方向上每秒钟只允许通过多少个包,这样自然而然p2p的流量就被限制了。如果iptables还支持strin模块,可以直接禁止bittorent或者emule之类的关键字,凡是带有这些内容的明文内容都会被拦截,自然可以禁止掉p2p的很多应用了。
并没有藏啊。
至于禁ping,有两种方式:一种是禁止访问,允许转发。就是说,禁止任何人连接主机本身,但可以通过主机转发出去。这样只要iptables -P INPUT DROP;iptables -P FORWARD ACCEPT就可以了。另外一种则是单纯的设定规则禁止ICMP,比如iptables -A FORWARD -s 源IP -p ICMP -j DROP,就会禁止来自某个IP,通过本机转发的所有ICMP包,表现出来就是禁止这台机器ping任何地方。

七夕银河
一个不想当将军的裁缝,绝不是一个好司机!

TOP

我发表了一些自已做代理服务器的心得,如果对大家有帮助的话请回个贴子
哪有问题也请回复一下,好让我知道错在哪里..

TOP

hehe,欢迎阿,多多交流!

七夕银河
一个不想当将军的裁缝,绝不是一个好司机!

TOP

版主怎么不给我也加个精啊,呵呵~~~基本上都是原创哦,只有SQUID那有一小段说明是网上COPY来的:o

TOP

我觉得你对TC命令参数的解释不到位,所以暂时不加。如果我能够根据你的介绍基本掌握了TC和squid的用法,那肯定要加的。

七夕银河
一个不想当将军的裁缝,绝不是一个好司机!

TOP

TC是个好东西哦~ 楼主是对每个IP做的速度限制吧? 如果需要特权,要如何做修改呢?
建议大家把iptables的好用的模块总结一下,弄个精华帖!

TOP

 12 12
发新话题
版块跳转 
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论! 24小时违法信息处理:QQ58284700 TEL29989777
沪ICP备05002360号 / 增值电信业务经营许可证沪B2-20050290 / 当前时区 GMT+8, 现在时间是 2008-5-17 10:17 /