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
