iptables + tc 以完成traffic control

linux相關問題與技術

iptables + tc 以完成traffic control

文章coper » 週四 9月 15, 2005 11:07 pm

系統需求:
kernel 2.4.20 up
iproute 2.6 up
以下是我的設定,可以放在/etc/rc.d/init.d 的目錄下,且檔案名稱為tc
在命令提示符號下鍵入chkconfig --add tc
$chkconfig --level 12345 tc on 讓開機時啟動


#!/bin/bash
# chkconfig: 2345 79 31
# description: amavisd is an interface between MTA and content checkers
# processname: amavisd
# pidfile: /var/amavis/amavisd.pid

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

TC=/usr/sbin/tc
IDEV=eth0 #內部網域所連接的網卡
ODEV=eth1 #和adsl連接的網卡
DOWNLINK=2000 #下行為2000kbs
UPLINK=384 #上行為512kbs 但為了不讓上行影嚮下行頻寬因此設定為384

tc_start() {
# 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


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

#install root HTB,point default traffic to 1:15:
$TC qdisc add dev $ODEV root handle 1: htb default 15
#shape everythin at $UPLINK speed -this prevents huge queues in your DSL modem which destroy latency:
# main class
$TC class add dev $ODEV parent 1: classid 1:1 htb rate ${UPLINK}kbit ceil ${UPLINK}kbit
#high prio class 1:11:
$TC class add dev $ODEV parent 1:1 classid 1:11 htb rate 128kbit ceil 128kbit prio 0
$TC class add dev $ODEV parent 1:1 classid 1:12 htb rate 128kbit ceil ${UPLINK}kbit prio 2
$TC class add dev $ODEV parent 1:1 classid 1:13 htb rate 32kbit ceil ${UPLINK}kbit prio 1
$TC class add dev $ODEV parent 1:1 classid 1:14 htb rate 32kbit ceil ${UPLINK}kbit prio 1
#bulk & default class 1:15 -gets slightly less traffic,and a lower priority:
$TC class add dev $ODEV parent 1:1 classid 1:15 htb rate 16kbit ceil ${UPLINK}kbit prio 3

#bost get Stochastic Fairness:
$TC qdisc add dev $ODEV parent 1:12 handle 12: sfq perturb 10
$TC qdisc add dev $ODEV parent 1:13 handle 13: sfq perturb 10
$TC qdisc add dev $ODEV parent 1:14 handle 14: sfq perturb 10
$TC qdisc add dev $ODEV parent 1:15 handle 15: sfq perturb 10

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

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


$TC qdisc add dev $IDEV root handle 2: htb
$TC class add dev $IDEV parent 2: classid 2:1 htb rate 128kbit ceil ${DOWNLINK}kbit
$TC qdisc add dev $IDEV parent 2:1 sfq
$TC filter add dev $IDEV parent 2:0 protocol ip prio 4 u32 match ip dst 192.82.1.0/24 flowid 2:1

}
tc_stop() {
$TC qdisc del dev $IDEV root 2> /dev/null > /dev/null
$TC qdisc del dev $IDEV ingress 2> /dev/null > /dev/null
$TC qdisc del dev $ODEV root 2> /dev/null > /dev/null
$TC qdisc del dev $ODEV ingress 2> /dev/null > /dev/null

}

tc_restart() {
tc_stop
sleep 1
tc_start
}

tc_show() {
echo ""
echo "eth0:"
$TC qdisc show dev $IDEV
$TC class show dev $IDEV
$TC filter show dev $IDEV
echo ""
echo "eth1:"
$TC qdisc show dev $ODEV
$TC class show dev $ODEV
$TC filter show dev $ODEV
echo ""
}

case "$1" in

start)
echo -n "Starting bandwidth shaping: "
tc_start
echo "done"
;;
stop)
echo -n "Stopping bandwidth shaping: "
tc_stop
echo "done"
;;
restart)
echo -n "Restarting bandwidth shaping: "
tc_restart
echo "done"
;;

show)
tc_show
;;

*)
echo "Usage: /etc/init.d/tc.sh {start|stop|restart|show}"
;;

esac
回頂端

從之前的文章開始顯示:
發表新主題 回覆主題 首頁 -> windows技術討論 所有的時間均為 台北時間 (GMT + 8 小時)
第1頁(共1頁)



前往:
您 可以 在這個版面發表文章
您 可以 在這個版面回覆文章
您 無法 在這個版面編輯文章
您 無法 在這個版面刪除文章
您 無法 在這個版面進行投票


Powered by
coper
 

回到 linux技術討論

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 0 位訪客

cron