3.22.2010

Linux Traffic Control (2)

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 0×30 atau DSCP 12 (cache hit).
  5. Setiap pc atau anggota lan akan memiliki class dan qdisc sendiri-sendiri.
  6. Ada class default untuk handle traffic untuk object yang tidak didefinisikan atau unclassified traffic
Catatan: trafik ke internet port 80 akan melalui server proxy remote secara transparent.

Topologi network
Network LAN : 192.168.41.0/24
IP Router   : 192.168.41.1
IP Client   : 192.168.41.2 - 192.168.41.14
Device LAN  : eth0
Device WAN  : eth1

Alokasi bandwidth internet (downstream)
Root
  - Ceiling  : 384kbps
  - Rate     : 384kbps
Client
  - Ceiling  : 384kbps
  - Rate     : 16kbps
Unclassified
  - Ceiling  : 128kbps
  - Rate     : 16kbps

Source Code tc-2.sh
001#!/bin/sh
002 
003# File: tc-2.sh
004# Deskripsi: Trafik control simple dengan htb
005# Kriteria:
006# 1. Traffic control hanya untuk trafik eggress dari device eth0 (lan)
007# 2. Trafik dari local area network (lan) ke router dan sebaliknya tidak melalui traffic control.
008# 3. Trafik dari lan ke internet atau upstream tidak melalui traffic control.
009# 4. Trafik dari internet ke lan atau downstream akan melalui traffic control, kecuali trafik
010#     dari port 80 (www) yang mempunyai tanda TOS 0×30 atau DSCP 12 (cache hit).
011# 5. Setiap pc atau anggota lan akan memiliki class dan qdisc sendiri-sendiri.
012# 6. Ada class default untuk handle traffic untuk object yang tidak didefinisikan.
013#
014# Created by Arief Yudhawarman (2009)
015# Email: awarmanff at yahoo.com
016#
017 
018IPTABLES="/usr/sbin/iptables"
019TC="/sbin/tc"
020 
021# parameter
022LAN="eth0"
023WAN="eth1"
024 
025# Bandwidth
026# (kbps)
027# ROOT CLASS
028RATE=384
029CEIL=384
030#
031# SUB CLASS
032RATESUB=16
033CEILSUB=384
034#
035# UNCLASSIFIED TRAFFIC
036RATEUN=16
037CEILUN=128
038 
039#
040# IPTABLES
041# PACKET MANGLE
042#
043 
044# PREROUTING
045#
046# Flush table
047$IPTABLES -F -t mangle
048 
049#
050# cache hit set mark to 5
051$IPTABLES -A PREROUTING -t mangle -i $WAN -p tcp -m dscp --dscp 12 -j MARK --set-mark 5
052$IPTABLES -A PREROUTING -t mangle -i $WAN -p tcp -m dscp --dscp 12 -j RETURN
053#
054# all traffic trough device wan set mark to 6
055$IPTABLES -A PREROUTING -t mangle -i $WAN -j MARK --set-mark 6
056 
057#
058# FORWARD
059#
060# cache hit with mark 5 set mark again to 0x212
061iptables -A FORWARD -t mangle -p tcp -m mark --mark 5 -j MARK --set-mark 0x212
062#
063# mark packet based on destination ip
064for i in `seq 2 14`
065do
066  j=$((i+10))
067  iptables -A FORWARD -t mangle -d 192.168.41.$i -m mark --mark 6 -j MARK --set-mark $j
068done
069# unclassified traffic to lan set mark to 255
070iptables -A FORWARD -t mangle -d 192.168.41.0/24 -m mark --mark 6 -j MARK --set-mark 255
071 
072#
073# TRAFFIC CONTROL
074#
075 
076#
077# Create qdisc dev LAN
078tc qdisc del dev $LAN root
079#tc qdisc add dev $LAN root handle 1:0 htb default 255
080tc qdisc add dev $LAN root handle 1:0 htb
081#
082# create class
083tc class add dev $LAN parent 1:0 classid 1:2 htb rate ${RATE}kbit ceil ${CEIL}kbit quantum 1500 prio 6
084tc class add dev $LAN parent 1:0 classid 1:255 htb rate ${RATEUN}kbit ceil ${CEILUN}kbit quantum 1500 prio 8
085 
086#
087# Sub class of parent 1:2
088for i in `seq 2 14`
089do
090  j=$((i+10))
091  # create class per ip address
092  tc class add dev $LAN parent 1:2 classid 1:$j htb rate ${RATESUB}kbit \
093     ceil ${CEILSUB}kbit quantum 1500 prio 6
094  # attach qdisc
095  tc qdisc add dev $LAN parent 1:$j handle $j sfq perturb 10
096done
097# Sub class of 1:255 or default or unclassified traffic
098# attach qdisc
099tc qdisc add dev $LAN parent 1:255 handle 255 sfq perturb 10
100 
101#
102# Filter traffic
103#
104# Sub class of parent 1:2
105offset=10
106for i in `seq 2 14`
107do
108  j=$((i+10))
109  # Attach filter to flowid with specified handle (packet mark)
110  tc filter add dev $LAN protocol ip parent 1:0 prio 6 handle $j fw flowid 1:$j
111done
112#
113# Sub class of 1:255 or default or unclassified traffic
114tc filter add dev eth0 protocol ip parent 1:0 prio 8 handle 255 fw flowid 1:255
Penjelasan:
  • Baris 51: menandai trafik cache hit (dscp 12) yang masuk ke device wan dengan packet mark 5
  • Baris 52: -j RETURN agar trafik cache hit tidak akan masuk ke rule lain dibawahnya.
  • Baris 55: tandai semua trafik yang masuk ke device wan dengan packet mark 6.
  • Baris 61: packet mark 5 (cache hit) yang masuk ke chain FORWARD di-mark kembali dengan 212.
  • Keterangan untuk baris-baris selanjutnya terdapat di baris komentar.
