HOME  |  SERVICES  |  Profile  |  RSS

 

Script membatasi bandwidth berdasarkan IP di tabel ARP

3:27 PM

Script ini saya buat karena ip user sangat banyak dalam beberapa segmen network dan juga interface lokal lebih dari satu, apa lagi dia konek dengan ip dhcp sehingga tidak mungkin saya menambahkan queue satu persatu. Dan jika terlalu banyak filter akan memakan banyak memori router, cukup beberapa ip saja yang ditambahkan karena tidak semua ip online terus menerus melewati router gateway.

Dan kenapa saya menggunaan ip yang ada di tabel ARP, karena semua client yang aktif dengan dhcp termasuk hotspot atau memakai ip static sekalipun, ip dia akan terbaca secara dinamik di tabel ARP.

Berikut contoh script yang saya buat di router Mikrotik:

Di menu /system scripts buat script dengan nama=queue_user dan sourcenya seperti berikut,


####################

#add parent
:if ([:len ([/queue simple find name=total])] <1) do={
/queue simple add target-addresses="10.10.114.0/24,10.10.115.0/24,10.10.116.0/24,10.10.117.0/24" max-limit=2M/2M interface=all priority=7 name="total"
}

#import ip yang ada di ARP list
:local ipusers [/ip arp find]
:foreach h in $ipusers do={
:local ipuser [/ip arp get $h address]
:if ([:len $ipuser] >0) do {

#ambil ipnya selain ip public
:local ippublic [/ip arp get $h interface]
:if ($ippublic !="eth-public") do {

#add diqueue
:if ( [:len ( [/queue simple find name=$ipuser] ) ] <1) do {
:if ([:len ([/queue simple find name=others])]>0) do { /queue simple remove [find name=others] }
/queue simple add target-addresses=$ipuser limit-at=256k/256k max-limit=512k/512k interface=all parent=total priority=7 name=$ipuser
}
}
}
}

:if ([:len ([/queue simple find name=others])] <1) do {
/queue simple add target-addresses="10.10.114.0/24,10.10.115.0/24,10.10.116.0/24,10.10.117.0/24" limit-at=256k/256k max-limit=512k/512k interface=all parent=total priority=7 name="others"
}

#delete yang tidak aktif
:local ipold [/queue simple find]
:foreach o in $ipold do={
:local iplama [/queue simple get $o name]
:if ([:len $iplama] >0) do {
:if ( $iplama !="total") do={
:if ($iplama !="others") do={
:if ([:len ([/ip arp find address=$iplama])] <1) do={
/queue simple remove [find name=$iplama]
}
}
}
}
}

####################

Klik Run untuk menjalankan scriptnya

Buat skedul untuk update ip-ipnya setiap 10 menit:
buat di winbox di menu /system scheduler add
name = queue_refresh
start date = Jan/14/2011 (tanggal sekarang)
start time = 13:50:00 (waktu sekarang)
interval = 00:10:00 (run setiap 10 menit)
on event = queue_user (nama scriptnya)
centangin semua policynya dan tekan [Ok]

1 comments:

Marshall Jahja said...

Hebat lo dir... Bangga gue....





CO.CC:Free Domain