LIUNX+NAT网吧网段限速透明代理脚本
首先我说明一下我这的网络环境
我这里上网用的是电信(ISP)公网IP+LIUNX代理服务器(算是简单路由器吧.呵呵)
LIUNX装双网卡
ETH0 为 内网IP
ETH1 为 外网IP
另外大家有好的IPTABLES规则防火强要在下面跟帖啊,我会把帖子整理出来(会注明哪位兄弟发的::xiao2:: )让大家(包括我)可以学习学习: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
如果版主发现有哪需要改进或错误请指出