--- name: mikrotik-api description: Управление MikroTik RouterOS через API (TCP 8728/8729): логин, print/getall, выборка через query, безопасная проверка статуса, интерфейсов, адресов, маршрутов и других разделов. Использовать, когда нужно читать/менять конфиг RouterOS программно, проверять состояние роутера или готовить автоматизацию под RouterOS API. --- # MikroTik API Используй этот скилл для работы с RouterOS API на уровне «команда/атрибуты/ответы». ## Быстрый старт ```bash python3 {baseDir}/scripts/routeros_api.py \ --host 192.168.88.1 --user admin --password 'secret' \ cmd /system/resource/print ``` С `.proplist`: ```bash python3 {baseDir}/scripts/routeros_api.py \ --host 192.168.88.1 --user admin --password 'secret' \ print /interface/print --proplist name,type,running,disabled ``` С query: ```bash python3 {baseDir}/scripts/routeros_api.py \ --host 192.168.88.1 --user admin --password 'secret' \ print /ip/route/print --query '?dst-address=0.0.0.0/0' --query '?active=true' ``` ## Правила работы - Сначала проверяй доступность API-сервиса (`8728`/`8729`). - По умолчанию используй чтение (`print`, `getall`) и минимальный `.proplist`. - Для долгих задач учитывай ответы `!trap`, `!done`, `!re`. - Для параллельных запросов используй `.tag`. - Не отправляй опасные команды (`reboot`, `reset`, массовые remove/set`) без явного подтверждения пользователя. ## Что делает скрипт `routeros_api.py`: - логин post-v6.43 (`/login`, `=name=`, `=password=`), - отправка произвольной команды `cmd`, - упрощённый режим `print` с query и `.proplist`, - JSON-вывод по reply-фреймам (`!re`, `!done`, `!trap`, `!fatal`). ## Ограничения - Сейчас реализован plaintext API (8728). Для TLS/API-SSL нужен отдельный режим. - Скрипт не делает бесконечный `listen`-цикл; он рассчитан на запрос-ответ. ## Готовые безопасные команды (типовые задачи) ### 1) Статус роутера ```bash python3 {baseDir}/scripts/routeros_api.py \ --host --user --password '' \ print /system/resource/print --proplist uptime,version,board-name,cpu-load,free-memory,total-memory ``` ### 2) Список интерфейсов ```bash python3 {baseDir}/scripts/routeros_api.py \ --host --user --password '' \ print /interface/print --proplist .id,name,type,running,disabled,mtu ``` ### 3) IP-адреса на интерфейсах ```bash python3 {baseDir}/scripts/routeros_api.py \ --host --user --password '' \ print /ip/address/print --proplist .id,address,interface,disabled ``` ### 4) DHCP leases ```bash python3 {baseDir}/scripts/routeros_api.py \ --host --user --password '' \ print /ip/dhcp-server/lease/print --proplist .id,address,mac-address,host-name,status,server,last-seen ``` ### 5) Маршруты по умолчанию ```bash python3 {baseDir}/scripts/routeros_api.py \ --host --user --password '' \ print /ip/route/print --proplist .id,dst-address,gateway,distance,active,disabled --query '?dst-address=0.0.0.0/0' ``` ### 6) DNS-настройки ```bash python3 {baseDir}/scripts/routeros_api.py \ --host --user --password '' \ print /ip/dns/print --proplist servers,allow-remote-requests,cache-size,cache-used ``` ### 7) Wi-Fi (legacy wireless) ```bash python3 {baseDir}/scripts/routeros_api.py \ --host --user --password '' \ print /interface/wireless/print --proplist .id,name,ssid,frequency,band,mode,disabled,running ``` ### 8) Wi-Fi (wifiwave2) ```bash python3 {baseDir}/scripts/routeros_api.py \ --host --user --password '' \ print /interface/wifi/print --proplist .id,name,ssid,configuration.disabled,running ``` ## Осторожно с изменениями Перед командами `set/add/remove`: 1. Сними текущее состояние через `print`. 2. Проверь `.id` целевого объекта. 3. Применяй изменения по одной команде. 4. Сразу валидируй результат повторным `print`. ## Ссылки - Основные заметки по протоколу: `references/routeros-api-notes.md` - Практические шаблоны: `references/common-operations.md`