PHP: Mengendalikan Mikrotik dengan API

Pendahuluan:


Penambahan aturan di Mikrotik dapat dilakukan menggunakan beberapa metode diantaranya menggunakan Winbox, SSH atau Telnet. Kita bisa menambahkan aturan-aturan baru di Mikrotik menggunakan aplikasi PHP. Tujuannya untuk memudahkan administrator menambah aturan di mikrotik berdasarkan SOP di institusi dan nantinya bisa dilakukan otomatis.

Prerequisities:
  • Pastikan Mikrotik membuka layanan API dan tidak ada rule input untuk user masuk lewat API. Pilih IP > Service menggunakan winbox seperti pada gambar:

Implementation


  • Contoh 1: Berikut contoh sederhana membuat aturan simple queue menggunakan PHP:

<?php

require('routeros_api.class.php');


// Ubah sesuai setting mikrotik Anda
define('MIKROTIK_IP', '192.168.0.1');
define('MIKROTIK_USERNAME', 'admin');
define('MIKROTIK_PASSWORD', '');
define('SERVER', 'all');
define('PROFILE', 'default');


$API = new routeros_api();
// Aktifkan debug
// $API->debug = true;

$nama = "Andi";
$ip = "192.168.1.2";
$limit = "50000/500000";

if ($API->connect(MIKROTIK_IP, MIKROTIK_USERNAME, MIKROTIK_PASSWORD))
{
$API->write('/queue/simple/add', false);
$API->write('=name='.$nama,false);
$API->write('=target-addresses='.$ip, false);
$API->write('=max-limit='.$limit, false);
$API->write('=disabled=no');

$ARRAY = $API->read();
//print_r($ARRAY);

}
$API->disconnect();

echo "<p>Aturan telah ditambahkan..<br>";
?>


-----------------------------------------------------------
  • Contoh 2: Berikut contoh sederhana melihat output torch:

<?php
require('routeros_api.class.php');

// Ubah sesuai setting mikrotik Anda
define('MIKROTIK_IP', '192.168.1.1');
define('MIKROTIK_USERNAME', 'admin');
define('MIKROTIK_PASSWORD', '12345');
define('SERVER', 'all');
define('PROFILE', 'default');

$src_address = "192.168.1.2";

$API = new routeros_api();
// Aktifkan debug
// $API->debug = true;

if ($API->connect(MIKROTIK_IP, MIKROTIK_USERNAME, MIKROTIK_PASSWORD))
{
 $API->write('/tool/torch', false);
 $API->write('=src-address='.$src_address, false);
 $API->write('=duration=2', false);
 $API->write('=interface=ether2-lokal', false);

 $ARRAY = $API->read();
 //print_r($ARRAY[$no]);
 echo "<p>";
 $source = $ARRAY[0]['src-address'];
 $tx = $ARRAY[0]['tx'];
 $rx = $ARRAY[0]['rx'];

 echo "source = $source<br>";
 echo "tx = $tx<br>";
 echo "rx = $rx<br>";
 echo "-------------------------------------<p>";

 }

$API->disconnect();
}

echo "<p>Selesai..<br>";
?>


-------------------------------------------------------------
  • Contoh 3: Menambah aturan NAT
<?php
require('routeros_api.class.php');

// Ubah sesuai setting mikrotik Anda
define('MIKROTIK_IP', '192.168.1.1');
define('MIKROTIK_USERNAME', 'admin');
define('MIKROTIK_PASSWORD', '12345');
define('SERVER', 'all');
define('PROFILE', 'default');

$API = new routeros_api();
// Aktifkan debug
$API->debug = true;

if ($API->connect(MIKROTIK_IP, MIKROTIK_USERNAME, MIKROTIK_PASSWORD))
{
$API->write('/ip/firewall/nat/add', false);
$API->write('=chain=srcnat',false);
$API->write('=src-address=192.168.90.0/24',false);
$API->write('=action=masquerade', false);
$API->write('=disabled=yes');

$ARRAY = $API->read();

}
$API->disconnect();

echo "<p>Selesai..<br>";
?>


Keterangan:
Script diatas digunakan untuk menambah satu aturan NAT yang klo di CLI (Command Line Interface) nulisnya:

ip firewall nat add chain=srcnat src-address=192.168.90.0/
24 action=masquerade disabled=yes 


