Sumber: http://awarmanf.wordpress.com/2009/12/29/linuxtc1/
Topologi jaringan dan desain htb
Kriteria dalam pembuatan traffic control ini
- Traffic control hanya untuk trafik eggress dari device eth0 (lan)
- Trafik dari local area network (lan) ke router dan sebaliknya tidak melalui traffic control.
- Trafik dari lan ke internet atau upstream tidak melalui traffic control.
- Trafik dari internet ke lan atau downstream akan melalui traffic control, kecuali trafik dari port 80 (www) yang mempunyai tanda TOS 0×30 atau DSCP 12 (cache hit).
Catatan: trafik ke internet port 80 akan melalui server proxy remote secara transparent.
Source Code
#!/bin/sh # File: tc-1.sh # Deskripsi: Trafik control simple dengan htb # Kriteria: # 1. Trafik dari local area network (lan) ke router dan sebaliknya tidak melalui traffic control. # 2. Trafik dari lan ke internet atau upstream tidak melalui traffic control. # 3. Trafik dari internet ke lan atau downstream akan melalui traffic control, kecuali trafik # dari port 80 (www) yang mempunyai tanda TOS 0×30 atau DSCP 12 (cache hit). # # Created by Arief Yudhawarman (2009) # Email: awarmanff at yahoo.com # IPTABLES="/usr/sbin/iptables" TC="/sbin/tc" # parameter LAN="eth0" WAN="eth1" # Bandwidth # (kbps) RATE=384 CEIL=384 # # IPTABLES # PACKET MANGLE # # PREROUTING # # Flush table $IPTABLES -F -t mangle # # Mangle packet cache hit $IPTABLES -A PREROUTING -t mangle -i $WAN -p tcp -m dscp --dscp 12 -j MARK --set-mark 0x212 $IPTABLES -A PREROUTING -t mangle -i $WAN -p tcp -m dscp --dscp 12 -j RETURN # # Mangle all trafic $IPTABLES -A PREROUTING -t mangle -i $WAN -j MARK --set-mark 6 # # TRAFFIC CONTROL # # Create qdisc dev LAN $TC qdisc del dev $LAN root $TC qdisc add dev $LAN root handle 1:0 htb # # create class $TC class add dev $LAN parent 1:0 classid 1:2 htb rate ${RATE}kbit ceil ${CEIL}kbit quantum 1500 prio 8 # # Attach qdisc $TC qdisc add dev $LAN parent 1:2 handle 2: sfq perturb 10 # # Filter traffic with packet mark 6 $TC filter add dev eth0 protocol ip parent 1:0 prio 1 handle 6 fw flowid 1:2
Penjelasan:
- Baris 38: menandai trafik cache hit (dscp 12) yang masuk ke device wan dengan packet mark 212.
- Baris 39: -j RETURN agar trafik cache hit tidak akan masuk ke rule lain dibawahnya.
- Baris 42: menandai semua trafik yang masuk ke device wan dengan packet mark 6.
- Baris 59: filter semua trafik dengan packet mark 6 ke class handler 1:2
Untuk analisa paket mangle dan traffic control gunakan perintah:
- iptables -L PREROUTING -t mangle -nv
Chain PREROUTING (policy ACCEPT 2580K packets, 606M bytes) pkts bytes target prot opt in out source destination 20 22316 MARK tcp -- eth1 * 0.0.0.0/0 0.0.0.0/0 DSCP match 0x0c MARK set 0x212 20 22316 RETURN tcp -- eth1 * 0.0.0.0/0 0.0.0.0/0 DSCP match 0x0c 20391 1247K MARK all -- eth1 * 0.0.0.0/0 0.0.0.0/0 MARK set 0x6
- tc -s -d qdisc show dev eth0
qdisc htb 1: r2q 10 default 0 direct_packets_stat 0 ver 3.17 Sent 7500 bytes 52 pkts (dropped 0, overlimits 0) qdisc sfq 2: parent 1:2 limit 128p quantum 1514b flows 128/1024 perturb 10sec Sent 7500 bytes 52 pkts (dropped 0, overlimits 0)
- tc -s -d class show dev eth0
class htb 1:2 root leaf 2: prio 7 quantum 1500 rate 384000bit ceil 384000bit burst 2079b/8 mpu 0b overhead 0b cburst 2079b/8 mpu 0b overhead 0b level 0 Sent 168952 bytes 1120 pkts (dropped 0, overlimits 0) rate 4104bit 3pps lended: 1120 borrowed: 0 giants: 0 tokens: 16933 ctokens: 16933
- tc -s -d filter show dev eth0
filter parent 1: protocol ip pref 1 fw filter parent 1: protocol ip pref 1 fw handle 0x6 classid 1:2