• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • [轉]TC(HTB)+iptables作流量控制 wingger

    發表于:2007-07-04來源:作者:點擊數: 標簽:
    http://bbs.chinaunix.net/forum/viewtopic.php?t=521620start=0sid=806361331a3d32f765ccd785fcc176e1 一、環境和要求: 線路:ADSL:2M/512K eth0:10.0.0.136,外網口 eth1:192.168.1.1,內網口 業務 需求 :保證正常的網頁瀏覽,FTP,SMTP,POP3,對其它的
    http://bbs.chinaunix.net/forum/viewtopic.php?t=521620&start=0&sid=806361331a3d32f765clearcase/" target="_blank" >ccd785fcc176e1

    一、環境和要求:
    線路:ADSL:2M/512K
    eth0:10.0.0.136,外網口
    eth1:192.168.1.1,內網口

    業務需求:保證正常的網頁瀏覽,FTP,SMTP,POP3,對其它的所有應用加以限制,以免影響正常業務的使用。

    1、讓交互數據包保持較低的延遲時間,也就是說上載或下載文件不會打擾SSH/telnet等。
    2、上載或下載期間有合理的速率用于網頁瀏覽,即使http屬于一種大量數據傳輸,也不應受其它傳輸影響太大
    3、對FTP-data限速,不會占用所有帶寬
    4、對SMTP,pop3限速
    5、對未分類的進行限制,以免影響
    6、保證上載不會影響下載,上載數據流會影響下載的速率,這是相當普遍的現象。
    7、對每個IP的下載速率進行限制
    8、取得空閑帶寬的優先級別如:交互數據,FTP-data,smtp,pop3;網頁瀏覽,其它業務優先級別最低


    二、方法:

    1、(eth0)使用HTB分成五類:如下圖
    +---------+
    | root 1: |
    +---------+
    |
    +--------------------------------+
    | class 1:1 |
    +--------------------------------+
    | | | | | |
    +----+ +----+ +----+ +----+ +----+
    |1:11| |1:12| |1:13| |1:14| |1:15|
    +----+ +----+ +----+ +----+ +----+

    classid 1:11:

    1)這個類優先權最高。擁有最低的延遲并最先取得空閑帶寬,因此要設置這個類的峰值速率。
    ssh、telnet、dns、quake3、irc,ftp控制,smtp命令和帶有SYN標記的數據包都應屬于這一類。

    2)為了保證上行數據流不會傷害下行流,我們還要把ACK數據包排在隊列前面。這就是當發生大批量數據流的時

    候,雙向傳輸均受到嚴重影響的原因。因為下行數據的ACK必須同上行流進行競爭,并在處理過程中被延遲。

    3)限制上載速率:把上載速率限制在比可用帶寬稍小一些的位置上,于是你的MODEM中就不會形成隊列了。

    4)排除了下行隊列(除了偶爾的突發),保證交互數據包永遠排在上行隊列的最前面。

    classid 1:12:大批量傳輸的類。主要用來處理瀏覽網頁的數據包,目標端口80,8080,443,8443的包。

    classid 1:13:此類是擁用最大吞吐TOS位的數據包。用于處理目的地址為xxxx的FTP-data。

    classid

    1:14:這里是郵件(SMTP、pop3)相關和TOS要求最小成本的數據流。用于處理目的地址為xxxx的smtp,pop3服務

    classid 1:15:最后是經過NAT進行大批量傳輸的機器,以保證他們不會妨礙正常服務。

    2、(eth0)限制下載速率:。丟掉那些太快到來的數據包,不讓他們導致TCP/IP的速率低于我們期望的速率。因

    為我們不希望輕易地丟棄數據包,所以我們要配置“burst”來容納突發傳輸。

    3、(eth1)限制下載速率:對每一個IP限制最高下載速率



    三、
    1、隊列處理


    #腳本:用384kbps作為峰值速率,調整CEIL為上行速率的75%。
    #Set the following values to somewhat lesss than your actual download and uplink speed.
    DOWNLINK=2000
    UPLINK=384

    #清空已有的隊列,并把出錯消息清空
    #clean existing down and uplink qdiscs,put the errors to /dev/null
    tc qdisc del dev eth0 root    2> /dev/null > /dev/null
    tc qdisc del dev eth0 ingress 2> /dev/null > /dev/null
    tc qdisc del dev eth1 root    2> /dev/null > /dev/null

    ########################################uplink###########################################

    #建立HTB父類,默認數據由1:15這個類通走
    #install root HTB,point default traffic to 1:15:
    tc qdisc add dev eth0 root handle 1: htb default 15

    #設定uplink的最大速率。
    #shape everything at $UPLINK speed -this prevents huge queues in your DSL modem which destroy

    latency:
    # main class
    tc class add dev eth0 parent 1:  classid 1:1  htb rate $kbit ceil $kbit

    #分類,1:11為最高優先級別,stmp,pop3,ftp-data次之,網頁瀏覽再次之。并對每個類限制了最高速率。
    #high prio class 1:11:
    tc class add dev eth0 parent 1:1 classid 1:11 htb rate 128kbit ceil 128kbit prio 0
    tc class add dev eth0 parent 1:1 classid 1:12 htb rate 128kbit ceil $kbit prio 2
    tc class add dev eth0 parent 1:1 classid 1:13 htb rate 32kbit ceil $kbit prio 1
    tc class add dev eth0 parent 1:1 classid 1:14 htb rate 32kbit ceil $kbit prio 1
    #bulk & default class 1:15 -gets slightly less traffic,and a lower priority:
    tc class add dev eth0 parent 1:1 classid 1:15 htb rate 16kbit ceil $kbit prio 3


    可以在類下面再附加上另一個隊列規定,以保證帶寬的公平使用:
    #bost get Stochastic Fairness:
    tc qdisc add dev eth0 parent 1:12 handle 12: sfq perturb 10
    tc qdisc add dev eth0 parent 1:13 handle 13: sfq perturb 10
    tc qdisc add dev eth0 parent 1:14 handle 14: sfq perturb 10
    tc qdisc add dev eth0 parent 1:15 handle 15: sfq perturb 10


    2、分類:
    上面的隊列處理中等于把所有發出的數據包都送給了1:15
    (tc qdisc add dev eth0 root handle 1: htb default 15)。
    現在應該需要告訴機器那些數據包走哪條路。設置過濾器以便用iptables對數據包進行分類。
    可以通過RETURN方法避免遍歷所有的規則。
    #TOS Mininum Delay (ssh,telnet) in 1:11:
    tc filter add dev eth0 parent 1:0 protocol ip prio 1 handle 1 fw classid 1:11
    #80,8080,443 in 1:12
    tc filter add dev eth0 parent 1:0 protocol ip prio 2 handle 2 fw classid 1:12
    #ftp-data in 1:13
    tc filter add dev eth0 parent 1:0 protocol ip prio 3 handle 3 fw classid 1:13
    #smtp,pop3 in 1:14
    tc filter add dev eth0 parent 1:0 protocol ip prio 4 handle 4 fw classid 1:14
    #
    tc filter add dev eth0 parent 1:0 protocol ip prio 5 handle 5 fw classid 1:15

    這樣數據包會有一個特定的FWMARK標記值(hanlde x fw),表明它應該送給哪個類( classid xjavascript:window.open(this.src);" style="CURSOR: pointer" onload="return imgzoom(this,550)">)。
    后面要給數據包打標記。


    3、丟掉那些太快到來的數據包,不讓他們導致TCP/IP的速率低于我們期望的速率。因為我們不希望輕易地丟棄數據包,所以我們要配置“burst”來容納突發傳輸。,
    ########################################DOWNLINK###########################################
    # install the ingress qdisc on the ingress
    tc qdisc add dev eth0 handle ffff: ingress
    # DROP everything that's coming in too fast:
    tc filter add dev eth0 parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate $kbit burst 10k drop flowid :1


    4、對內網的IP速率進行限制
    tc qdisc add dev eth1 root handle 2: htb  
    tc class add dev eth1 parent 2: classid 2:1 htb rate 128kbit ceil $kbit
    tc qdisc add dev eth1 parent 2:1 sfq
    tc filter add dev eth1 parent 2:0 protocol ip prio 4 u32 match ip dst 192.168.1.0/24 flowid 2:1


    四、現在對數據進得mark
    1、首先啟用ip轉發,做NAT轉換,并設定默認iptable策略:

    echo "1" > /proc/sys/net/ipv4/ip_forward
    iptables -P INPUT DROP
    iptables -P OUTPUT DROP
    iptables -P FORWARD DROP
    iptables -t nat -A POSTROUTING -s 192.168.1.0/255.255.255.0 -o eth0 -j SNAT --to-source

    10.0.0.136

    2、設置TOS的處理:
    最小延遲的歸第一類
    iptables -t mangle -A PREROUTING -m tos --tos Minimize-Delay -j MARK --set-mark 0x1
    iptables -t mangle -A PREROUTING -m tos --tos Minimize-Delay -j RETURN

    這里是郵件(SMTP、pop3?)相關和TOS要求最小成本的數據流。
    iptables -t mangle -A PREROUTING -m tos --tos Minimize-Cost -j MARK --set-mark 0x4
    iptables -t mangle -A PREROUTING -m tos --tos Minimize-Cost -j RETURN

    最后是路由器后面經過NAT進行大批量傳輸的機器。以保證他們不會妨礙正常服務。
    iptables -t mangle -A PREROUTING -m tos --tos Maximize-Throughput -j MARK --set-mark 0x5
    iptables -t mangle -A PREROUTING -m tos --tos Maximize-Throughput -j RETURN


    3、給數據包打標記
    類1:
    提高tcp初始連接(也就是帶有SYN的數據包)的優先權是非常明智的:
    # tag all incoming SYN packets through eth0 as mark value
    iptables -t mangle -I PREROUTING -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j MARK --set-mark 0x1
    iptables -t mangle -I PREROUTING -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j RETURN

    ftp控制放第1類,因為一般是小包,  
    iptables -t mangle -A PREROUTING -p tcp -m tcp --dport ftp -j MARK --set-mark 0x1
    iptables -t mangle -A PREROUTING -p tcp -m tcp --dport ftp -j RETURN
    iptables -t mangle -A PREROUTING -p tcp -m tcp --sport ftp -j MARK --set-mark 0x1
    iptables -t mangle -A PREROUTING -p tcp -m tcp --sport ftp -j RETURN

    然后提高ssh數據包的優先權:
    iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 22 -j MARK --set-mark 0x1
    iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 22 -j RETURN

    DNS放第一類,
    iptables -t mangle -A PREROUTING -p udp -m udp --dport 53 -j MARK --set-mark 0x1
    iptables -t mangle -A PREROUTING -p udp -m udp --dport 53 -j RETURN



    類2:用于放置大批量傳輸的類。用來處理瀏覽網頁的數據包,目標端口80的包。
    iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 80 -j MARK --set-mark 0x2
    iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 80 -j RETURN
    iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 80 -j MARK --set-mark 0x2
    iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 80 -j RETURN

    iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 443 -j MARK --set-mark 0x2
    iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 443 -j RETURN
    iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 443 -j MARK --set-mark 0x2
    iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 443 -j RETURN

    iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 8080 -j MARK --set-mark 0x2  
    iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 8080 -j RETURN
    iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 8080 -j MARK --set-mark 0x2  
    iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 8080 -j RETURN


    類3:ftp-data放在第3類,要求最大吞吐.
    iptables -t mangle -A PREROUTING -p tcp -m tcp --dport ftp-data -j MARK --set-mark 0x3
    iptables -t mangle -A PREROUTING -p tcp -m tcp --dport ftp-data -j RETURN

    iptables -t mangle -A PREROUTING -p tcp -m tcp --sport ftp-data -j MARK --set-mark 0x3
    iptables -t mangle -A PREROUTING -p tcp -m tcp --sport ftp-data -j RETURN

    類4:
    郵件(SMTP、pop3)相關和TOS要求最小成本的數據流。
    iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 25 -j MARK --set-mark 0x4
    iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 25 -j RETURN
    iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 25 -j MARK --set-mark 0x4
    iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 25 -j RETURN

    iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 110 -j MARK --set-mark 0x4
    iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 110 -j RETURN
    iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 110 -j MARK --set-mark 0x4
    iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 110 -j RETURN

    類5:前面沒有打過標記的數據包將交給1:15處理:
    iptables -t mangle -A PREROUTING -j MARK --set-mark 0x5


    4、最后應該在OUTPUT鏈中再重復一遍上面的設置,也就是說把命令中的–A PREROUTING改成-A OUTPUT

    iptables -t mangle -A OUTPUT -m tos --tos Minimize-Delay -j MARK --set-mark 0x1
    iptables -t mangle -A OUTPUT -m tos --tos Minimize-Delay -j RETURN

    iptables -t mangle -A OUTPUT -m tos --tos Minimize-Cost -j MARK --set-mark 0x4
    iptables -t mangle -A OUTPUT -m tos --tos Minimize-Cost -j RETURN

    iptables -t mangle -A OUTPUT -m tos --tos Maximize-Throughput -j MARK --set-mark 0x5
    iptables -t mangle -A OUTPUT -m tos --tos Maximize-Throughput -j RETURN

    iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 22 -j MARK --set-mark 0x1
    iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 22 -j RETURN

    iptables -t mangle -I OUTPUT -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j MARK --set-mark 0x1
    iptables -t mangle -I OUTPUT -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j RETURN

    iptables -t mangle -A OUTPUT -p udp -m udp --dport 53 -j MARK --set-mark 0x1
    iptables -t mangle -A OUTPUT -p udp -m udp --dport 53 -j RETURN

    iptables -t mangle -A OUTPUT -p tcp -m tcp --dport ftp -j MARK --set-mark 0x1
    iptables -t mangle -A OUTPUT -p tcp -m tcp --dport ftp -j RETURN
    iptables -t mangle -A OUTPUT -p tcp -m tcp --sport ftp -j MARK --set-mark 0x1
    iptables -t mangle -A OUTPUT -p tcp -m tcp --sport ftp -j RETURN

    iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 80 -j MARK --set-mark 0x2
    iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 80 -j RETURN
    iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 80 -j MARK --set-mark 0x2
    iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 80 -j RETURN

    iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 443 -j MARK --set-mark 0x2
    iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 443 -j RETURN
    iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 443 -j MARK --set-mark 0x2
    iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 443 -j RETURN

    iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 8080 -j MARK --set-mark 0x2
    iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 8080 -j RETURN
    iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 8080 -j MARK --set-mark 0x2
    iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 8080 -j RETURN

    iptables -t mangle -A OUTPUT -p tcp -m tcp --dport ftp-data -j MARK --set-mark 0x3
    iptables -t mangle -A OUTPUT -p tcp -m tcp --dport ftp-data -j RETURN
    iptables -t mangle -A OUTPUT -p tcp -m tcp --sport ftp-data -j MARK --set-mark 0x3
    iptables -t mangle -A OUTPUT -p tcp -m tcp --sport ftp-data -j RETURN

    iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 25 -j MARK --set-mark 0x4
    iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 25 -j RETURN
    iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 25 -j MARK --set-mark 0x4
    iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 25 -j RETURN
    iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 110 -j MARK --set-mark 0x4
    iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 110 -j RETURN
    iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 110 -j MARK --set-mark 0x4
    iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 110 -j RETURN

    iptables -t mangle -A OUTPUT -j MARK --set-mark 0x3

    5、iptables策略

    iptables -A INPUT -p ALL -i eth1 -s 192.168.1.0/24 -j ACCEPT
    iptables -A INPUT -p ALL -i lo -j ACCEPT
    iptables -A INPUT -p ALL -d 10.0.0.136 -m state --state ESTABLISHED,RELATED -j ACCEPT

    iptables -A FORWARD -i eth1 -j ACCEPT
    iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

    iptables -A OUTPUT -p ALL -s 127.0.0.1 -j ACCEPT
    iptables -A OUTPUT -p ALL -s 192.168.1.1 -j ACCEPT
    iptables -A OUTPUT -p ALL -s 10.0.0.136 -j ACCEPT

    #因為我上面做了squid代理,所以把80的數據都轉發給squid處理
    iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-ports 3128


    附完整腳本:

    代碼:
    #!/bin/bash
    echo "1" > /proc/sys/net/ipv4/ip_forward
    iptables -P INPUT DROP
    iptables -P OUTPUT DROP
    iptables -P FORWARD DROP
    iptables -t nat -A POSTROUTING -s 192.168.1.0/255.255.255.0 -o eth0 -j SNAT --to-source 10.0.0.136

    # start filters
    # TOS Minimum Delay (ssh, NOT scp) in 1:11:
    iptables -t mangle -A PREROUTING -m tos --tos Minimize-Delay -j MARK --set-mark 0x1
    iptables -t mangle -A PREROUTING -m tos --tos Minimize-Delay -j RETURN

    iptables -t mangle -A PREROUTING -m tos --tos Minimize-Cost -j MARK --set-mark 0x4
    iptables -t mangle -A PREROUTING -m tos --tos Minimize-Cost -j RETURN

    iptables -t mangle -A PREROUTING -m tos --tos Maximize-Throughput -j MARK --set-mark 0x5
    iptables -t mangle -A PREROUTING -m tos --tos Maximize-Throughput -j RETURN

    iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 22 -j MARK --set-mark 0x1
    iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 22 -j RETURN

    iptables -t mangle -I PREROUTING -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j MARK --set-mark 0x1
    iptables -t mangle -I PREROUTING -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j RETURN

    iptables -t mangle -A PREROUTING -p udp -m udp --dport 53 -j MARK --set-mark 0x1
    iptables -t mangle -A PREROUTING -p udp -m udp --dport 53 -j RETURN

    iptables -t mangle -A PREROUTING -p tcp -m tcp --dport ftp -j MARK --set-mark 0x1
    iptables -t mangle -A PREROUTING -p tcp -m tcp --dport ftp -j RETURN
    iptables -t mangle -A PREROUTING -p tcp -m tcp --sport ftp -j MARK --set-mark 0x1
    iptables -t mangle -A PREROUTING -p tcp -m tcp --sport ftp -j RETURN

    iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 80 -j MARK --set-mark 0x2
    iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 80 -j RETURN
    iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 80 -j MARK --set-mark 0x2
    iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 80 -j RETURN

    iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 443 -j MARK --set-mark 0x2
    iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 443 -j RETURN
    iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 443 -j MARK --set-mark 0x2
    iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 443 -j RETURN

    iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 8080 -j MARK --set-mark 0x2  
    iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 8080 -j RETURN
    iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 8080 -j MARK --set-mark 0x2  
    iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 8080 -j RETURN


    iptables -t mangle -A PREROUTING -p tcp -m tcp --dport ftp-data -j MARK --set-mark 0x3
    iptables -t mangle -A PREROUTING -p tcp -m tcp --dport ftp-data -j RETURN

    iptables -t mangle -A PREROUTING -p tcp -m tcp --sport ftp-data -j MARK --set-mark 0x3
    iptables -t mangle -A PREROUTING -p tcp -m tcp --sport ftp-data -j RETURN

    iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 25 -j MARK --set-mark 0x4
    iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 25 -j RETURN
    iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 25 -j MARK --set-mark 0x4
    iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 25 -j RETURN

    iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 110 -j MARK --set-mark 0x4
    iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 110 -j RETURN
    iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 110 -j MARK --set-mark 0x4
    iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 110 -j RETURN

    iptables -t mangle -A PREROUTING -j MARK --set-mark 0x5



    iptables -t mangle -A OUTPUT -m tos --tos Minimize-Delay -j MARK --set-mark 0x1
    iptables -t mangle -A OUTPUT -m tos --tos Minimize-Delay -j RETURN

    iptables -t mangle -A OUTPUT -m tos --tos Minimize-Cost -j MARK --set-mark 0x4
    iptables -t mangle -A OUTPUT -m tos --tos Minimize-Cost -j RETURN

    iptables -t mangle -A OUTPUT -m tos --tos Maximize-Throughput -j MARK --set-mark 0x5
    iptables -t mangle -A OUTPUT -m tos --tos Maximize-Throughput -j RETURN

    iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 22 -j MARK --set-mark 0x1
    iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 22 -j RETURN

    iptables -t mangle -I OUTPUT -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j MARK --set-mark 0x1
    iptables -t mangle -I OUTPUT -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j RETURN

    iptables -t mangle -A OUTPUT -p udp -m udp --dport 53 -j MARK --set-mark 0x1
    iptables -t mangle -A OUTPUT -p udp -m udp --dport 53 -j RETURN

    iptables -t mangle -A OUTPUT -p tcp -m tcp --dport ftp -j MARK --set-mark 0x1
    iptables -t mangle -A OUTPUT -p tcp -m tcp --dport ftp -j RETURN
    iptables -t mangle -A OUTPUT -p tcp -m tcp --sport ftp -j MARK --set-mark 0x1
    iptables -t mangle -A OUTPUT -p tcp -m tcp --sport ftp -j RETURN

    iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 80 -j MARK --set-mark 0x2
    iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 80 -j RETURN
    iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 80 -j MARK --set-mark 0x2
    iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 80 -j RETURN

    iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 443 -j MARK --set-mark 0x2
    iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 443 -j RETURN
    iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 443 -j MARK --set-mark 0x2
    iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 443 -j RETURN

    iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 8080 -j MARK --set-mark 0x2
    iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 8080 -j RETURN
    iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 8080 -j MARK --set-mark 0x2
    iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 8080 -j RETURN

    iptables -t mangle -A OUTPUT -p tcp -m tcp --dport ftp-data -j MARK --set-mark 0x3
    iptables -t mangle -A OUTPUT -p tcp -m tcp --dport ftp-data -j RETURN
    iptables -t mangle -A OUTPUT -p tcp -m tcp --sport ftp-data -j MARK --set-mark 0x3
    iptables -t mangle -A OUTPUT -p tcp -m tcp --sport ftp-data -j RETURN

    iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 25 -j MARK --set-mark 0x4
    iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 25 -j RETURN
    iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 25 -j MARK --set-mark 0x4
    iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 25 -j RETURN
    iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 110 -j MARK --set-mark 0x4
    iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 110 -j RETURN
    iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 110 -j MARK --set-mark 0x4
    iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 110 -j RETURN
    iptables -t mangle -A OUTPUT -j MARK --set-mark 0x3


    iptables -A INPUT -p ALL -i eth1 -s 192.168.1.0/24 -j ACCEPT
    iptables -A INPUT -p ALL -i lo -j ACCEPT
    iptables -A INPUT -p ALL -d 10.0.0.136 -m state --state ESTABLISHED,RELATED -j ACCEPT

    iptables -A FORWARD -i eth1 -j ACCEPT
    iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

    iptables -A OUTPUT -p ALL -s 127.0.0.1 -j ACCEPT
    iptables -A OUTPUT -p ALL -s 192.168.1.1 -j ACCEPT
    iptables -A OUTPUT -p ALL -s 10.0.0.136 -j ACCEPT

    iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-ports 3128


    #Set the following values to somewhat lesss than your actual download and uplink speed.
    DOWNLINK=1600
    UPLINK=384

    #clean existing down and uplink qdiscs,put the errors to /var/log/htb_log
    tc qdisc del dev eth0 root    2> /dev/null > /dev/null
    tc qdisc del dev eth0 ingress 2> /dev/null > /dev/null
    tc qdisc del dev eth1 root    2> /dev/null > /dev/null

    ########################################uplink###########################################

    #install root HTB,point default traffic to 1:15:
    tc qdisc add dev eth0 root handle 1: htb default 15 r2q 1
    #shape everythin at $UPLINK speed -this prevents huge queues in your DSL modem which destroy

    latency:
    # main class
    tc class add dev eth0 parent 1:  classid 1:1  htb rate $kbit ceil $kbit
    #high prio class 1:11:
    tc class add dev eth0 parent 1:1 classid 1:11 htb rate 128kbit ceil 128kbit prio 0
    tc class add dev eth0 parent 1:1 classid 1:12 htb rate 128kbit ceil $kbit prio 2
    tc class add dev eth0 parent 1:1 classid 1:13 htb rate 32kbit ceil $kbit prio 1
    tc class add dev eth0 parent 1:1 classid 1:14 htb rate 32kbit ceil $kbit prio 1
    #bulk & default class 1:15 -gets slightly less traffic,and a lower priority:
    tc class add dev eth0 parent 1:1 classid 1:15 htb rate 16kbit ceil $kbit prio 3

    #bost get Stochastic Fairness:
    tc qdisc add dev eth0 parent 1:12 handle 12: sfq perturb 10
    tc qdisc add dev eth0 parent 1:13 handle 13: sfq perturb 10
    tc qdisc add dev eth0 parent 1:14 handle 14: sfq perturb 10
    tc qdisc add dev eth0 parent 1:15 handle 15: sfq perturb 10

    #TOS Mininum Delay (ssh,telnet) in 1:11:
    tc filter add dev eth0 parent 1:0 protocol ip prio 1 handle 1 fw classid 1:11
    tc filter add dev eth0 parent 1:0 protocol ip prio 2 handle 2 fw classid 1:12
    tc filter add dev eth0 parent 1:0 protocol ip prio 3 handle 3 fw classid 1:13
    tc filter add dev eth0 parent 1:0 protocol ip prio 4 handle 4 fw classid 1:14
    tc filter add dev eth0 parent 1:0 protocol ip prio 5 handle 5 fw classid 1:15

    # install the ingress qdisc on the ingress
    tc qdisc add dev eth0 handle ffff: ingress
    # DROP everything that's coming in too fast:
    tc filter add dev eth0 parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate $kbit burst 15k drop flowid :1


    tc qdisc add dev eth1 root handle 2: htb  
    tc class add dev eth1 parent 2: classid 2:1 htb rate 128kbit ceil $kbit
    tc qdisc add dev eth1 parent 2:1 sfq
    tc filter add dev eth1 parent 2:0 protocol ip prio 4 u32 match ip dst 192.168.1.0/24 flowid 2:1



    六、查看狀態:
    tc -s -d qdisc show dev eth0
    tc -s -d class show dev eth0

    可以看到1:11,1:15都有了一定流量,然后,你可以試試收發郵件和FTP-data,1:13,1:14也會有一定流量的。

    最后,有什么錯誤或改進方法,請各位指點一下,呵呵,

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>