Linux Traffic Control 2
지난번에는 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)로
나가도록 설정된다.