DIPERBARUI: 09 OKTOBER 2020

Prefix Dinamis DHCP MikroTik

Alokasi jumlah alamat IP pengguna DHCP secara dinamis sesuai kebutuhan.

Do Exploit
12 min readOct 15, 2020

VERSI ASLI ARTIKEL

Background By Pixabay & Font is Montserrat

🚨 INFO UPDATE TENTANG SCRIPT INI LANGSUNG KE BAGIAN DynPrefix Version (PALING BAWAH) ⚠️

Apa itu MikroTik Scripting? 🤔

MikroTik menyediakan bahasa scripting yang dinamakan MikroTik Scripting, berbagai mesin jaringan MikroTik diantaranya router, switch dan access point hanya dapat mengerti bahasa scripting seperti MikroTik Scripting.

Pada zaman sekarang kegiatan otomasi jaringan IT sudah termasuk kedalam JobDesc paling utama. Bagaimana tidak, kegiatan manusia yang seharusnya dikerjakan ke tempat langsung dan menjadi rutinitas, dapat di limpahkan kepada mesin untuk mengerjakannya. Begitulah kira-kira tugas dari MikroTik Scripting.

Gambaran Umum

Pada jaringan DHCP berskala kecil seperti rumahan atau ISP lokal (RT/RW Net) berkembang cukup pesat, sehingga makin banyak provider internet yang menyediakan layanan wifi internet. Umumnya teknisi tidak dapat selalu ada untuk membantu permasalahan internet klien.

Salah satu masalahnya adalah dimana pengguna jaringan internet tersebut tidak dapat di prediksi, bisa menurun bahkan meningkat secara cepat lalu melebihi konfigurasi pengguna DHCP di router access point MikroTik. Akibatnya beberapa pengguna tidak dapat tersambung ke wifi karena pembatasan jumlah pengguna oleh prefix.

Selain itu, para pengguna langsung akan menyimpulkan hal yang negatif dari jaringan wifi internet kita. Sehingga ketika terdapat kejadian tersebut, seorang teknisi harus melakukan konfigurasi manual untuk meningkatkan prefix agar pengguna DHCP juga bisa meningkat lagi.

Hal terbaik yang bisa dilakukan adalah membuat router MikroTik tersebut berpikir dan mengerjakan pekerjaan teknisi tersebut, untuk meningkatkan dan menurunkan prefix secara otomatis.

Penggunaan Prefix Dinamis Pada DHCP

Sebelum melakukan implementasi. Kami membuat flowchart, yaitu kumpulan bentuk-bentuk tertentu yang menggambarkan urutan proses secara mendetail dalam program. Urutan flowchart yang dibuat juga lumayan panjang, klik disini untuk melihatnya. Full program hasil implementasi sudah dapat dicopas langsung dari bawah sini (v0.2).

Sebelum itu, kita bersama-sama perlu memahami beberapa syntax yang akan digunakan pada potongan kode program.

  • :local nama_variabel isi_data, fungsi untuk membuat variabel yang merupakan suatu wadah yang digunakan untuk menyimpan data atau nilai di memori dan dapat berubah-ubah selama proses program.
  • :set nama_variabel_ada isi_data_baru, jadi fungsi set ini dapat mengubah isi data dari suatu variabel.
  • statement, bisa berbentuk perintah MikroTik, variabel dan kumpulan fungsi lainnya.
  • :for nama_variabel from=angka_awal to=angka_akhir do { statement }, fungsi ini digunakan untuk membuat perulangan, jadi beberapa statement akan berjalan terus sampai telah mencapai batas perulangan.
  • :if ( kondisi ) do { statement }, fungsi untuk memeriksa suatu kondisi dan akan menjalankan statement jika kondisi yang dihasilkan benar atau True.
  • array, tipe objek data yang menyimpan berbagai kumpulan data.
  • :foreach nama_variabel in=[objek_array] do { statement }, fungsi perulangan untuk menjalankan statement sampai dengan jumlah data yang ada di objek_array.
  • /perintah_MikroTik, semua perintah MikroTik yang dijalankan harus diawali dengan / (slash).
  • $nama_variabel, memanggil variabel atau data dari variabel yang sudah ada.
  • :pick objek_string index_awalan index_akhiran, mengambil sebagian string.
  • :find objek_string character, mengambil index dari objek string berdasarkan karakter. Misalkan kita ingin mengambil karakter “/” dari “192.168.0.2/24” maka nilai yang terambil adalah 12.

