Bandwidth Manajemen Menggunakan HTB
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.