科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网网络频道ADSL网关流量控制

ADSL网关流量控制

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

关于Linux网关的流量控制,我已经发表了几篇文章,但一些小公司并没有专线,而是使用ADSL,动态IP,信息管理不严,经常有人在内网使用P2P类软件,有时上传达到450K,这样ADSL线路基本上会瘫痪。

作者:zdnet安全频道 来源:论坛整理 2008年10月23日

关键字: 流量 网关 ADSL

  • 评论
  • 分享微博
  • 分享邮件
前言:
    关于Linux网关的流量控制,我已经发表了几篇文章,但一些小公司(如我们的部分贸易子公司)并没有专线,而是使用ADSL(下载2M,上传为512K),动态IP,信息管理不严,经常有人在内网使用P2P类软件,有时上传达到450K,这样ADSL线路基本上会瘫痪。为了减轻管理负担及节省购买设备的费用,安装linux作为ADSL网关,并进行流量控制。

案例说明:
    网关:linux系统、两网卡:eth0连接内网(192.168.1.0/24) eth1连接ADSL modem,并与总公司(192.168.4.0/24)及仓库(192.168.25.0/24)建立IPSEC VPN连接
1、下载:eth0
    到台湾总公司、VPN及邮件服务器202.104.56.55的下载流量为2.5M(不受限制)优先级为1
    到达192.168.1.99及192.168.1.202主机的下载可达2M,优先级为2 (此两台为服务器)
    其它流量则限制为1.4M,优先级为3
2、上传:ppp0
    到台湾总公司、VPN及邮件服务器202.104.56.55的上传流量为1M(其实最大才512K),优先级为1
    到达192.168.1.99及202主机的上传流量可达400K,优先级为2
    其它流量则限制为300k,优先级为3

Qos.sh文件如下:

#!/bin/sh
########## jdaoyou@sohu.com ###########
TC="/sbin/tc"
LAN_IFACE="eth0"
INET_IFACE="ppp0"
INTERNAL_LAN="192.168.1.0/24"
start(){

#################### Qos rule on eth0 for download  ########################

if [ "$LAN_IFACE" != "" ];then

         tc qdisc add dev eth0 root handle 2:0 htb default 30
         tc class add dev eth0 parent 2:0 classid 2:1 htb rate 3Mbit burst 15k
         tc class add dev eth0 parent 2:1 classid 2:10 htb rate 3Mbit burst 15k
         tc class add dev eth0 parent 2:1 classid 2:20 htb rate 2000kbit ceil 2Mbit burst 15k
         tc class add dev eth0 parent 2:1 classid 2:30 htb rate 1600kbit ceil 1400kbit burst 15k

         tc qdisc add dev eth0 parent 2:10 handle 10: sfq perturb 10
         tc qdisc add dev eth0 parent 2:20 handle 20: sfq perturb 10
         tc qdisc add dev eth0 parent 2:30 handle 30: sfq perturb 10

         U32_1="tc filter add dev eth0 protocol ip parent 2:0 prio 1 u32"
         $U32_1 match ip src 202.104.56.55/32 flowid 2:10
         $U32_1 match ip src 192.168.4.0/24 flowid 2:10
         $U32_1 match ip src 192.168.25.0/24 flowid 2:10

         U32_2="tc filter add dev eth0 protocol ip parent 2:0 prio 2 u32"
         $U32_2 match ip dst 192.168.1.99/32 flowid 2:20
         $U32_2 match ip dst 192.168.1.202/32 flowid 2:20

         tc filter add dev eth0 protocol ip parent 2:0 prio 3 u32 match ip dst 192.168.1.0/24 flowid 2:30

        echo ""
        echo ""
        echo "qos rule on eth0 start ...........ok!"
        echo ""
        echo ""
fi

#################### Qos rule on ppp0 for upload ########################

if [ "$INET_IFACE" != "" ];then

        iptables -F -t mangle
        iptables -X -t mangle
        iptables -Z -t mangle

        iptables -A PREROUTING -t mangle -i eth0 -s 192.168.1.99/32 -j MARK --set-mark 1
        iptables -A PREROUTING -t mangle -i eth0 -s 192.168.1.202/32 -j MARK --set-mark 1

        #iptables -A PREROUTING -t mangle -i eth0 -s 192.168.1.0/24 -j MARK --set-mark 2

         tc qdisc add dev ppp0 root handle 1:0 htb default 30
         tc class add dev ppp0 parent 1:0 classid 1:1 htb rate 1Mbit burst 15k
         tc class add dev ppp0 parent 1:1 classid 1:10 htb rate 1Mbit burst 15k
         tc class add dev ppp0 parent 1:1 classid 1:20 htb rate 400kbit ceil 400kbit burst 15k
         tc class add dev ppp0 parent 1:1 classid 1:30 htb rate 300kbit ceil 300kbit burst 15k

         tc qdisc add dev ppp0 parent 1:10 handle 10: sfq perturb 10
         tc qdisc add dev ppp0 parent 1:20 handle 20: sfq perturb 10
         tc qdisc add dev ppp0 parent 1:30 handle 30: sfq perturb 10

         U32="tc filter add dev ppp0 protocol ip parent 1:0 prio 1 u32"
         tc filter add dev ppp0 protocol ip parent 1:0 prio 1 u32 match ip dst 202.104.56.55/32 flowid 1:10
         tc filter add dev ppp0 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.4.0/24 flowid 1:10
         tc filter add dev ppp0 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.25.0/24 flowid 1:10
         tc filter add dev ppp0 protocol ip parent 1:0 prio 1 u32 match ip protocol 50 0xff flowid 1:10
         tc filter add dev ppp0 protocol ip parent 1:0 prio 1 u32 match ip protocol 51 0xff flowid 1:10

         tc filter add dev ppp0 parent 1:0 protocol ip prio 2 handle 1 fw classid  1:20

         #tc filter add dev ppp0 parent 1:0 protocol ip prio 3 handle 2 fw classid  1:30

        echo ""
        echo ""
        echo "qos rule on ppp0 start ...........ok!"
        echo ""
        echo ""
fi

}

stop(){

if [ "$LAN_IFACE" != "" ];then
        $TC qdisc del dev $LAN_IFACE root
fi
if [ "$INET_IFACE" != "" ];then
        $TC qdisc del dev $INET_IFACE root
fi

iptables -F -t mangle
iptables -X -t mangle
iptables -Z -t mangle

}

status(){
echo "show qdisc ............ "
echo ""
echo ""
echo ""
$TC -d -s qdisc
echo ""
echo ""
echo "show filter ............ "
echo ""
echo ""
if [ "$LAN_IFACE" != "" ];then
        $TC -d -s filter ls dev $LAN_IFACE
fi
echo ""
echo ""
if [ "$INET_IFACE" != "" ];then
        $TC -d -s filter ls dev $INET_IFACE
fi
echo ""
echo ""
echo "show class ............ "
echo ""
echo ""
if [ "$LAN_IFACE" != "" ];then
        $TC -d -s class ls dev $LAN_IFACE
fi
echo ""
echo ""
if [ "$INET_IFACE" != "" ];then
        $TC -d -s class ls dev $INET_IFACE
fi
echo ""
echo ""

}

case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart)
    stop
    start
    ;;
  status)
    status
    ;;
  *)
    echo $"Usage:$0 {start|stop|restart|status}"
    exit 1
esac

exit $?

./Qos.sh restart即可

如果ADSL重新拨号,可以用crontab加入计划任务中,或都把Qos.sh restart加入到ADSL拨号脚本中
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章