Mari kita pahami setiap potongan kode yang ada, agar kalian dapat mengembangkannya kembali sehingga program ini juga dapat menuju kesempurnaan.

Tips lebih mudah, pastikan kalian telah membuka gambar flowchart untuk memahaminya melalui bentuk dan melakukan persamaan antara alur bentuk dan potongan kode.

A. Interaksi Dengan Administrator / Teknisi

  1. Meminta index dhcp-server dan pool

Pada awal baris program, kalian akan dipertemukan oleh beberapa variabel yang membutuhkan interaksi kalian sebagai teknisi atau administrator.

Potongan baris program diatas merupakan salah satunya, dimana kalian harus menggunakan perintah ip dhcp-server dahulu untuk mengetahui nomor index dari DHCP server kalian. Dalam kasus kami nomornya adalah 0, maka diubah menjadi 0.

Jika kalian menemukan pool atau dhcp-server yang lain silahkan dihapus dulu, lalu buatlah kesamaan antara index pool dan dhcp-server. Harus diisi dengan valid, karena potongan kode ini berguna di tengah-tengah program untuk meningkatkan dan menurunkan prefix DHCP dan cakupan alamat IP pengguna (pool).

2. Meminta index alamat IP router

Sama seperti sebelumnya, ubahlah angka 0 menjadi alamat IP router kalian yang bertindak menjadi DHCP server. Gunakan perintah ip address print. Alamat IP milik kami adalah 0, jadi yang di taruh 0. Baris ini berguna untuk meningkatkan dan menurunkan prefix alamat IP router.

Isilah dengan benar, jika salah sedikit saja program bisa langsung mengalami kesalahan kerja karena salah meningkatkan atau menurunkan prefix alamat IP.

3. Menentukan batas prefix untuk meningkat dan menurun

Fitur pembatasan prefix, batasannya dapat kalian tentukan dari 24 sampai 16. Pada saat penulisan artikel ini, kami belum menambahkan kode untuk bisa sampai ke kelas A. Tetapi itu tidak akan menurunkan fungsi kegunaan script ini.

4. Meminta email dan password untuk mengirim notifikasi

Sebelum itu, pastikan kalian telah mengaktifkan fitur Allow less secure apps agar akun gmail dapat diakses melalui aplikasi pihak ketiga yaitu router MikroTik sendiri. Klik disini. Potongan baris kode ini akan digunakan nanti, saat prefix meningkat otomatis maka notifikasi melalui email dikirim. Jika tidak membutuhkan notifikasi, bisa dilewati saja atau tidak usah diisi value dari baris tersebut.

B. Alur Kerja Program

  1. Menyimpan jumlah pengguna setiap prefix

Variabel prefixMax itu menyimpan jumlah pengguna maksimal yang dapat diperoleh setiap prefix, nanti di pertengahan program akan berguna menentukan kondisi yang cocok untuk meningkatkan prefix.

Ada lagi variabel prefixMin, itu menyimpan jumlah pengguna minimum setiap prefix, di pertengahan program pula nanti akan menentukan kondisi yang cocok untuk menurunkan prefix.

Jadi ketika pengguna DHCP telah mencapai batas maksimal prefix, maka akan ditingkatkan. Begitu pula jika pengguna DHCP telah menurun sampai ke batas minimum prefix, maka prefix diturunkan. Dengan begitu alokasi IP ke pengguna dapat di mulai dari prefix yang terkecil, menuju ke yang terbesar.

2. Menyimpan variabel yang berisi pool address dan awal range IP

