Mikrotik: Otomasi Limit Bandwidth Dari Table ARP

Hai, kali ini saya akan share sedikit kasus yang saya alami terkait otomasi limit bandwidth di simple queue dengan mengambil list IP dari table ARP

Kasus

Suatu ketika bos berkata ingin melimit pemakaian internet per user di kantor, maka yang terpikirkan di kepala saya adalah dengan me-limit per IP dari komputer user. Tapi permasalahan muncul ketika saya baru sadar kalau di kantor saya tidak menggunakan DHCP server alias semua user menggunakan IP Static, sehingga tutorial yang ada di google untuk membuat simple queue otomatis dengan mengambil list IP dari DHCP server seketika useless.

hett... tapi tidak sampai disitu saya pun akhirnya ngulik lebih dalam lagi, hingga terpikirkan untuk mengambil list IP dari tabel ARP. Dengan kekuatan googling akhirnya menemukan konsep tutorial yang cucok dengan kasus yang saya alami (mohon maap saya lupa sumbernya karena kejadiannya udah lama).

Dibawah ini adalah script untuk mengambil list IP yang terdapat pada table ARP lalu meneruskannya ke simple queue untuk di limit

  :local filterARP "ether1";

	:local targetAddress "192.168.1.0/24";

	:local limitClient "2M";

	:local limitParent "90M";

	:local parentLimit "0-Parent";

	:local packetMark "client.p";

	:local delay "60s";

	:local enabled true;

	:local enableLog true;

	/queue simple

	:if ($enabled) do={

		:if ([find name=($parentLimit)] = "") do={	add name=($parentLimit) packet-mark=$packetMark target=$targetAddress max-limit=($limitParent."/".$limitParent);	}

		:if ([find name=($parentLimit."-all")] = "") do={ add name=($parentLimit."-all") parent=$parentLimit packet-mark=$packetMark target=$targetAddress max-limit=($limitParent."/".$limitParent); }

	}

	:while (true) do={

		:local arp [:toarray [/ip arp print as-value where dynamic && interface=$filterARP ]];

		:local queue [:toarray [/queue simple print as-value]];

		

		:foreach a in=$arp do={

			:local ip ($a->"address");

			:local zz ($a->"mac-address");

			:if ($enabled) do={/queue simple add name=($zz) target=$ip max-limit=($limitClient."/".$limitClient) parent=$parentLimit packet-mark=$packetMark place-before=($parentLimit."-all"); }

			

		}

		:if ($enableLog) do={ :log warning message= "Finished adding"; :log warning message= "Running delay"; }

		:delay $delay;

	}

}

Secercah Penjelasan

  • :local filterARP = Ubah value variable ini dengan eth yang menuju jaringan local
  • :local targetAddress = Ubah value variable ini dengan IP dan subnet di tempat anda
  • :local limitClient = Ubah value variable ini menyesuaikan limit yang anda inginkan
  • :local limitParent = Ubah value variable ini menyesuaikan limit keseluruhan yang anda inginkan
  • :local packetMark = Ini adalah value untuk mark packetnya
  • :local delay = Ini adalah waktu delaynya, atau bisa disebut waktu refresh scriptnya (karena kita berurusan dengan IP Static maka script harus di refresh untuk mendapatkan list IP terbaru)

Penutup

Yak.. mungkin itu saja sedikit share dari saya yang noob ini, mohon masukannya barangkali ada cara yang lebih bener dibanding cara yang saya pakai ini. Terimakasih telah membaca.