forcemax's

Linux Traffic Control 2

Linux2008. 10. 13. 21:18

지난번에는 ingress policing을 구현하였는데 이번에는 egress shaping을 구현할 일이 생겼다.

구현할 내용은 local network에 대해서는 최대 트래픽을 사용하지만 internet으로 나가는 트래픽에 대해서는 제한을 두는 것이다.

#!/bin/bash

TC=/sbin/tc
DEV=bond0
MAX=2000
LIMIT=1000

case "$1" in
        start)
                $TC qdisc del dev $DEV root 2> /dev/null
                $TC qdisc add dev $DEV root handle 1: htb default 10
                # local network is unrestricted
                $TC class add dev $DEV parent 1: classid 1:10 htb rate ${MAX}mbit burst ${MAX}k quantum 1514
                $TC qdisc add dev $DEV parent 1:10 handle 10: sfq perturb 10
                $TC filter add dev $DEV parent 1:0 protocol ip prio 10 u32 match ip dst 192.168.5.0/24 flowid 1:10
                # internet traffic is limited
                $TC class add dev $DEV parent 1: classid 1:20 htb rate ${LIMIT}mbit ceil ${LIMIT}mbit burst ${LIMIT}k quantum 1514
                $TC qdisc add dev $DEV parent 1:20 handle 20: sfq perturb 10
                $TC filter add dev $DEV parent 1:0 protocol ip prio 20 u32 match ip src 0.0.0.0/0 flowid 1:20
                ;;
        stop)
                $TC qdisc del dev $DEV root 2> /dev/null
                ;;
        show)
                $TC qdisc show dev $DEV
                $TC -s class show dev $DEV
                $TC -s filter show dev $DEV
                ;;
        *)
                echo "Usage: $0 start|stop|show" >&2
                exit 3
                ;;
esac




일단 위의 스크립트 대로 적용하면 2Gbps의 bond0 인터페이스에서 외부로 나가는 트래픽중
'192.168.5.0/24' 대역에 걸리는 트래픽은 $MAX에 정해놓은 수치(위에는 2Gbps)로
그 외 '0.0.0.0/0' (전체 네트웍)으로 나가는 트래픽은 $LIMIT에 정해놓은 수치(위에는 1Gbps)로
나가도록 설정된다.