Variabel pool menyimpan pool address yang bentukannya seperti 192.168.2.2 atau 192.168.2.2–192.168.2.6, lalu variabel startP menyimpan lagi nilai yang disimpan oleh variabel pool untuk kemudian diolah lagi.

Sehabis itu, dibuatlah kondisi if else untuk melihat apakah terdapat “-“ didalam variabel pool, jika ada maka akan diolah lagi untuk diambil awal range IP nya saja. Contoh 192.168.2.2–192.168.2.6 menjadi 192.168.2.2 . Kita membutuhkan itu untuk menjadi dasar dari awalan alamat IP pengguna.

Pertama, variabel netAddress akan mengambil network IP dari DHCP server kita, lalu diolah lagi agar prefixnya tidak terambil. Contohnya 192.168.2.0/30 menjadi 192.168.2.0 .

Selanjutnya dibuatlah variabel oct4 yang mengambil nilai dari variabel netAddress. Lalu variabel oct4 melalui proses lanjutan for loop atau perulangan untuk mengambil octet ke-4 saja. Contohnya 192.168.2.0 menjadi 0. Hasil akhir dari seluruh variabel yang dibutuhkan dan telah proses adalah sebagai berikut;

  • $startP = 192.168.2.2
  • $netAddress = 192.168.2.0
  • $oct4 = 0

3. Menyimpan variabel dari octet alamat IP yang sifatnya kekal

Terdapat variabel oct, dia mengambil nilai dari variabel startP yaitu 192.168.2.2 . Ada lagi variabel oct3 yang tidak terisi apa-apa, itu tidak benar-benar kosong, setelah beberapa baris selanjutnya dia akan terisi oleh alamat IP dari octet 1 sampai ke 3.

Selanjutnya dibuatlah for loop atau perulangan, dia akan melakukan perulangan sampai jumlah panjang string variabel oct, isinya 192.168.2.2 yang berarti panjangnya adalah 11.

Terdapat 2 kondisi if untuk memproses string variabel oct hingga menjadi 192.168.2 saja dan disimpan kedalam variabel oct3 . Hasil akhirnya adalah kita telah mendapatkan nilai dari variabel oct3 yaitu 192.168.2 saja.

Dengan tersimpannya variabel oct3, itu akan menjadi dasar dari program kita untuk melakukan perubahan IP pool. Maka, octet ke-4 sekarang sudah bisa berubah-ubah sesuai dengan prefix.

Variabel oct2 itu akan menyimpan nilai 192.168 saja, jadi octet ke-3 dan 4 bisa diubah-ubah untuk kepentingan IP Pool. Ini berguna pada saat ada peningkatan sampai kelas B.

Lalu ada lagi variabel oct3s, ini mengambil octet ke 3 dari variabel oct3. Misalnya dari alamat IP 192.168.0 menjadi 0. Ini berguna untuk membuatnya fleksibel dan dapat diubah-ubah ketika terjadi peningkatan prefix. Tujuannya sama seperti variabel oct4 pada bagian sebelumnya.

4. Menyimpan variabel yang berisi alamat IP router

Membuat variabel address untuk menyimpan alamat IP dari antarmuka yang menjadi layanan DHCP server. Lalu diolah lagi dengan fungsi :set, dari 192.168.2.1/30 menjadi 192.168.2.1 saja. Lihatlah kegunaannya nanti pada baris-baris setelahnya.

5. Menyimpan variabel yang berisi jumlah klien DHCP

