Arief Yudhawarman

Masih belajar buat blog

Linux Traffic Control (1)

with 6 comments

Topologi jaringan dan desain htb

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 0x30 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
    


Referensi

  1. Linux Advanced Routing & Traffic Control HOWTO
  2. Manual iptables
  3. Referensi berbahasa indonesia mengenai traffic control di Penjelasan Traffic Shaping



Last update: 2009-12-29 19:28 +07:00

Written by awarmanf

December 29, 2009 at 12:40 pm

Posted in Linux, traffic control

6 Responses

Subscribe to comments with RSS.

  1. Thx atas tulisan nya mas …
    Pertanyaan :
    1. Bagaimana jika kapasitas WAN interface nya punya minimum-speed (i.e: 32 kbps) dan unguaranted max speed (i.e: 512 kbps)
    2. Bagaimana jika WAN interface nya adalah ppp (i.e: speedy, dimana modem nya hanya sebagai bridge)
    3. Apakah script ini suppor juga untuk untuk NAT (SNAT)

    Salam
    -bino-

    bino

    January 30, 2010 at 3:52 am

    • 1. Untuk speed yang dinamik begini susah juga untuk menentukan besaran ceiling yang pas berapa.
      2. Tinggal mengganti parameter eth1 menjadi ppp0 di WAN.
      3. Sudah support NAT.

      Arief Yudhawarman

      January 30, 2010 at 4:05 am

  2. Thanks for the help. ArieF
    This link :
    http://www.mail-archive.com/tanya-jawab@linux.or.id/msg69368.html

    Thanks my Friend !!!!

    Do you have skype ??
    regards
    Cristiano – Brazil.

    Cristiano - Brazil

    April 26, 2010 at 12:41 pm

    • I have no skype. But you can contact me at yahoo messenger. My nick is awarmanff. I am happy that my solution can solve your problem. If you find difficulties with indonesian languange I can explain to you in english.

      awarmanf

      April 26, 2010 at 1:04 pm

  3. My skype:

    cristianodebian

    regards,

    Cristiano

    Cristiano - Brazil

    April 26, 2010 at 12:43 pm

  4. Excellent posting. Can’t wait to read much more about this subject.

    rockwell review

    May 17, 2010 at 2:38 am


Leave a reply to bino Cancel reply