Table of Contents

Удалённое управление устройством на OpenWrt с помощью чатов (Telegram, XMPP) и EMail

Устройство (роутер) может оправлять оповещения и получать команды прямо к вам в месенджер или на электронную почту.

EMail

Как отправить почту смотрите в статье про SMTP клиенты. Получение писем с командами возможно с помощью SMTP сервера, например postfix (популярный но сложный в настройке) или E-MailRelay и с помощью своих скриптов можно обрабатывать команды. Но в целом почтовый сервер использовать проблематично из-за множества ограничений: ему нужен статический адрес, провайдеры интернета часто блокируют 25тый порт SMTP, много спама и проблема с DDoS.

Telegram

Наиболее вменяемый и часто используемуй способ. У Телеграмма роскошное АПИ для ботов с которым удобно работать через простое HTTP API с долгим ожиданием (long pooling). Например чтобы боту отправить сообщение достаточно отправить POST запрос:

TOKEN="токен вашего бота"
CHAT_ID="id чата между пользователем и ботом"
MSG="сообщение"
wget -q -O - --post-data="chat_id=$CHAT_ID&text=$MSG" "https://api.telegram.org/bot$TOKEN/sendMessage"

Если интересно разобраться читайте Простой телеграмм бот на sh, или ещё одно применение старому роутеру.

Есть уже готовый бот alexwbaule/telegramopenwrt использующий curl (установите с помощью opkg update; opkg install curl) с множеством команд:

Есть ещё один бот https://github.com/varakh/tlgbot. Он посвежее и русифицированный но он зачем-то использует bash (который ещё устанавливать нужно) и функционал скромнее.

Важно понимать что бот всё же ограничен в том что он может делать. Сквозного шифрования при этом нет, если кто-то взломает ваш Телеграмм он может вам попортить роутер и жизнь.

XMPP

XMPP (Jabber) плохо поддерживается но это потенциально самый безопасный способ. Вы можете установить Prosody XMPP серве и с небольшыми скриптами на Луа использовать его и как клиент. Есть sendxmpp скрипт на perl чтобы отправлять сообщения по xmpp, похожий на sendmail. Чтобы отправлять сообщения через HTTP API с помощью wget или curl вы можете установить плагин REST API на ваш XMPP server (mod_http_rest для Prosody). Возможно XEP-0124 BOSH позволяет отправлять так сообщения.

UnifiedPush

UnifiedPush это открытая спецификация и инструменты которые позволяют пользователю выбрать как пуш оповещения будут доставляться. Его поддерживают различные приложения:

Отправка оповещений через ntfy.sh

Пример скрипта для отправки пуш нотификаций через ntfy.sh в очередь example (вам следует создать свою личную очередь):

NTFY_QUEUE="example"
NEW_CLIENT_IP="192.168.1.42"
MSG="Someone joined network
 
A new client with IP $NEW_CLIENT_IP joined.
Please check if it's not an intruder."
 
wget -q -O - "ntfy.sh/$NTFY_QUEUE" \
  --header "Priority: urgent" \
  --header "Tags: ghost" \
  --header "Click: http://192.168.1.1/" \
  --header "Actions: http, Open Luci, https://192.168.1.1/cgi-bin/ntfy-action.cgi?block=$NEW_CLIENT_IP, clear=true" \
  --header "Email: root@OpenWrt" \
  --post-data="$MSG"

ВНИМАНИЕ: опция --header была добавлена в uclient-fetch только в июле 2024 поэтому если вы желаете использовать расширенные свойства вам следует установить пакет wget-ssl.

Смотрите также