Thursday 20 March 2014

Memisahkan antara download dan browsing dengan mikrotik

Sekedar share settingan, siapa tahu dengan adanya masukan-masukan dari rekan-rekan sekalian dapat lebih memaksimalkan setting mikrotik saya;

pertama kita buat list filter di "/ip firewall filter" yang akan menangkap setiap request yang berisi contens file-file yang biasa di download; seperti .exe .rar .zip dan website-website yang biasa ngabisin bandwith; seperti youtube, megarotic dll.. 
Dan setelah di tangkap, maka ip address si website yang didownload tersebut akan kita masukkan kedalam list tersendiri; yang didalam contoh ini saya bikin list "yes_no".

berikut adalah hasil dari perintah yang dibikin (maaf saya tampikan hasil jadinya saja, karena saya bikin di winbox...)
chain=forward protocol=tcp dst-port=80 content=.exe src-address-list=x_z_1_download action=add-dst-to-address-list address-list=yes_no address-list-timeout=1d
Disini setiap website yang diakses oleh list address "x_z_1_download" akan dimasukkan dalam list "yes_no" selama satu hari; (perkiraan download paling lama)

kemudian bikin satu mangle untuk menangkap client yang melakukan download;
chain=postrouting out-interface=ether1 connection-mark=http_conn src-address-list=yes_no dst-address-list=_best action=mark-packet new-packet-mark=http_clients_down passthrough=no
Setiap aksi dari list address "_best" yang bertujuan ke list address "yes_no" pada port '80' akan dimark packet dengan nama "http_clients_down";

filtering dan marking packet udah selesai; sekarang kita bikin "queue tree"-nya untuk membatasi bandwith download ini :
bikin dulu "queue type" pcq dengan nama "_d_best_down" dan rate-nya diset 64000 (8 KB/s);
name="_d_best_down" kind=pcq pcq-rate=64000 pcq-limit=50 pcq-classifier=dst-address pcq-total-limit=2000
Dengan rate ini, sebesar-besarnya client download; mereka hanya akan mendapatkan max 8 KB/s; meskipun dia menggunakan IDM atau apapun namanya.
Selanjutnya bikin queue tree;
name="In_best_down" parent=2_In_best packet-mark=http_clients_down limit-at=0 queue=_d_best_down priority=8 max-limit=320000 burst-limit=0 burst-threshold=0 burst-time=0s
Diberi nama "In_best_down" dengan parent "2_In_best" yang menangani packet mark yang sudah kita buat diatas; yakni "http_clients_down" dengan priority paling bontot=8; rate 0 dan max 320kbps; (perkiraan dalam waktu bersamaan yang download 5 user).
mengenai priority; untuk browsing biasa diberi priority yang lebih tinggi, semisal "2" atau "3", sehingga jika ada user yang sedang download, pada saat juga melakukan browsing, maka download istirahat sejenak, nunggu browsing-nya selesai and setelah itu download lanjut lagi...
Selesai....
Tapi ada permasalahan sedikit; dimana apabila website yang sudah ditangkap dan dimasukan ke dalam list "yes_no" itu ternyata adalah website penting seperti "yahoo", "google" dll.. maka dia akan tetap kelimit selama satu hari.. wah...... 
Untuk mengatasi ini, kita membuat scripts yang khsusus melakukan checking pada website-website penting tersebut; dimana jika ditemukan website itu tertangkap, maka secara otomatis akan dihapus dari list "yes_no" agar tidak terlimit. Jadi khsusus untuk website peting ini aja download bebas melalui jalur browsing biasa.. gpp-lah... kan jarang-jarang juga client download attachment dari email.
pertama bikin dulu fiternya untuk nangkap website penting tersebut:
chain=forward protocol=tcp dst-port=80 content=yahoo.co src-address-list=x_z_1_download
action=add-dst-to-address-list address-list=penting address-list-timeout=1d
Setiap aksi dari list address "x_z_1_download" yang berisi contents "yahoo.co" akan dimasukkan kedalam list "penting". (bukan "yes_no") karena ini akan kita gunakan sebagai dasar`untuk melakukan pengecekan pada script kita;
dan selanjutnya bikin scripts :
:foreach i in=[/ip firewall address-list find list=penting dynamic=yes] do={/ip firewall address-list remove [find address=[/ip firewall address-list get $i address]]}
Semua ip yang terdapat dalam list "penting" akan dihapus, termasuk yang berada di list "yes_no" dll...
bikin scheduler:
cek_penting penting jan/01/1970 22:29:00 5s 4417
Aksi dilakukan setiap 5 detik.

Selanjutnya bagaimana dengan yang sudah selesai download?
karena kita set waktu penangkapan selama 1 hari, maka ada kemungkinan di pendownload sudah selesai; dan ada baiknya website yang ada di list "yes_no" dan sudah tidak aktif lagi melakukan koneksi dihapus saja; ini untuk menjaga agar jika ada user yang hanya sekedar browsing pada website tersebut tidak terhalang oleh priority "8" tadi, biar normal lagilah istilahnya;
Jadi secara periodik kita harus mengecek status koneksi khusus untuk list "yes_no" saja. apakah masih ada koneksi aktif apa tidak; jika masih ada dibiarkan, jika sudah tidak ada dihapus...!!!
Bikin scripts lagi:
:foreach i in=[/ip firewall address-list find list=yes_no dynamic=yes]do={:if([:len [/ip fire conn find dst-address=([/ip firewall address-list get $i address]. ":80")]]=0) do={/ip fire address-list remove $i}}
Melakukan cek koneksi yang ada pada port 80, jika ternyata si ip dalam list masih aktif koneksinya: dibiarkan, jika udah gak ada aktifitas lagi: dihapus...
Bikin scheduler-nya :
cek_remove remove jan/01/1970 22:29:00 11s 1661
Untuk peletakan aturan dalam mangle-nya, harus pas, dimana aturan untuk download ini diletakkan diatas aturan untuk browsing biasa

No comments:

Post a Comment