Bandwidth Manajemen Menggunakan HTB

From OnnoWiki
Jump to navigation Jump to search

Mengatur Bandwidth mengalokasikan maksimum bandwidth untuk setiap user / komputer menjadi momok bagi banyak operator terutama untuk menjaga agar penggunaan bandwidth dapat maksimal untuk keperluan yang baik dengan keterbatasan yang ada.

Ada beberapa software open source untuk mengatur bandwidth ini. Ada dua (2) teknik manajemen bandwidth yang banyak digunakan di lapangan, yaitu, HTB dan CBQ. CBQ merupakan teknik yang paling lama, HTB lebih baru dari CBQ. Beberapa laporan / literatur menyebutkan bahwa HTB lebih baik dari CBQ hasilnya. Pada kesempatan ini, kita akan mencoba memfokuskan pada HTB.

Umumnya program pengatur bandwidth gratisan dapat di cari di SourceForge (http://www.sf.net). Pada kesempatan ini akan ditunjukan cara menginstalasi dan mengoperasikan software HTB. Yang anda butuhkan adalah script htb.init melalui URL http://sourceforge.net/projects/htbinit/. Belakangan ternyata ada script yang mungkin menarik untuk di coba yang membuat konfigurasi HTB menjadi lebih sederhana yaitu htb-gen yang bisa di ambil di http://www.praga.org.ar/dev/htb-gen/packages/htb-gen_0.8.4_all.deb

Scipt htb.init di turunkan dari cbq.init, sehingga memudahkan bagi mereka yang sudah biasa menggunakan CBQ untuk pindah ke HTB.

Beberapa langkah sederhana untuk menginstalasi htb.init adalah sebagai berikut

Ambil file htb.init-* yang terbaru dari Source Forge

http://sourceforge.net/projects/htbinit/

Copy ke directory /sbin

# cp htb.init-v0.8.5 /sbin/
# mv /sbin/htb.init-v0.8.5 /sbin/htb.init

Buat directory htb di /etc/sysconfig

# mkdir /etc/sysconfig/htb

Buat Aturan untuk manajemen bandwidth di /etc/sysconfig/htb berbentuk file-file untuk masing-masing aturan yang nantinya akan di compile melalui perintah htb.init compile.


Start htb

# /sbin/htb.init compile
# /sbin/htb.init start
# echo /sbin/htb.init start -> /etc/rc.local


Konfigurasi HTB

Pada htb.init, setiap kelas traffic di jelaskan oleh sebuah file yang biasanya di telatkan di /etc/sysconfig/htb. Konvensi penamaan file berbeda dengan cbq.init. Prefix 'cbq-' di hilangkan di htb. Penamaan di ganti dengan nama interface supaya lebih mudah bagi manusia untuk membaca-nya maupun untuk memisahkan konfigurasi yang hanya disiplin antrian saja.

Pilihan disiplin antrian global biasanya di letakan di /etc/sysconfig/htb/ifname*;, dimana "ifname" adalah nama dari interface jaringan. File ini harus ada jika kita ingin HTB mensetup interface yang di maksud. Jika tidak ada option yang ingin di masukan tidak masalah, biarkan saja file tersebut kosong, tapi file harus ada. Pilihan kelas dari file menggunakan nama yang harus sesuai dengan format berikut,

/etc/sysconfig/htb/ifname[sid]-[clsid][description]
  • [clsid] adalah class ID yang merupakan nomor hexadecimal range 0x2-0xFFFF, ditulis tanpa prefix “0x”. Jika ada beberapa class ID yang di batasi oleh “:”, maka [sid] yang terakhir dalam daftar merepresentasikan ID dari class di file konfigurasi.
  • [sid] yang mendahului [clsid] terakhir adalah class ID dari parent class. Untuk menjamin urutan, maka parent class selalui dibuat sebelum anak class-nya, disarankan untuk menyertakan semua [clsid] dari root class hingga leaf.
  • [description] adalah kalimat sembarang yang dapat kita tambahkan pada nama simbolik class agar dapat lebih terbaca.

Contoh nama yang valid adalah

eth0-2      root class dengan ID 2, pada interface eth0
eth0-2:3    child class dengan ID 3 dan parent 2, pada interface eth0
eth0-2:3:4  child class dengan ID 4 dan parent 3, pada interface eth0
eth1-2.root root class dengan ID 2, pada interface eth1

Ada banyak parameter yang dapat dimasukan ke file-file di atas. Detail dari parameter htb dapat dilihat pada http://luxik.cdi.cz/~devik/qos/htb. Beberapa format / perintah dari file aturan / rule di HTB terbagi dalam beberapa jenis parameter


Parameter Disiplin Antrian

Parameter disiplin antrian hanya berlaku pada disiplin antrian root htb dan harus dimasukan ke dalam file /etc/sysconfig/htb/[ifname]. File [ifname] harus ada jika kita ingin htb di operasikan di interface tersebut.


DEFAULT=[clsid]                               optional, default 0
DEFAULT=30

[clsid] adalah ID class default untuk traffic yang tidak berhasil di klasifikasi. Hati-hati htb.init akan menggunakan class ID default 0, yang artinya antrian FIFO akan berusaha mengirim paket pada kecepatan FULL / maksimum. Dengan mengubah DEFAULT akan menyebabkan prioritas paket menjadi lebih rendah.


R2Q=[number]                                  optional, default 10
R2Q=100
R2Q=100

Parameter R2Q memungkinkan kita untuk menset koefisien untuk menghitung nilai DRR (Deficit Round Robin). Nilai default 10 cukup baik untuk kecepatan 5-500Kbps dan harus di naikan untuk kecepatan tinggi.


DCACHE=yes|no                                 optional, default "no";

Paramter ini akan mengakifkan "dequeue cache" yang akan mengurani keadilan dalam pemrosesan paket tapi memungkinkan htb untuk digunakan dalam jaringan yang sangat cepat. Parameter ini default-nya off.


Paramater Class HTB

Parameter class HTB harus di letakan di file /etc/sysconfig/htb/[ifname]-[clsid](:[clsid])*.*.

RATE="speed"|prate|pceil                    wajib
RATE=5Mbit

Alokasi bandwidth ke sebuah class. Traffic yang lewat melalui class tertentu akan di bentuk sesuai dengan kecepatan yang diberikan. Anda dapat menggunakan Kbit, Mbit atau bps, Kbps, dan Mbps. Jika tidak di berikan unit-nya, maka bit/detik akan digunakan. Perlu di catat bahwa “bps” disini berarti “byte per detik” bukan bit per detik.

Nilai "prate" atau "pceil" akan mengambil nilai RATE atau CEIL dari class parent. Feature ini dibuat untuk membantu manusia agar file konfigurasi konsisten.


CEIL="speed"|prate|pceil            optional, default $RATE
CEIL=6MBit

Maksimum bandwith yang dapat digunakan oleh class. Beda antara CEIL dan RATE adalah besar bandwith yang dapat di pinjam, jika ada bandwidth yang sisa.

Default-nya, CEIL sama dengan RATE oleh karena itu class tidak dapat meminjam bandwidth dari parent. Jika kita ingin class bisa meminjam bandwidth yang tidak digunakan, kita harus memasukan nilai maksimum yang dapat digunakan, jika ada sisa.

Pada saat beberapa class berkompetisi untuk menggunakan bandwidth yang tidak digunakan, setiap class akan di berikan share proporsional terhadap RATE class tersebut.


BURST="bytes"            optional, default dihitung
BURST=10Kb
CBURST="bytes"            optional, default dihitung
CBURST=2Kb

Parameter BURST dan CBURST mengatur jumlah data yang akan dikirim dari satu class pada maksimum kecepatan hardware sebelum berusaha memberikan servis ke class yang lain.

Jika CBURST kecil, dia akan mengatur pengiriman paket agar tidak melebihi kecepatan CEIL, kira-kira sama dengan cara PEAK bekerja di mekanisme TBF.


PRIO=5

Prioritas dari class traffic. Semakin besar nomor, semakin kecil prioritas. Class dengan prioritas tinggi biasanya akan di berikan prioritas lebih dulu untuk menggunakan kelebihan bandwidth. Prioritas 5 sudah cukup.


LEAF=none|sfq|pfifo|bfifo        optional, default "none"

Memberitahukan script untuk menempelkan disiplin antrian yang spesifik untuk leaf ke class htb. Default-nya, tidak ada disiplin antrian leaf yang digunakan.

Jika kita ingin menjamin bahwa sharing bandwidth antara beberapa mesin di class yang sama, kita sebaiknya menggunakan LEAF=sfq untuk menempelkan SFQ sebagai disiplin antrian leaf ke sebuah class.


MTU="bytes"                optional, default "1600"

Maksimum panjang paket yang akan di buat oleh htb. Nilai default harusnya cukup untuk berbagai hal, tentunya cukup untuk Ethernet.


Parameter disiplin antrian SFQ

Disiplin antrian SFQ merupakan cara paling murah untuk melakukan sharing bandwidth antara beberapa mesin. Disiplin ini bersifat stochastik (random), tidak betul-betul fair tapi cukup fairlah. Jika anda membutuhkan sesuatu yang betul-betul fair, sebaiknya menggunakan disiplin antrian WRR (weighted round robin) atau WFQ. Perlu di catat bahwa SFQ tidak melakukan shaping trafik – shaping dilakukan oleh class HTB yang menggunakan SFQ.


QUANTUM="bytes"                    optional, default not set

Paramter ini harus di set tidak lebih rendah dari MTU sambungan, untuk ethernet adalah 1500b, atau (dengan MAC header) 1514b.


PERTURB="seconds"                optional, default "10"

Perioda yang digunakan oleh fungsi hash perturbation. Jika tidak di set, rekonfigurasi hash akan terjadi pada waktu yang mungkin tidak kita inginkan. Nilai defaul 10 detik biasanya cukup baik.

Parameter Disiplin Antrian PFIFO/BFIFO

Untuk antrian FIFO sederhana. Biasanya hanya satu parameter yang menentukan panjang-nya dalam byte atau paket.

LIMIT="packets"|"bytes"                       optional, qdisc default
LIMIT=1000

Jumlah paket / byte di antrian yang dapat di tampung. Unit tergantung pada tipe antrian yang digunakan.

Parameter Filter

RULE=[[saddr[/prefix]][:port[/mask]],][daddr[/prefix]][:port[/mask]]

Parameter ini akan membuat “u32” filter yang akan memilih traffic untuk setiap class. Anda dapat menggunakan multiple RULE per config.

Mask port sifatnya optional dan hanya digunakan bagi pengguna yang sudah mahir dan mengerti bagaimana cara kerja filter “u32” bekerja.

Beberapa contoh:

RULE=10.1.1.0/24:80

Pilih trafik menuju menuju jaringan 10.1.1.0/24 port 80

RULE=10.2.2.5
     Pilih trafik menuju ke semua port pada sebuah mesin 10.2.2.5
RULE=10.2.2.5:20/0xfffe
     Pilih trafik menuju port 20 dan 21 pada mesin 10.2.2.5
RULE=:25,10.2.2.128/26:5000
     Pilih trafik dari mana saja dengan source port 25 ke jaringan 10.2.2.128/26 port 5000
RULE=10.5.5.5:80,
     Pilih trafic dari Web server mesin 10.5.5.5 port 80 menuju mana saja.


REALM=[srealm,][drealm]

Parameter akan membentuk filter “route” yang akan mengklasifikasi trafik berdasarkan realm source / destination paket. Untuk informasi lebih lanjut tentang realm, silahkan membaca referensi IP command dari Alexey Kuznetsov (http://linux-ip.net/gl/ip-cref/) . Script HTB tidak mendefinisikan realm apapun, HTB script ini hanya akan membuat perintah “tc filter” untuk anda.

Realm dapat berbentuk nomor desimal atau kata yang mengacu pada realm biasanya bisa di baca di /etc/iproute2/rt_realms.

Contoh:

REALM=russia,internet
      Pilih trafik dari realm "russia" ke realm "internet"
REALM=freenet,
      Pilih trafik dari realm "freenet"
REALM=10
      Pilih trafik ke realm 10


MARK="mark"

Parameter ini akan membuat aturan filter “fw” yang akan memilih trafik untuk setiap class sesuai dengan “mark” firewall. Mark adalah nomor desimal yang ditandakan pada paket jika aturan firewall mengatakan demikian. Anda dapat menggunakan multiple MARK per config.

Perlu dicatat bahwa aturan untuk berbagai tipe filter dapat di gabungkan. Kita harus memperhatikan prioritas dari aturan filter, yang dapat di set menggunakan variabel PRIO_{RULE,MARK,REALM}.


Parameter Waktu

TIME=dowdow.../from-till;[rate[/burst][ceil[/cburst]]
   TIME=60123/18:00-06:00;256Kbit/10Kb,384Kbit
   TIME=18:00-06:00;256Kbit

Melalui parameter ini kita dapat membedakan bandwidth sebuah class dalam satu hari. Kita menggunakan multiple TIME, jika waktu-nya overlap, yang terakhir yang akan digunakan. Parameter "rate", "burst", "ceil" dan "cburst" mengacu pada parameter RATE, BURST, CEIL dan CBURST.

Kita juga dapat mengatur berdasarkan hari dalam satu minggu pada aturan TIME, Day of Week <dow> dalam angka, 0 berarti minggu, 1 berarti senin, dst. Untuk menspesify beberapa hari, kita perlu menulis angka-nya menjadi satu kesatuan.

Proses membuat aturan untuk di letakan di /etc/sysconfig/htb tidak terlalu sukar, hanya saja kita perlu membuat skenario yang spesifik di jaringan yang akan anda atur bandwidthnya.


Contoh Konfigurasi

Untuk membayangkan proses membuat file konfigurasi, kita lihat contoh topologi jaringan yang sering digunakan di RT/RW-net dengan ADSL Modem / router 3G tersambung ke Internet.Bayang kita kita mempunyai sambungan ke Internet menggunakan ADSL kecepatan uplink 64Kbps sementara kecepatan downlink 384Kbps.

Perlu di catat bahwa kita hanya dapat mengontrol trafic yang keluar dari device / interface saja. Kita tidak dapat mengontrol traffic yang masuk ke interface. Jika kita akan mengontrol trafic di kedua arah, sebaiknya HTB di implementasikan di ke dua interface tempat traffic keluar.

Traffic dari internet ke LAN akan keluar melalui eth0 dengan kecepatan maksimum sama dengan ADSL 384Kbps. Sementara traffic dari LAN ke Internet akan keluar dari eth1 dengan kecepatan maksimum 64Kbps.

Bayangkan jika kita ingin agar semua client di LAN memperoleh 28Kbit dari Internet. Sedangkan untuk trafik dari LAN ke Internet di ijinkan untuk sampai dengan 1Kbit untuk setiap client. Yang perlu di ketahui juga bahwa semua trafik akan melalui Linux proxy server yang menjalankan fungsi NAT, sehingga IP address LAN 192.168.0.0/24 akan berubah menjadi 192.168.1.100 pada saat masuk ke router ADSL.

Proses bandwith manajemen di lakukan di PC Linux, kita perlu mensetup file konfigurasi HTB di kedua interface eth1(menuju ke Internet) dan eth0 (menuju LAN). File konfigurasi untuk mengatur / memanajed bandwidth di letakan di /etc/sysconfig/htb

File eth0

DEFAULT = 30

File eth0-2.root

RATE  = 384Kbit
BURST = 15k

File eth0-2:30.default

RATE  = 28Kbit
CEIL  = 384Kbit
BURST = 15k
LEAF  = sfq

File eth1

DEFAULT = 30

File eth1-2.default

RATE  = 64Kbit
BURST = 15k

File eth1-2:30.default

RATE  = 1Kbit
CEIL  = 64Kbit
BURST = 15k
LEAF  = sfq


Kita dapat dengan mudah memberikan perlakuan / bandwidth khusus untuk sebuah workstation / PC agar beda dari yang lain. Misalnya PC / workstation 192.168.0.104 kita ingin berikan kecepatan ke Internet lebih tinggi menjadi 100Kbps dari Internet dan 10Kbps menuju Internet. Maka konfigurasi yang perlu ditambahkan adalah

File eth0-2:10.pc104

RATE  = 100Kbit
CEIL  = 384Kbit
BURST = 15k
LEAF  = sfq
RULE  = 192.168.0.104

File eth1-2:10.pc104

RATE  = 10Kbit
CEIL  = 64Kbit
BURST = 15k
LEAF  = sfq
RULE  = 192.168.0.104

Dengan menggunakan perintah rule kita dapat mengatur aplikasi per workstation misalnya kita memberikan prioritas lebih tinggi untuk game di bandingkan dengan Web dsb. Kita perlu mengetahui port dari masing-masing aplikasi yang akan kita konfigurasi bandwidth-nya.

Setelah semua konfigurasi dibuat, yang perlu kita lakukan adalah

# /sbin/htb.init compile
# /sbin/htb.init start
# echo /sbin/htb.init start -> /etc/rc.local

Lakukan htb.init compile setiap kali kita mengubah / menambah aturan bandwidth.