Analisa paket mangle dan traffic control
Perhatikan baris-baris yang tercetak tebal.
  • tc -s -d qdisc show dev eth0
  • qdisc htb 1: r2q 10 default 0 direct_packets_stat 794 ver 3.17
     Sent 16722535 bytes 17532 pkts (dropped 0, overlimits 45)
    qdisc sfq 12: parent 1:12 limit 128p quantum 1514b flows 128/1024 perturb 10sec
     Sent 16116818 bytes 16712 pkts (dropped 0, overlimits 0)
    qdisc sfq 13: parent 1:13 limit 128p quantum 1514b flows 128/1024 perturb 10sec
     Sent 1910 bytes 12 pkts (dropped 0, overlimits 0)
    qdisc sfq 14: parent 1:14 limit 128p quantum 1514b flows 128/1024 perturb 10sec
     Sent 345 bytes 4 pkts (dropped 0, overlimits 0)
    qdisc sfq 15: parent 1:15 limit 128p quantum 1514b flows 128/1024 perturb 10sec
     Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
    qdisc sfq 16: parent 1:16 limit 128p quantum 1514b flows 128/1024 perturb 10sec
     Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
    qdisc sfq 17: parent 1:17 limit 128p quantum 1514b flows 128/1024 perturb 10sec
     Sent 1854 bytes 10 pkts (dropped 0, overlimits 0)
    qdisc sfq 18: parent 1:18 limit 128p quantum 1514b flows 128/1024 perturb 10sec
     Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
    qdisc sfq 19: parent 1:19 limit 128p quantum 1514b flows 128/1024 perturb 10sec
     Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
    qdisc sfq 20: parent 1:20 limit 128p quantum 1514b flows 128/1024 perturb 10sec
     Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
    qdisc sfq 21: parent 1:21 limit 128p quantum 1514b flows 128/1024 perturb 10sec
     Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
    qdisc sfq 22: parent 1:22 limit 128p quantum 1514b flows 128/1024 perturb 10sec
     Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
    qdisc sfq 23: parent 1:23 limit 128p quantum 1514b flows 128/1024 perturb 10sec
     Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
    qdisc sfq 24: parent 1:24 limit 128p quantum 1514b flows 128/1024 perturb 10sec
     Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
    qdisc tbf 255: parent 1:255 rate 16000bit burst 2Kb/8 mpu 0b lat 85.5ms
     Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
  • iptables -L -t mangle -nv
  • Chain PREROUTING (policy ACCEPT 2695K packets, 631M bytes)
     pkts bytes target     prot opt in     out     source               destination
      664  574K MARK       tcp  --  eth1   *       0.0.0.0/0            0.0.0.0/0           tcp spt:80 DSCP match 0x0c MARK set 0x5
      664  574K RETURN     tcp  --  eth1   *       0.0.0.0/0            0.0.0.0/0           tcp spt:80 DSCP match 0x0c
    83980   19M MARK       all  --  eth1   *       0.0.0.0/0            0.0.0.0/0           MARK set 0x6 
    
    Chain INPUT (policy ACCEPT 1696K packets, 96M bytes)
     pkts bytes target     prot opt in     out     source               destination         
    
    Chain FORWARD (policy ACCEPT 1000K packets, 535M bytes)
     pkts bytes target     prot opt in     out     source               destination
      664  574K MARK       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           MARK match 0x5 MARK set 0x212
    16834   16M MARK       all  --  *      *       0.0.0.0/0            192.168.41.2        MARK match 0x6 MARK set 0xc 
       12  1742 MARK       all  --  *      *       0.0.0.0/0            192.168.41.3        MARK match 0x6 MARK set 0xd
        4   289 MARK       all  --  *      *       0.0.0.0/0            192.168.41.4        MARK match 0x6 MARK set 0xe
        0     0 MARK       all  --  *      *       0.0.0.0/0            192.168.41.5        MARK match 0x6 MARK set 0xf
        0     0 MARK       all  --  *      *       0.0.0.0/0            192.168.41.6        MARK match 0x6 MARK set 0x10
       10  1714 MARK       all  --  *      *       0.0.0.0/0            192.168.41.7        MARK match 0x6 MARK set 0x11
        0     0 MARK       all  --  *      *       0.0.0.0/0            192.168.41.8        MARK match 0x6 MARK set 0x12
        0     0 MARK       all  --  *      *       0.0.0.0/0            192.168.41.9        MARK match 0x6 MARK set 0x13
        0     0 MARK       all  --  *      *       0.0.0.0/0            192.168.41.10       MARK match 0x6 MARK set 0x14
        0     0 MARK       all  --  *      *       0.0.0.0/0            192.168.41.11       MARK match 0x6 MARK set 0x15
        0     0 MARK       all  --  *      *       0.0.0.0/0            192.168.41.12       MARK match 0x6 MARK set 0x16
        0     0 MARK       all  --  *      *       0.0.0.0/0            192.168.41.13       MARK match 0x6 MARK set 0x17
        0     0 MARK       all  --  *      *       0.0.0.0/0            192.168.41.14       MARK match 0x6 MARK set 0x18
        0     0 MARK       all  --  *      *       0.0.0.0/0            192.168.41.0/24     MARK match 0x6 MARK set 0xff 
    
    Chain OUTPUT (policy ACCEPT 1678K packets, 285M bytes)
     pkts bytes target     prot opt in     out     source               destination         
    
    Chain POSTROUTING (policy ACCEPT 2651K packets, 819M bytes)
     pkts bytes target     prot opt in     out     source               destination

Tidak ada komentar: