Files
openclaw/skills/mikrotik-api/SKILL.md

133 lines
4.9 KiB
Markdown
Raw Normal View History

---
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 <ip> --user <user> --password '<pass>' \
print /system/resource/print --proplist uptime,version,board-name,cpu-load,free-memory,total-memory
```
### 2) Список интерфейсов
```bash
python3 {baseDir}/scripts/routeros_api.py \
--host <ip> --user <user> --password '<pass>' \
print /interface/print --proplist .id,name,type,running,disabled,mtu
```
### 3) IP-адреса на интерфейсах
```bash
python3 {baseDir}/scripts/routeros_api.py \
--host <ip> --user <user> --password '<pass>' \
print /ip/address/print --proplist .id,address,interface,disabled
```
### 4) DHCP leases
```bash
python3 {baseDir}/scripts/routeros_api.py \
--host <ip> --user <user> --password '<pass>' \
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 <ip> --user <user> --password '<pass>' \
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 <ip> --user <user> --password '<pass>' \
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 <ip> --user <user> --password '<pass>' \
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 <ip> --user <user> --password '<pass>' \
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`