-
Notifications
You must be signed in to change notification settings - Fork 3
v1.0.0
ZILLEALI edited this page May 20, 2026
·
2 revisions
Released: 2026-05-16
Tag: v1.0.0
Install: composer require zilleali/mikrotik-laravel:^1.0.0
First stable release of zilleali/mikrotik-laravel.
A complete Laravel package for managing MikroTik routers
via RouterOS API — built from real ISP engineering experience.
TCP socket client implementing RouterOS sentence protocol.
use ZillEAli\MikrotikLaravel\Connections\RouterosClient;
$client = new RouterosClient(
host: '192.168.88.1',
port: 8728,
username: 'admin',
password: 'secret',
timeout: 10,
);
$client->connect();Features:
- Variable-length word encoding (1–5 bytes)
- RouterOS v6.43+ plain login
- Legacy MD5 challenge-response support
- Auto-disconnect via destructor
use ZillEAli\MikrotikLaravel\Facades\MikroTik;
MikroTik::pppoe()->getActiveSessions();
MikroTik::system()->getCpuLoad();$cached = MikroTik::withCache(MikroTik::pppoe(), ttl: 30);
$sessions = $cached->getActiveSessions(); // cached 30 seconds// config/mikrotik.php
'retry_attempts' => 3,
'retry_delay' => 1000, // milliseconds// Secrets
$secrets = MikroTik::pppoe()->getSecrets();
$secret = MikroTik::pppoe()->getSecret('ali-home');
MikroTik::pppoe()->createSecret([
'name' => 'ali-home',
'password' => 'pass123',
'profile' => '10mbps',
]);
MikroTik::pppoe()->deleteSecret('ali-home');
// Enable/disable
MikroTik::pppoe()->enableSecret('ali-home');
MikroTik::pppoe()->disableSecret('ali-home');
MikroTik::pppoe()->bulkEnable(['user1', 'user2', 'user3']);
MikroTik::pppoe()->bulkDisable(['user1', 'user2', 'user3']);
// Active sessions
$sessions = MikroTik::pppoe()->getActiveSessions();
$session = MikroTik::pppoe()->getSessionByIp('10.0.0.1');
MikroTik::pppoe()->kickSession('ali-home');
MikroTik::pppoe()->bulkKick(['user1', 'user2']);
// Profiles
$profiles = MikroTik::pppoe()->getProfiles();// Users
$users = MikroTik::hotspot()->getUsers();
$user = MikroTik::hotspot()->getUser('guest001');
MikroTik::hotspot()->createUser(['name' => 'guest001', 'password' => '1234']);
MikroTik::hotspot()->deleteUser('guest001');
MikroTik::hotspot()->enableUser('guest001');
MikroTik::hotspot()->disableUser('guest001');
// Active hosts
$hosts = MikroTik::hotspot()->getActiveHosts();
MikroTik::hotspot()->kickHost('guest001');
// Vouchers
$vouchers = MikroTik::hotspot()->generateVouchers(
count: 10,
profile: '1hour',
prefix: 'VCH'
);
// Profiles
$profiles = MikroTik::hotspot()->getProfiles();// Simple queues
$queues = MikroTik::queue()->getSimpleQueues();
$queue = MikroTik::queue()->getQueue('ali-home');
MikroTik::queue()->createQueue([
'name' => 'ali-home',
'target' => '10.0.0.1',
'max-limit' => '10M/10M',
]);
MikroTik::queue()->updateQueue('ali-home', ['max-limit' => '20M/20M']);
MikroTik::queue()->deleteQueue('ali-home');
// Bandwidth limits
MikroTik::queue()->setLimit('ali-home', '10M', '10M');
MikroTik::queue()->bulkSetLimit($users); // ['name' => 'user', 'upload' => '5M', 'download' => '10M']
// Enable/disable
MikroTik::queue()->enableQueue('ali-home');
MikroTik::queue()->disableQueue('ali-home');
// Tree queues
$trees = MikroTik::queue()->getTreeQueues();// Filter rules
$rules = MikroTik::firewall()->getFilterRules();
MikroTik::firewall()->addFilterRule([
'chain' => 'forward',
'action' => 'drop',
'src-address' => '1.2.3.4',
]);
// NAT rules
$nat = MikroTik::firewall()->getNatRules();
MikroTik::firewall()->addNatRule([
'chain' => 'srcnat',
'action' => 'masquerade',
'out-interface' => 'ether1',
]);
// Mangle rules
$mangle = MikroTik::firewall()->getMangleRules();
MikroTik::firewall()->addMangleRule([...]);
// Address lists
$lists = MikroTik::firewall()->getAddressLists();
MikroTik::firewall()->addToAddressList('1.2.3.4', 'blocked', 'auto-blocked');
MikroTik::firewall()->removeFromAddressList('1.2.3.4', 'blocked');
$isBlocked = MikroTik::firewall()->isIpInList('1.2.3.4', 'blocked');// Resources
$resources = MikroTik::system()->getResources();
$cpu = MikroTik::system()->getCpuLoad();
$uptime = MikroTik::system()->getUptime();
// Health (temperature, voltage)
$health = MikroTik::system()->getHealth();
// Identity
$name = MikroTik::system()->getIdentity();
// Logs
$logs = MikroTik::system()->getLogs();
$logs = MikroTik::system()->getLogs(count: 50);
// Ping
$result = MikroTik::system()->ping('8.8.8.8');
// Reboot
MikroTik::system()->reboot();// All interfaces
$interfaces = MikroTik::interfaces()->getInterfaces();
$iface = MikroTik::interfaces()->getInterface('ether1');
// Filter
$running = MikroTik::interfaces()->getRunningInterfaces();
$disabled = MikroTik::interfaces()->getDisabledInterfaces();
$vlans = MikroTik::interfaces()->getVlanInterfaces();
$ethers = MikroTik::interfaces()->getEthernetInterfaces();
// Enable/disable
MikroTik::interfaces()->enableInterface('ether2');
MikroTik::interfaces()->disableInterface('ether2');
// Traffic stats
$traffic = MikroTik::interfaces()->getTraffic('ether1');// Leases
$leases = MikroTik::dhcp()->getLeases();
$lease = MikroTik::dhcp()->getLeaseByMac('AA:BB:CC:DD:EE:FF');
$lease = MikroTik::dhcp()->getLeaseByIp('192.168.1.10');
MikroTik::dhcp()->makeStatic('AA:BB:CC:DD:EE:FF');
MikroTik::dhcp()->deleteLease('AA:BB:CC:DD:EE:FF');
// Servers
$servers = MikroTik::dhcp()->getServers();
$count = MikroTik::dhcp()->getActiveLeaseCount();// Interfaces
$interfaces = MikroTik::wireless()->getInterfaces();
// Connected clients
$clients = MikroTik::wireless()->getRegistrationTable();
$clients = MikroTik::wireless()->getClientsByInterface('wlan1');
$count = MikroTik::wireless()->getClientCount();
// Access list
$acl = MikroTik::wireless()->getAccessList();
MikroTik::wireless()->addToAccessList('AA:BB:CC:DD:EE:FF');
MikroTik::wireless()->removeFromAccessList('AA:BB:CC:DD:EE:FF');// Pools
$pools = MikroTik::ipPool()->getPools();
$pool = MikroTik::ipPool()->getPool('pppoe-pool');
MikroTik::ipPool()->createPool([
'name' => 'pppoe-pool',
'ranges' => '10.0.0.1-10.0.0.254',
]);
MikroTik::ipPool()->deletePool('pppoe-pool');
// Usage
$used = MikroTik::ipPool()->getUsedAddresses('pppoe-pool');
$count = MikroTik::ipPool()->getUsedAddressCount('pppoe-pool');// Servers
$servers = MikroTik::radius()->getServers();
$server = MikroTik::radius()->getServerByAddress('192.168.1.100');
MikroTik::radius()->addServer([
'address' => '192.168.1.100',
'secret' => 'radiussecret',
'service' => 'ppp',
]);
MikroTik::radius()->removeServer('192.168.1.100');
MikroTik::radius()->enableServer('192.168.1.100');
MikroTik::radius()->disableServer('192.168.1.100');
// Check
$active = MikroTik::radius()->isServerActive('192.168.1.100');
// Incoming CoA
$incoming = MikroTik::radius()->getIncomingConfig();// Users
$users = MikroTik::routerUsers()->getUsers();
$user = MikroTik::routerUsers()->getUser('admin');
MikroTik::routerUsers()->addUser([
'name' => 'monitor',
'group' => 'read',
]);
MikroTik::routerUsers()->deleteUser('monitor');
MikroTik::routerUsers()->changePassword('monitor', 'newpass');
MikroTik::routerUsers()->enableUser('monitor');
MikroTik::routerUsers()->disableUser('monitor');
// Groups
$groups = MikroTik::routerUsers()->getGroups();
// Active sessions
$sessions = MikroTik::routerUsers()->getActiveSessions();
$isOnline = MikroTik::routerUsers()->isUserActive('admin');// WireGuard
$interfaces = MikroTik::vpn()->getWireGuardInterfaces();
$peers = MikroTik::vpn()->getWireGuardPeers();
$peers = MikroTik::vpn()->getPeersByInterface('wireguard1');
MikroTik::vpn()->addWireGuardPeer([
'interface' => 'wireguard1',
'public-key' => 'base64key==',
'allowed-address' => '10.0.0.2/32',
]);
MikroTik::vpn()->removeWireGuardPeer('base64key==');
// L2TP
$sessions = MikroTik::vpn()->getL2tpSessions();
$secrets = MikroTik::vpn()->getL2tpSecrets();
// PPTP
$sessions = MikroTik::vpn()->getPptpSessions();
// Count
$total = MikroTik::vpn()->getTotalActiveSessions();use ZillEAli\MikrotikLaravel\Events\SessionCreated;
use ZillEAli\MikrotikLaravel\Events\SessionDisconnected;
use ZillEAli\MikrotikLaravel\Events\RouterConnected;
use ZillEAli\MikrotikLaravel\Events\RouterUnreachable;
// In EventServiceProvider
protected $listen = [
SessionCreated::class => [
YourSessionCreatedListener::class,
],
RouterUnreachable::class => [
YourAlertListener::class,
],
];
// Dispatch manually
MikroTik::dispatchSessionCreated(
username: 'ali-home',
ip: '10.0.0.1',
service: 'pppoe',
mac: 'AA:BB:CC:DD:EE:FF'
);# Test router connectivity
php artisan mikrotik:ping
php artisan mikrotik:ping --router=branch
# Sync data to Laravel cache
php artisan mikrotik:sync
# Live terminal monitor
php artisan mikrotik:monitor- 70+ unit tests
- Mock-based — no real router needed
- CI: PHP 8.2/8.3 × Laravel 11/12
📝 Found an error or missing info?
Edit this page or open an issue to suggest improvements.