Skip to content

Multi‐Router‐Setup

ZILLEALI edited this page May 20, 2026 · 1 revision

Multi-Router Setup

Manage multiple MikroTik routers from one Laravel application.


Configuration

// config/mikrotik.php
return [
    // Default router
    'host'     => env('MIKROTIK_HOST', '192.168.88.1'),
    'username' => env('MIKROTIK_USERNAME', 'admin'),
    'password' => env('MIKROTIK_PASSWORD', ''),

    // Named routers
    'routers' => [
        'main' => [
            'host'     => '192.168.1.1',
            'port'     => 8728,
            'username' => 'admin',
            'password' => 'secret',
            'timeout'  => 10,
        ],
        'branch-khi' => [
            'host'     => '192.168.2.1',
            'port'     => 8728,
            'username' => 'admin',
            'password' => 'secret',
        ],
        'branch-lhr' => [
            'host'     => '10.0.0.1',
            'port'     => 8729,
            'username' => 'admin',
            'password' => 'secret',
            'ssl'      => true,
        ],
        'edge-pop1' => [
            'host'     => '172.16.0.1',
            'username' => 'monitor',
            'password' => 'readonly',
            'timeout'  => 5,
        ],
    ],
];

Usage

// Default router (from top-level config)
MikroTik::pppoe()->getActiveSessions();

// Named router — resets to default after each call
MikroTik::router('main')->pppoe()->getActiveSessions();
MikroTik::router('branch-khi')->system()->getCpuLoad();
MikroTik::router('branch-lhr')->hotspot()->getActiveHosts();

// Chain multiple calls on same router
$sessions = MikroTik::router('main')->pppoe()->getActiveSessions();
$cpu      = MikroTik::router('main')->system()->getCpuLoad();
// Note: each call uses router() — it resets after every manager call

// Check all routers health
$routers = ['main', 'branch-khi', 'branch-lhr', 'edge-pop1'];

foreach ($routers as $router) {
    try {
        $cpu    = MikroTik::router($router)->system()->getCpuLoad();
        $uptime = MikroTik::router($router)->system()->getUptime();

        echo "{$router}: CPU {$cpu}% | Uptime {$uptime}";
    } catch (\Exception $e) {
        echo "{$router}: UNREACHABLE — {$e->getMessage()}";
    }
}

ConnectionPool with Multi-Router

// Pool caches connections per router name
MikroTik::router('main')->pppoe()->getActiveSessions();   // connects
MikroTik::router('main')->system()->getCpuLoad();          // reuses connection
MikroTik::router('branch-khi')->pppoe()->getActiveSessions(); // new connection

// Pool status
$pool = MikroTik::getPool();
$pool->getNames();    // ['main', 'branch-khi']
$pool->count();       // 2
$pool->getSummary();  // ['main' => ['connected' => true], ...]

// Disconnect specific router
MikroTik::disconnect('branch-khi');

// Disconnect all
MikroTik::disconnectAll();

NexaLink Pattern — ISP Multi-Site

// Get all sites summary for NOC dashboard
class NocDashboardService
{
    protected array $routers = ['pop1', 'pop2', 'pop3', 'pop4'];

    public function getAllSitesSummary(): array
    {
        $summary = [];

        foreach ($this->routers as $router) {
            try {
                $summary[$router] = [
                    'status'   => 'online',
                    'cpu'      => MikroTik::router($router)->system()->getCpuLoad(),
                    'sessions' => MikroTik::router($router)->sessionMonitor()->getSummary(),
                    'uptime'   => MikroTik::router($router)->system()->getUptime(),
                ];
            } catch (\Exception $e) {
                $summary[$router] = [
                    'status' => 'offline',
                    'error'  => $e->getMessage(),
                ];
            }
        }

        // Cleanup connections
        MikroTik::disconnectAll();

        return $summary;
    }
}

Artisan Commands | SSL Setup →


📝 Found an error or missing info?
Edit this page or open an issue to suggest improvements.

Clone this wiki locally