Membuat variabel qtyHost untuk menyimpan jumlah klien DHCP yang aktif. Dengan cara diolah menggunakan fungsi foreach, perulangan tersebut dapat aktif berdasarkan jumlah objek yang disimpan (array. Lalu setiap perulangan akan menambah 1 variabel qtyHost.

Contohnya ada 4 klien DHCP, maka fungsi foreach akan melakukan perulangan sebanyak 4 kali dan menyimpan nilai tersebut ke dalam variabel qtyHost. Lalu ditambah 1 menjadi 5 karena terdapat alamat IP statik yang sudah digunakan oleh router sendiri sebagai gateway DHCP.

6. Menyimpan variabel yang berisi prefix DHCP sekarang

Sebelum itu, dibuat variabel mask yang menyimpan network IP dari DHCP. Karena yang diambil datanya berisi 192.168.2.0/30, maka harus diolah lagi agar hanya mengambil prefix 30 nya saja. Lihat pada baris ke-54 cara pengolahannya.

7. Menentukan kondisi untuk meningkatkan prefix DHCP

Membuat variabel increaseHost, untuk dapat menyimpan jumlah maksimal pengguna dari peningkatan prefix. Misalnya prefix 29 yang memiliki pengguna 6, maka 192.168.2.0 + 6 adalah 6. Jadi ini akan digunakan pada octet terakhir, sehingga hasil akhirnya bisa menjadi 192.168.2.6 .

Apabila di implementasikan ke dalam pertanyaan, apakah jumlah klien DHCP dalam variabel qtyHost sudah sama dengan jumlah pengguna pada prefix DHCP? Jika sama bisa lanjut ke dalam statement lanjutan, namun jika tidak silahkan lewati saya (if bercabang).

Ada lagi fungsi if didalamnya (if cabang kedua) yang menanyakan, apakah nilai variabel mask masih diatas limitasi prefix yang ditentukan dalam variabel prefixUp untuk meningkat? Jika iya, maka prefix dapat ditingkatkan. Namun jika tidak, silahkan langsung melewati saya.

Statement yang ada dalam if cabang kedua adalah menjalankan perintah untuk mengubah prefix dari network IP DHCP, contohnya dari prefix 192.168.2.0/30 ditingkatkan menjadi 192.168.2.0/29.

Bersamaan dengan perintah sebelumnya, masih ada lagi perintah keduanya, itu bertujuan untuk mengubah prefix dari alamat IP router. Contohnya dari prefix 192.168.2.1/30 ditingkatkan pula menjadi 192.168.2.1/29.

Variabel increaseHost akan meningkat, contohnya jika prefix dari 30 meningkat menjadi prefix 29, yang memiliki pengguna hanya 6. Maka bila diolah lagi kedalam variabel increaseRange dari 192.168.2.2 bertambah menjadi 192.168.2.2–192.168.2.6 . Alokasi alamat IP kepada pengguna akan bertambah menjadi 6.

Selanjutnya perintah ip pool untuk mengubah alokasi IP pengguna, dan juga jalankan perintah untuk mengirim notifikasi melalui email ke administrator dan teknisi.

8. Menentukan kondisi untuk menurunkan prefix DHCP

Membuat variabel decreaseHost untuk menyimpan maksimal pengguna saat prefix menurun. Misalnya prefix menurun menjadi 30 yang memiliki pengguna 2, maka 192.168.2.0 + 2 menjadi 192.168.2.2, itulah alamat IP yang di alokasikan kepada pengguna.

Terdapat kondisi if yang menanyakan, apakah jumlah klien (qtyHost) sudah mencapai minimum jumlah pengguna dari prefix DHCP saat ini (prefixMin)? Jika sama, silahkan lanjutkan ke statement lanjutan yang ada didalam. Namun jika tidak, langsung saja lewati kondisi dan statement didalamnya.

Ada lagi kondisi if cabang kedua, yang menanyakan apakah prefix saat ini (mask) masih belum mencapai batasan prefix (prefixDown) yang telah ditentukan sebelumnya?

Setelah melewati percabangan if, ada beberapa perintah yang dijalankan, perintah pertama adalah menurunkan prefix dari alamat IP router itu sendiri. Kedua, prefix dari network IP akan diturunkan, misalnya dari 192.168.2.0/29 menjadi 192.168.2.0/30.

Lalu perintah ketiga yaitu mengurangi cakupan alamat IP yang diberikan kepada pengguna, misalnya prefix 29 yang alamat IP diberikan ke pengguna yaitu 192.168.2.2–192.168.2.6 . Menurun menjadi prefix 30 yang pengguna DHCP nya hanya bisa satu, yaitu 192.168.2.2 saja.

C. Instalasi Script MikroTik

Sebelum itu, pastikan kalian telah memberikan nilai atau data yang terletak pada potongan kode awal, yang membutuhkan interaksi dari kalian langsung yaitu teknisi, administrator atau pemilik jaringan.

1. Menyimpan script kedalam MikroTik

Masih tetap di winbox melanjutkan tahap-tahap sebelumnya, buka System di bar kiri lalu Scripts dan tambahkan ( + ) script baru untuk tempat penyimpanannya.

Lakukan copy atau salin dari script MikroTik yang telah kalian download, lalu paste atau tempel ke kolom Source yang di terdapat pada gambar diatas. Klik OK jika sudah melakukan tahap ini dengan benar.

2. Membuat scheduler untuk menjalankan script secara otomatis

Script MikroTik dapat berjalan dalam kurun waktu tertentu, misalnya 1 menit sekali ataupun beberapa menit sekali. Namun kami sangat merekomendasikan waktu minimum yang digunakan adalah 1 menit jangan detik, agar tidak terjadi kesalahan karena kurun waktu yang begitu cepat untuk menjalankan script tersebut.

Sebagai percobaan kami menggunakan waktu 1 menit, jadi scheduler akan menjalankan script tersebut untuk melakukan cek apakah sudah saatnya meningkatkan atau menurunkan prefix. Masuk ke System di bar sebelah kiri, lalu klik Scheduler dan tambahkan ( + ) jadwal terbaru yaitu untuk menjalankan script.

Pada kolom Interval, dasar format waktunya adalah JAM:MENIT:DETIK menjadi 00:01:00 karena kami ingin script berjalan setiap satu menit. Ada lagi kolom On Event: , gunakan perintah dengan format system script run <nama_script> menjadi system script run Auto-Subnet. Klik OK jika sudah.

Contoh Studi Kasus

Simaklah cerita dibawah ini!

Michael merupakan anak yang tinggal sendiri dirumahnya dan pemilik jaringan wifi dirumahnya tersebut. Selang beberapa hari kemudian, temannya Michael yang bernama Leonardo menumpang untuk menggunakan wifi internet dirumahnya. Namun ada kejadian yaitu Leonardo tidak dapat tersambung ke wifi dirumahnya itu.

Michael langsung menanyakan hal tersebut kepada teknisi wifinya melalui telepon, teknisi tersebut meminta maaf dan berkata “saya hanya mengira mas Michael saja yang akan menggunakan wifinya, saya tidak menduga ada orang lain juga yang menggunakan wifinya. Jadi saya setting wifinya agar cuman masnya doang yang bisa pake.”

Dengan adanya script DynPrefix ini MikroTik dapat langsung meningkatkan prefixnya menjadi /29 secara otomatis, agar pengguna tak terduga tersebut dapat tersambung ke wifi dan juga internet. Sekaligus email notifikasi dapat langsung terkirim jika diaktifkan.

Lalu sekarang wifi tidak sedang digunakan oleh siapapun, artinya semua koneksi telah terputus dengan wifi DHCP server. Sekarang pastikan kalian telah memutus koneksi dengan wifi yang dari HP ataupun perangkat lainnya.

1 menit kemudian setelah pengguna wifi tidak ada lagi yang tersambung sama sekali, artinya hanya router saja yang alamt IP nya aktif:

Dapat dilihat pada gambar diatas, yang berarti script sudah berjalan secara otomatis untuk menurunkan prefix.

DynPrefix Version

#[v0.1] Beta — 18 Agustus 2020
### Baru Rilis
#[v0.2] Beta — 09 Oktober 2020
### Ditambahkan
## Peningkatan Prefix Sampai Kelas B

Silahkan info ke Gmail, Instagram, atau Facebook jika kalian telah mengembangkan script DynPrefix ini, agar saya dapat memperbarui konten di artikel ini sekaligus menambahkan nama kalian.

--

--

Do Exploit
Do Exploit

Written by Do Exploit

I share stories about what I've learned in the past and now. Let's connect to Instagram! @do.exploit

No responses yet