iptables tc实现透明代理及带宽分配

 该项工作于去年9月已经完成,rh系统,但一直未整理资料。现服务器一直运行正常。
首先编写脚本,利用iptables和tc来实现透明代理及流量分配。如proxy_lan,access_limit,流量分配的例子放在了wmhl.sh wlhm.sh中,这几个文件可放在用户目录下。
在/etc/rc.d/rc.local写入对上述proxy_lan,access_limit及打开IP转发的调用。
再利用crontab -e命令写入参数行来实现定时切换不同时段的网段用户带宽。
编辑/etc/ethers文件,做IP地址与MAC地址的一对一的绑定,再利用rc.local文件写入arp -f实现地址绑定的功能。
实例中eth0为对应住宅区网卡,IP为192.168.3.1,对应网段192.168.3.0/24;eth2为对应办公区网卡,IP为192.168.1.1,对应网段192.168.1.0/24。eth1为外网网卡,接城域网。
文件如下:
1、proxy_lan
iptables -t nat -F
modprobe ip_tables
modprobe iptable_nat
modprobe iptable_filter
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state
#eth0 wan
iptables -t nat -A POSTROUTING -o eth1 -s 192.168.1.0/24 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 192.168.3.0/24 -j MASQUERADE
2、access_limit
iptables -A FORWARD -p tcp -s 192.168.1.0/24 --dport 2000 -j DROP
iptables -A FORWARD -p tcp -s 192.168.1.0/24 --dport 4000 -j DROP
iptables -A FORWARD -p udp -s 192.168.1.0/24 --dport 2000 -j DROP
iptables -A FORWARD -p udp -s 192.168.1.0/24 --dport 4000 -j DROP
iptables -A FORWARD -p udp -s 192.168.1.0/25 --dport 8000 -j DROP
iptables -t nat -A PREROUTING -d 外网IP -p tcp --dport 5678 -j DNAT --to 192.168.3.8:80
iptables -t nat -A PREROUTING -d 外网IP -p tcp --dport 2225 -j DNAT --to 192.168.3.8:22
其中,最后两行为端口映射,让外网可以访问到内部的服务器。
3、wlhm.sh
此文件办公区流量少而家属区流量多,主要用在非工作及节假日时段。
#!/bin/sh
#做家属区下载限制,过滤器用u32,另一个网卡(实际操作,下载速率在150左右)
tc qdisc del dev eth0 root
tc qdisc add dev eth0 root handle 200: cbq bandwidth 100Mbit avpkt 1000
tc class add dev eth0 parent 200:0 classid 200:1 cbq bandwidth 100Mbit rate 100Mbit allot 1514 weight 2Kbit prio 8 maxburst 8 avpkt 1000 bounded
#单机
tc class add dev eth0 parent 200:1 classid 200:2 cbq bandwidth 100Mbit rate 1500Kbit allot 1513 weight 150Kbit prio 5 maxburst 8 avpkt 1000 bounded
#其它
tc class add dev eth0 parent 200:1 classid 200:3 cbq bandwidth 100Mbit rate 3Mbit allot 1513 weight 300Kbit prio 5 maxburst 8 avpkt 1000 bounded
tc qdisc add dev eth0 parent 200:2 sfq quantum 1514b perturb 15
tc qdisc add dev eth0 parent 200:3 sfq quantum 1514b perturb 15
#单机过滤
tc filter add dev eth0 parent 200:0 protocol ip prio 25 u32 match ip dst 192.168.3.11/32 flowid 200:2
#其它过滤
tc filter add dev eth0 parent 200:0 protocol ip prio 25 u32 match ip dst 192.168.3.0/24 flowid 200:3
#再做办公楼下载限制,过滤器用u32,另一个网卡
tc qdisc del dev eth2 root
tc qdisc add dev eth2 root handle 300: cbq bandwidth 100Mbit avpkt 1000
tc class add dev eth2 parent 300:0 classid 300:1 cbq bandwidth 100Mbit rate 100Mbit allot 1514 weight 10Mbit prio 8 maxburst 8 avpkt 1000 bounded
#单机
tc class add dev eth2 parent 300:1 classid 300:2 cbq bandwidth 100Mbit rate 700Kbit allot 1513 weight 70Kbit prio 6 maxburst 8 avpkt 1000 bounded
#其它
tc class add dev eth2 parent 300:1 classid 300:3 cbq bandwidth 100Mbit rate 1000Kbit allot 1513 weight 100Kbit prio 6 maxburst 8 avpkt 1000 bounded
tc qdisc add dev eth2 parent 300:2 sfq quantum 1514b perturb 15
tc qdisc add dev eth2 parent 300:3 sfq quantum 1514b perturb 15
#单机过滤
tc filter add dev eth2 parent 300:0 protocol ip prio 25 u32 match ip dst 192.168.1.11/32 flowid 300:2
tc filter add dev eth2 parent 300:0 protocol ip prio 25 u32 match ip dst 192.168.1.12/32 flowid 300:2
#其它过滤
tc filter add dev eth2 parent 300:0 protocol ip prio 25 u32 match ip dst 192.168.1.0/24 flowid 300:2
#上传
iptables -I POSTROUTING -o eth1 -t mangle -p tcp -s 192.168.1.0/24 -j MARK --set-mark 1
iptables -I POSTROUTING -o eth1 -t mangle -p tcp -s 192.168.3.0/24 -j MARK --set-mark 2
tc qdisc del dev eth1 root
tc qdisc add dev eth1 root handle 100: cbq bandwidth 100Mbit avpkt 1000
tc class add dev eth1 parent 100:0 classid 100:1 cbq bandwidth 100Mbit rate 10Mbit allot 1514 weight 1Mbit prio 8 maxburst 8 avpkt 1000 bounded
tc class add dev eth1 parent 100:1 classid 100:2 cbq bandwidth 100Mbit rate 7Mbit allot 1513 weight 700Kbit prio 5 maxburst 8 avpkt 1000 bounded
tc class add dev eth1 parent 100:1 classid 100:3 cbq bandwidth 100Mbit rate 3Mbit allot 1513 weight 300Kbit prio 6 maxburst 8 avpkt 1000 bounded
tc qdisc add dev eth1 parent 100:2 sfq quantum 1514b perturb 15
tc qdisc add dev eth1 parent 100:3 sfq quantum 1514b perturb 15
tc filter add dev eth1 parent 100:0 protocol ip prio 1 handle 1 fw classid 100:2
tc filter add dev eth1 parent 100:0 protocol ip prio 1 handle 2 fw classid 100:3
4、wmhl.sh
#!/bin/sh
#做家属区下载限制,过滤器用u32,另一个网卡(实际操作,下载速率在150左右)
tc qdisc del dev eth0 root
tc qdisc add dev eth0 root handle 200: cbq bandwidth 100Mbit avpkt 1000
tc class add dev eth0 parent 200:0 classid 200:1 cbq bandwidth 100Mbit rate 100Mbit allot 1514 weight 2Kbit prio 8 maxburst 8 avpkt 1000 bounded
#单机
tc class add dev eth0 parent 200:1 classid 200:2 cbq bandwidth 100Mbit rate 200Kbit allot 1513 weight 50Kbit prio 5 maxburst 8 avpkt 1000 bounded
#其它
tc class add dev eth0 parent 200:1 classid 200:3 cbq bandwidth 100Mbit rate 1Mbit allot 1513 weight 100Kbit prio 5 maxburst 8 avpkt 1000 bounded
tc qdisc add dev eth0 parent 200:2 sfq quantum 1514b perturb 15
tc qdisc add dev eth0 parent 200:3 sfq quantum 1514b perturb 15
#单机过滤
tc filter add dev eth0 parent 200:0 protocol ip prio 25 u32 match ip dst 192.168.3.11/32 flowid 200:2
#其它过滤
tc filter add dev eth0 parent 200:0 protocol ip prio 25 u32 match ip dst 192.168.3.0/24 flowid 200:3
#再做办公楼下载限制,过滤器用u32,另一个网卡
tc qdisc del dev eth2 root
tc qdisc add dev eth2 root handle 300: cbq bandwidth 100Mbit avpkt 1000
tc class add dev eth2 parent 300:0 classid 300:1 cbq bandwidth 100Mbit rate 100Mbit allot 1514 weight 10Mbit prio 8 maxburst 8 avpkt 1000 bounded
#单机
tc class add dev eth2 parent 300:1 classid 300:2 cbq bandwidth 100Mbit rate 3000Kbit allot 1513 weight 150Kbit prio 6 maxburst 8 avpkt 1000 bounded
#其它
tc class add dev eth2 parent 300:1 classid 300:3 cbq bandwidth 100Mbit rate 7000Kbit allot 1513 weight 300Kbit prio 6 maxburst 8 avpkt 1000 bounded
tc qdisc add dev eth2 parent 300:2 sfq quantum 1514b perturb 15
tc qdisc add dev eth2 parent 300:3 sfq quantum 1514b perturb 15
#单机过滤
tc filter add dev eth2 parent 300:0 protocol ip prio 25 u32 match ip dst 192.168.1.11/32 flowid 300:2
tc filter add dev eth2 parent 300:0 protocol ip prio 25 u32 match ip dst 192.168.1.12/32 flowid 300:2
#其它过滤
tc filter add dev eth2 parent 300:0 protocol ip prio 25 u32 match ip dst 192.168.1.0/24 flowid 300:2
#上传
iptables -I POSTROUTING -o eth1 -t mangle -p tcp -s 192.168.1.0/24 -j MARK --set-mark 1
iptables -I POSTROUTING -o eth1 -t mangle -p tcp -s 192.168.3.0/24 -j MARK --set-mark 2
tc qdisc del dev eth1 root
tc qdisc add dev eth1 root handle 100: cbq bandwidth 100Mbit avpkt 1000
tc class add dev eth1 parent 100:0 classid 100:1 cbq bandwidth 100Mbit rate 10Mbit allot 1514 weight 1Mbit prio 8 maxburst 8 avpkt 1000 bounded
tc class add dev eth1 parent 100:1 classid 100:2 cbq bandwidth 100Mbit rate 7Mbit allot 1513 weight 700Kbit prio 5 maxburst 8 avpkt 1000 bounded
tc class add dev eth1 parent 100:1 classid 100:3 cbq bandwidth 100Mbit rate 3Mbit allot 1513 weight 300Kbit prio 6 maxburst 8 avpkt 1000 bounded
tc qdisc add dev eth1 parent 100:2 sfq quantum 1514b perturb 15
tc qdisc add dev eth1 parent 100:3 sfq quantum 1514b perturb 15
tc filter add dev eth1 parent 100:0 protocol ip prio 1 handle 1 fw classid 100:2
tc filter add dev eth1 parent 100:0 protocol ip prio 1 handle 2 fw classid 100:3
5、/etc/rc.d/rc.local
crontab /etc/crontab
echo 1 > /proc/sys/net/ipv4/ip_forward
arp -f
/mydir/proxy_lan
/mydir/access_limit
6、crontab -e
使用该命令编辑定时任务列表。
01 9 * * * /mydir/wmhl.sh
01 20 * * * /mydir/wlhm
7.查看信息
iptables -L 列出正在运行的规则
tc class ls dev eth0 显示eth0上的带宽分配情况
其它参数,请通过运行man iptables 来查看.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值