<body><script type="text/javascript"> function setAttributeOnload(object, attribute, val) { if(window.addEventListener) { window.addEventListener('load', function(){ object[attribute] = val; }, false); } else { window.attachEvent('onload', function(){ object[attribute] = val; }); } } </script> <div id="navbar-iframe-container"></div> <script type="text/javascript" src="https://apis.google.com/js/platform.js"></script> <script type="text/javascript"> gapi.load("gapi.iframes:gapi.iframes.style.bubble", function() { if (gapi.iframes && gapi.iframes.getContext) { gapi.iframes.getContext().openChild({ url: 'https://www.blogger.com/navbar.g?targetBlogID\x3d3417119785294949608\x26blogName\x3dMy+Special+Blog\x26publishMode\x3dPUBLISH_MODE_BLOGSPOT\x26navbarType\x3dTAN\x26layoutType\x3dCLASSIC\x26searchRoot\x3dhttps://yudymardianto.blogspot.com/search\x26blogLocale\x3den_US\x26v\x3d2\x26homepageUrl\x3dhttp://yudymardianto.blogspot.com/\x26vt\x3d995569220600001438', where: document.getElementById("navbar-iframe-container"), id: "navbar-iframe" }); } }); </script>

My Special Blog

Uang adalah Hamba yang sangat baik tapi merupakan Tuan yang sangat buruk.

« Home | Next » | Next » | Next » | Next » | Next » | Next » | Next »

Membagi Bandwidth Dengan FreeBSD

Sebelum saya menerang mengenai pembagian bandwith dengan FreeBSD dengan lebih lanjut, saya sarankan anda membaca man page 'ipfw(' dan 'dummynet(4)'.

Soalan
======
Ngapa butuh traffic shaping?
------------------------------

Traffic shaping adalah untuk menghad sesuatu bandwidth mengikut konfigurasi anda. Contohnya, anda mempunyai
10 buah PC di kantor anda dan anda mahu semua PC itu mendapat bandwidth sebanyak 256Kbps. Anda bisa lakukannya dengan cara ini. Selain itu, anda bisa pastikan sesuatu IP atau port mendapat 'priority' dengan menggunakan WFQ (Weight Fair Queueing)
Bolehkan benda ni handle banyak connection?
-------------------------------------------
Mungkin bisa, mungkin tidak juga. Saya udah mencoba cara ini dengan 40 client, dan enggak menghadapi apa-apa masalah.
Pentium II 300 dan 64MB RAM udah cukup bagus untuk menjanakannya. Pastikan anda menggunakan network card yang berkualitas.

Langkah 1: Kernel
=================
Pastikan kernel anda dicompile konfigurasi ini:
options IPFIREWALL
options DUMMYNET
options HZ=1000
'IPFIREWALL' adalah untuk filtering, 'DUMMYNET' adalah untuk traffic shaping dan 'HZ=1000' yang bermaksud operasi kernel akan dijalankan pada 1ms.

Langkah 2: IPFW
===============
IPFW merupakan interface kepada IPFIREWALL dan DUMMYNET. Ianya sudah ada dalam mana-mana OS FreeBSD.
Anda mesti menambah konfigurasi ini dalam /etc/rc.conf supaya IPFW diexecute secara automatik ketika bootup.
firewall_enable="YES"
firewall_script="/etc/ipfw.conf"
'firewall_enable="YES"' bermaksud bahawa rc.conf akan execute ipfw pada bootup dengan rules yang diset oleh
'firewall_script="/etc/ipfw.conf"'. Anda boleh menukar nama fail script anda.
Saya tidak akan menerang tentang ipfirewall dan NAT dalam artikel ini, anda perlu rujuk kepada artikel lain berkenaan perkara tersebut.

Langkah 3: Konfigurasi IPFW
===========================
Menghad Bandwidth (Bandwidth Limit)
-----------------------------------
Anda boleh menghad bandwidth dengan contoh-contoh dibawah:
contoh 1:
$ipfw pipe 1 config bw 128Kbit/s
$ipfw pipe 2 config bw 128Kbit/s
$ipfw add pipe 1 all from any to 192.168.1.1 in
$ipfw add pipe 2 all from 192.168.1.1 to any out
Konfigurasi ini akan menghad bandwidth download dan upload dari IP 192.168.1.1 kepada 128Kbps
contoh 2:
$ipfw pipe 1 config mask dst-ip 0x000000ff bw 128Kbit/s
$ipfw pipe 2 config mask src-ip 0x000000ff bw 128Kbit/s
$ipfw add pipe 1 all from any to 192.168.1.0/24 in
$ipfw add pipe 2 all from 192.168.1.0/24 to any out
Konfigurasi ini akan menghad bandwidth download dan upload dari network 192.168.1.0/24 kepada 128Kbps
WFQ (Weight Fair Queueing)
--------------------------
Anda boleh mengkofigurasikan mana-mana IP atau port yang akan mendapat 'priority' mengikut contoh-contoh dibawah:

contoh 1:
$ipfw pipe 1 config bw 128Kbit/s
$ipfw pipe 2 config bw 128Kbit/s
$ipfw queue 100 config pipe 2 weight 90
$ipfw queue 101 config pipe 2 weight 60
$ipfw add pipe 1 all from any to 192.168.1.1 in
$ipfw add queue 100 tcp from 192.168.1.1 to any 22 out
$ipfw add queue 100 tcp from 192.168.1.1 to any 80 out
$ipfw add queue 100 udp from 192.168.1.1 to any 53 out
$ipfw add queue 101 all from 192.168.1.1 to any out
Konfigurasi ini akan menghad bandwidth download dan upload dari IP 192.168.1.1 kepada 128Kbps dan memberi 'priority' kepada port SSH(22), HTTP(80), dan DNS(53) yang menuju ke luar (pada client).

contoh 2:
$ipfw pipe 1 config bw 128Kbit/s
$ipfw pipe 2 config bw 128Kbit/s
$ipfw queue 100 config pipe 1 weight 90
$ipfw queue 101 config pipe 1 weight 60
$ipfw add queue 100 tcp from any to 192.168.1.1 22 in
$ipfw add queue 100 tcp from any to 192.168.1.1 80 in
$ipfw add queue 101 tcp from any to 192.168.1.1 in
$ipfw add pipe 2 all from 192.168.1.1 to any out

Konfigurasi ini akan menghad bandwidth download dan upload dari IP 192.168.1.1 kepada 128Kbps dan memberi 'priority' kepada port SSH(22), HTTP(80), dan DNS(53) yang menuju ke dalam (pada server).
SIAP! Semua konfigurasi DUMMYNET sudah lengkap, dan tibalah masa untuk menguji benda ini. Enjoy!

Terima kasih kepada azhax@indofreebsd.or.id