Contoh2 lainnya bisa dilihat di:
http://wiki.mikrotik.com/wiki/API_PHP_class
Next Post Previous Post
19 Comments
  • FATCHUR PARTO'PEN
    FATCHUR PARTO'PEN July 24, 2013 at 11:52 AM

    kalau di taruh di server hosting bagaimana mas cara koneksinya ke mikrotik lokal

    • jati.itda.ac.id
      jati.itda.ac.id August 6, 2013 at 11:00 PM

      Hmm, aku belum pernah nyoba kalo server hosting. Tapi kalo server dedicated atau VPS, aku pernah nyoba. Yang penting, mikrotik tidak melakukan bloking input di firewall nya untuk port 8728. Artinya, server VPS yang akan "meremote" MT via API "diijinkan" oleh MT tersebut.

      Masalahnya: untuk apa? Bisa dikasih contoh implementasinya? Karena sedikit banyak, feature ini bisa menjadi bumerang keamanan untuk MT itu sendiri atau server2 dibelakang router tersebut.

    • Unknown
      Unknown May 18, 2015 at 4:12 PM

      Hartuno Sejati, saya sudah d set dst-nat dari publik ke ip mikrotik dg port 8728. Tetapi tetap tidak bisa. Mohon penjelasannya. Tq

    • jati.itda.ac.id
      jati.itda.ac.id July 26, 2015 at 6:24 AM

      @Alfi: Maaf baru balas. Kenapa tidak langsung saja ke port 8728 mas? Maksudnya kenapa harus pakai dst-nat? Bisa langsung koq.

  • TOMATOHEADSQUAD
    TOMATOHEADSQUAD August 15, 2013 at 6:56 PM

    kalo mau menambahkan limit uptime pada user tertentu gimana caranya ya bos? terimakasih

  • Novie
    Novie June 1, 2014 at 5:19 AM

    mas, bisa dipake buat manajemen bandwith kah? sorry masih newbe nih

    • jati.itda.ac.id
      jati.itda.ac.id July 26, 2015 at 6:32 AM

      Bisa. Manajemen bandwidth dapat dilakukan lewat queue (simple maupun tree). Jika pakai simple, perintah di terminal misalnya: /queue simple add name=komp1 target-addresses=192.168.1.1/32 limit-at=100k/500k disabled=no tinggal dirubah menjadi perintah api.

  • Unknown
    Unknown September 23, 2016 at 8:48 AM

    mas, saya bertanya

  • Unknown
    Unknown September 23, 2016 at 8:49 AM

    mas, saya bertanya

  • Unknown
    Unknown April 14, 2017 at 8:01 AM

    mau tanya, tapi kayaknya yg punya blog sibuk dengan oprekan lain, ketinggalan tema deh saya, ;3

  • Perdi
    Perdi May 9, 2017 at 12:35 AM

    klo mau menampilkan wrieless gmna ya?

  • Perdi
    Perdi May 9, 2017 at 1:42 AM

    klo mau menampilkan wrieless gmna ya?

  • hendro cutelomia
    hendro cutelomia December 16, 2017 at 7:35 PM

    Commands examples (each string in each field 1,2,3, ...):
    1: /interface/ethernet/getall
    1: /interface/wireless/registration-table/print 2: =stats=
    1: /interface/monitor-traffic 2: =interface=wlan1
    1: /ppp/active/print 2: =stats= 3: =without-paging=
    1: /queue/tree/print 2: =stats=
    1: /interface/wireless/monitor 2: =numbers=wlan1 3: =once=
    1: /tool/ping 2: =address=10.0.0.222
    -------------------------------------------------------------------
    /ip/route/print
    /ip/address/print

    /system/shutdown
    /system/reboot
    /system/resource/print
    /routing/ospf/interface/print
    /interface/wireless/registration-table/remove=.id=*7

  • Unknown
    Unknown November 13, 2018 at 6:38 PM

    mas mw tanya, bisa gk kalo SRC-ADDRESS nya di gantikan dengan remote addres, di tentuin dari client yg ngeremote API nya, saya masih belajar, dan masih bingung mas? mohon bantuannya, berikut script yg saya pakai

    debug = true;
    if ($API->connect(MIKROTIK_IP, MIKROTIK_USERNAME, MIKROTIK_PASSWORD))
    {
    $API->write('/ip/firewall/address-list/add', false);
    $API->write('=list="Proyektor CR"',false);
    $API->write('=address=.$ip',false);
    $API->write('=disabled=yes');
    $ARRAY = $API->read();
    }
    $API->disconnect();
    echo "
    Selesai..
    ";
    ?>

    • Unknown
      Unknown November 13, 2018 at 6:46 PM

      eh udah bisa gan, terimakasih blognya sangat membantu

    • aldi
      aldi June 14, 2020 at 7:14 PM

      masih aktif gak gan, mau nanya dong

  • Nur Farida Irmawati
    Nur Farida Irmawati April 9, 2019 at 1:00 AM

    mas, saya nyoba tapi knpa gagal konek terus ya? saya aksesnya dr web server ke mikrotik. gmna caranya ya mas? mohon bantuannya

  • Hafiz ramadhan
    Hafiz ramadhan November 18, 2019 at 2:10 AM

    Mas, cara get spesifik interface gimana ya command nya ?

  • Anonym
    Anonym June 7, 2020 at 8:12 PM

    mas tanya kl cli seperti ini, kl ditulis api gmn?
    /caps-man configuration
    add name= "wifi xx xx " mode=ap ssid= "xx xx" country=indonesia3


    sya sudah coba masih salah ..

    $API->comm("/caps-man/configuration/add", array(
    "name" => "wifi ".$ssid_location,
    "mode" => "ap",
    "ssid" => $ssid_location,
    "country" => "indonesia3",
    "rx-chains" => "0,1,2,3",
    "tx-chains" => "0,1,2,3",
    "datapath" => "customer internet wifi ".$ssid_location,
    "datapath.client-to-client-forwarding" => "yes",
    "hide-ssid" => "no",
    "security" => "customer wifi ".$ssid_location


    ));

Add Comment
comment url