Современные маршрутизаторы — это полноценные компьютеры на базе Linux (OpenWrt‚ KeeneticOS‚ RouterOS‚ Padavan‚ Asuswrt-Merlin и др.). Умение отправить запрос на роутере, ключевой навык для системного администратора и продвинутого пользователя. Это позволяет автоматизировать перезагрузки‚ мониторить трафик‚ управлять VPN‚ настраивать DDNS и интегрировать роутер в системы «Умный дом» (Home Assistant‚ MQTT).
В этой статье мы подробно разберем способы отправки HTTP/HTTPS-запросов изнутри роутера (через SSH/Терминал) и к роутеру (управление через API)‚ опираясь на лучшие практики работы с утилитами curl и wget.
Подготовка окружения: SSH и доступ к командной строке
Прежде чем отправлять запросы‚ необходимо получить доступ к оболочке (shell) роутера.
- OpenWrt / Keenetic / Padavan / Asuswrt: Включите SSH-доступ в веб-интерфейсе (обычно: System → Administration → SSH Access). Подключитесь:
ssh root@192.168..(IP маскирован). - MikroTik (RouterOS): Используйте WinBox или SSH (
ssh admin@192.168..). В терминале доступен инструмент/tool fetch. - Стандартные прошивки (TP-Link‚ D-Link‚ Xiaomi сток): Часто требуют взлома (exploit) или установки модифицированных прошивок (OpenWrt‚ Breed) для полноценного SSH.
Важно: Всегда меняйте стандартные пароли. В примерах ниже пароли и токены заменены на *.
Основные инструменты: curl и wget
В 99% случаев на роутерах с Linux используется BusyBox‚ который содержит урезанные версии wget и curl (или полные‚ если установлены пакеты curl / wget-ssl).
Утилита wget (BusyBox / Full)
Отлично подходит для простых GET-запросов и скачивания файлов (скриптов‚ прошивок‚ конфигов).
Базовый синтаксис (из справочника сисадмина):
# Простой GET-запрос с выводом в stdout (флаг -qO-)
wget -qO- http://192.168../api/status
wget --header="Authorization: Bearer *"
--header="Accept: application/json"
-qO- https://192.168../rpc
wget -O backup.cfg "http://admin:*@192.168../cgi-bin/export.cfg"
Утилита curl (Мощный стандарт для API)
curl поддерживает все HTTP-методы (POST‚ PUT‚ DELETE‚ PATCH)‚ работу с куками‚ формами‚ JSON и множеством протоколов (DICT‚ FILE‚ FTP‚ FTPS‚ Gopher‚ HTTP‚ HTTPS‚ IMAP‚ LDAP‚ POP3‚ RTMP‚ RTSP‚ SCP‚ SFTP‚ SMTP‚ Telnet‚ TFTP).
Примеры для работы с REST API роутера:
# 1. Простой GET (проверка доступности / получение IP)
curl -s http://192.168.. # -s (silent) скрывает прогресс-бар
curl -X GET
-H "Accept: application/json"
-H "Authorization: Basic *"
"https://192.168../rci/show/interface"
curl -X POST
-d "username=admin&password=*"
"http://192.168../login.cgi"
curl -X POST
-H "Content-Type: application/json"
-H "Authorization: Bearer *"
-d '{"method": "reboot"‚ "params": {}}'
"https://192.168../rpc"
curl -c cookies.txt -X POST -d "user=admin&pass=*" http://192.168../login
curl -b cookies.txt "http://192.168../status_page"
curl -k -X GET "https://192.168.."
Специфика популярных платформ
OpenWrt (UBUS / RPC / LUCI API)
В OpenWt основной внутренний IPC — UBUS. Для внешнего доступа используется rpcd (JSON-RPC 2.0 над HTTP).
- Авторизация (получение сессии):
curl -k -X POST -H "Content-Type: application/json" -d '{"jsonrpc":"2.0"‚"id":1‚"method":"call"‚"params":["00000000000000000000000000000000"‚"session"‚"login"‚{"username":"root"‚"password":"*"}]}' https://192.168../ubus - Вызов метода (например‚ перезагрузка WAN): Используйте полученный
ubus_rpc_sessionв заголовке Cookie или параметре.
Keenetic (KeeneticOS / RCI ⎯ RESTful Control Interface)
Один из самых удобных API. Доступен по адресу /rci/.
# Показать интерфейсы
curl -k -u "admin:*" "https://192.168../rci/show/interface"
curl -k -u "admin:*" -X POST "https://192.168../rci/system/reboot"
curl -k -u "admin:*" "https://192.168../rci/show/ip/hotspot" | grep -oE '([0-9]{1‚3}.){3}[0-9]{1‚3}'
MikroTik (RouterOS REST API)
Начиная с v7‚ доступен полноценный REST API (/rest/).
# Авторизация (Basic Auth)
curl -k -u "admin:*" "https://192.168../rest/interface"
curl -k -u "admin:*" -X PUT
-H "Content-Type: application/json"
-d '{"disabled": false}'
"https://192.168../rest/interface/ether1"
/tool fetch url="https://api.ipify.org" mode=https dst-path=myip.txt
Asuswrt-Merlin / Padavan (nvram / httpd)
Часто управление идет через эмуляцию веб-форм или специальные .asp / .cgi скрипты.
# Пример перезагрузки (Asus)
curl -X POST -d "action_mode=reboot¤t_page=System_Restart.asp&next_page=System_Restart.asp"
-u "admin:*" "http://192.168../apply.cgi"
nvram get wan0_ipaddr
Типовые сценарии автоматизации (Кейсы)
Динамический DNS (DDNS) собственной реализацией
Если провайдер не дает белый IP‚ или нужно обновлять запись на своем DNS-сервере.
#!/bin/sh
WAN_IP=$(curl -s -k --interface pppoe-wan https://api.ipify.org) # Укажите свой WAN интерфейс
LAST_IP=$(cat /tmp/last_ip 2>/dev/null)
if [ "$WAN_IP" != "$LAST_IP" ] && [ -n "$WAN_IP" ]; then
echo $WAN_IP > /tmp/last_ip
# Обновление через API Cloudflare / Yandex / Selectel / свой сервер
curl -X PUT "https://api.example.com/dns/update"
-H "Authorization: Bearer "
-H "Content-Type: application/json"
-d "{"domain":"router..ru"‚"ip":"$WAN_IP"}"
logger "DDNS updated to $WAN_IP"
fi
Мониторинг и алертинг в Telegram / MQTT
# Отправка сообщения в Telegram бота при подключении нового DHCP клиента (hotplug script)
if [ "$ACTION" = "add" ]; then
MSG="🔔 Новый клиент: $HOSTNAME ($IP) MAC: $MAC"
curl -s -X POST "https://api.telegram.org/bot/sendMessage"
-d chat_id=
-d text="$MSG" fi
Управление VPN (WireGuard / OpenVPN) через API
Включение/выключение пиров WireGuard на Keenetic/OpenWrt без перезагрузки всего туннеля;
# Keenetic: Отключить пира WireGuard
curl -k -u "admin:*" -X PATCH
-H "Content-Type: application/json"
-d '{"enabled": false}'
"https://192.168../rci/wireguard/peer/*"
Работа с REST API из скриптов на Python (Entware / Optware)
Если на роутере установлен Entware (opkg)‚ доступен полноценный Python 3. Это удобнее парсить JSON‚ чем jq или awk в shell.
Основано на гайде по pycurl 2023/2025:
import pycurl
import certifi
from io import BytesIO
import json
buffer = BytesIO
c = pycurl.Curl
c.setopt(c.URL‚ 'https://192.168../rci/show/interface')
c.setopt(c.USERPWD‚ 'admin:*')
c.setopt(c.CAINFO‚ certifi.where) # Проверка сертификатов
c.setopt(c.WRITEDATA‚ buffer)
c.setopt(c.SSL_VERIFYPEER‚ 0) # 0 = игнорировать самоподписанные (как -k в curl)
c.setopt(c.SSL_VERIFYHOST‚ 0)
c.perform
c.close
body = buffer.getvalue.decode('utf-8')
data = json.loads(body)
print(json.dumps(data‚ indent=2))
Безопасность и лучшие практики
- Никогда не передавайте пароли в URL (видно в
ps auxи логах прокси). Используйте-u user:pass(curl) или--http-user/--http-password(wget)‚ лучше — токены/ключи API. - Используйте HTTPS (-k / —no-check-certificate только для доверенной локальной сети). В интернете всегда проверяйте сертификаты.
- Ограничьте доступ к API через Firewall (Input/Access Control): только IP управления (VPN‚ LAN)‚ закрыть WAN.
- Храните секреты в файлах с правами 600 (
chmod 600 /opt/scripts/secrets.conf) и подключайтеsource /opt/scripts/secrets.conf. - Логирование: Пишите важные действия через
logger -t "MyScript" "Message"— попадут вlogread/dmesg/ Syslog сервер.
Отладка и решение проблем
| Проблема | Диагностика / Решение |
|---|---|
| curl: (6) Could not resolve host | Проблема с DNS на роутере. Проверьте /etc/resolv.conf или укажите DNS явно: curl --dns-servers 1.1.1.1 .... |
| curl: (60) SSL certificate problem | Самоподписанный сертификат роутера. Добавьте флаг -k (—insecure) или установите CA-сертификаты (opkg install ca-bundle ca-certificates). |
| wget: not an http or ftp url | BusyBox wget не поддерживает HTTPS. Установите полный wget-ssl или curl (opkg install curl). |
| 401 Unauthorized / 403 Forbidden | Неверный логин/пароль‚ токен просрочен‚ или IP не в белом списке API. Проверьте заголовки: curl -v .... |
| Connection refused / Timeout | Служба API не запущена (rpcd‚ lighttpd‚ nginx) или блокирует Firewall (Input chain). Проверьте порт: netstat -tulpn | grep 80. |
Режим verbose (подробный вывод) — лучший друг:
curl -v -k -u "admin:*" "https://192.168../rci/"
Умение отправить запрос на роутере открывает возможности‚ недоступные через веб-интерфейс: от точечного управления сервисами до интеграции в корпоративные системы мониторинга (Zabbix‚ Prometheus‚ Grafana) и «Умный дом»;
Ключевые выводы:
- Базовый набор, SSH + curl/wget (установите полные версии через opkg/entware‚ если стоит BusyBox).
- Изучите API вашей прошивки (RCI для Keenetic‚ UBUS/JSON-RPC для OpenWrt‚ REST для MikroTik v7+).
- Автоматизируйте через cron‚ hotplug-скрипты или systemd/timers (на современных ядрах).
- Следите за безопасностью: HTTPS‚ токены‚ Firewall‚ права на файлы.
Начните с простого: curl -k https://192.168.. и постепенно переходите к сложным POST/PUT запросам с JSON-телами для управления конфигурацией инфраструктуры.
Статья подготовлена на основе актуальных практик администрирования сетевого оборудования (OpenWrt‚ KeeneticOS‚ RouterOS‚ Asuswrt-Merlin) и документации утилит curl/wget (данные на 2024-2026 гг.).