Linux Traffic Control (1)

Sumber: http://awarmanf.wordpress.com/2009/12/29/linuxtc1/

Topologi jaringan dan desain htb

Kriteria dalam pembuatan traffic control ini

  1. Traffic control hanya untuk trafik eggress dari device eth0 (lan)
  2. Trafik dari local area network (lan) ke router dan sebaliknya tidak melalui traffic control.
  3. Trafik dari lan ke internet atau upstream tidak melalui traffic control.
  4. 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

Leave a Reply