Wednesday, June 28, 2017

Berkomunikasi dengan MikroTik RouterOS dari PHP melalui API

  7 comments
Assalamu'alaikum Wr. Wb.
Sudah lama saya tidak posting, kali ini saya akan menuliskan mengenai caranya berkomunikasi dengan perangkat MikroTik dengan Bahasa Pemrograman PHP melalui API RouterOS.

a. Pengertian
API (Application Program(ming) Interface) adalah sebuah protokol dan set metode untuk berkomunikasi antar aplikasi. API dapat digunakan untuk berkomunikasi antar aplikasi, dan antar platform. Maka dari itu tidak perduli Platform apa yang digunakan masing-masing aplikasi, aplikasi tersebut tetap akan dapat saling berkomunikasi melalui API.

b. Alat dan Bahan
- Text Editor
- Apache2 + PHP5 / 7
- RouterOS v3+ (bisa perangkat RB atau CHR)
- RouterOS API PHP

c. Langkah Pengerjaan
1. Silahkan persiapkan alat bahan diatas. Untuk RouterOS API PHP karena saya memakai yang versi ZIP maka saya akan menyarankan teman-teman juga mendownload yang ZIP, jika teman-teman dapat menyesuaikan ke versi yang lain maka saya persilahkan.

2. Ekstrak Zip
Skip part ini apabila teman-teman mendownload yang bukan ZIP.
Setelah didownload, silahkan buka file ZIP tersebut lalu menuju PEAR2_Net_RouterOS -> src. Didalam folder ini ada folder bernama PEAR2, silahkan ekstrak folder tersebut ke Webroot teman-teman.
3. Buka Teks Editor dan Buat File baru
Selanjutnya kita buat file PHP yang akan kita gunakan untuk mengeksekusi perintah API, silahkan nantinya teman-teman simpan file ini didalam Folder yang sama dengan folder PEAR2 tadi.

Nah isi dasar dari file ini adalah sebagai berikut:
<?php
    use PEAR2\Net\RouterOS;
    require_once 'PEAR2/Autoload.php';
    // Isi Perintah API mulai dari sini
?>
4. Cek Service dan Firewall
Pastikan API MikroTik berada dalam keadaan Enabled (IP -> Services) dan tidak terhalang Firewall, baik dari sisi Client ataupun MikroTiknya.
5. Check Sound 1!
Setelah Step 4 tidak ada masalah maka saatnya kita coba untuk berkomunikasi dengan RouterOSnya. Kita akan coba dengan membuat konektivitas melalui API
// Mulai Koneksi
try {
   $client = new RouterOS\Client('IP MIKROTIK', 'USERNAME', 'PASSWORD');
   echo "Koneksi OK";
} catch (Exception $e) {
  die ($e);
}
Tambahkan Script diatas kedalam file teman-teman dan sesuaikan IP, Username, dan Passwordnya.
Jika sudah silahkan Simpan lalu coba buka Filenya melalui Web Browser.
6. Script Lanjutan Step 5
Beberapa script yang sudah saya coba dan pakai:
- Ambil List IP (Shell: /ip address print)
// Ambil List IP
$getIPs = $client->sendSync(new RouterOS\Request('/ip address print'));
foreach ($getIPs as $getIP){
    if($getIP->getType() === RouterOS\Response::TYPE_DATA) {
      echo 'IP: ', $getIP->getProperty('address'),
      ' Interface: ', $getIP->getProperty('interface'),
      "\n";
    }
}
- Buat Interface VLAN
// Buat VLAN
$addRequest = new RouterOS\Request('/interface vlan add');
$addRequest->setArgument('name', 'coba');
$addRequest->setArgument('vlan-id', '1000');
$addRequest->setArgument('interface', 'ether1');
if ($client->sendSync($addRequest)->getType() !== RouterOS\Response::TYPE_FINAL) {
  die ("Error");
} echo "OK";
7. Check Sound 2!
Jika di Step 5 kita menggunakan RouterOS\Client maka di Step ini kita akan menggunakan RouterOS\Util. Untuk fungsi hampir sama.
// Koneksi 2
$utils = new RouterOS\Util(new RouterOS\Client('IP MIKROTIK', 'USERNAME', 'PASSWORD'));
8. Script Lanjutan Step 7
- Create Item (VLAN)
// Create
$utils->setMenu('/interface vlan');
$utils->add(
    array(
        'name' => 'api',
        'vlan-id' => '1011',
        'interface' => 'ether1'
      )
  );
- Update Item (VLAN)
// Update
$utils->setMenu('/interface vlan');
$utils->set(
    0,
    array (
        'name' => 'api-new'
      )
  );
- Delete Item (VLAN)
// Delete
$utils->setMenu('/interface vlan');
$utils->remove(0); // 0 = ID Item
d. Referensi
- Mikrotik Wiki - API PHP
- pear2/Net RouterOS - Wiki

e. Kesimpulan
Dengan contoh script diatas apakah teman-teman sudah mendapat gambaran bagaimana mengembangkan penggunaannya? Pada dasarnya kita hanya menyesuaikan format penulisan dan pemanggilannya saja dan selebihnya tidak terlalu berbeda dengan kita mengkonfigurasi melalui CLI. Untuk teman-teman yang ingin mempelajari lebih lanjut dapat mengunjuki Wiki nya disini.

Cukup sekian yang dapat saya tuliskan, semoga bermanfaat bagi teman-teman semuanya!
Dan seperti biasa, Terima Kasih!
Wassalamu'alaikum Wr. Wb.