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

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

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

Наиболее вменяемый и часто используемуй способ. У Телеграмма роскошное АПИ для ботов с которым удобно работать через простое 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) с множеством команд:

  • cam_movie: Record 25 seconds of a camIP and send it.
  • cam_mv: Move the camera around.
  • cam_shot: Get a Pic from the camera.
  • cam_vdo: Get a 25 seconds record from a camIP.
  • chromego_add: Include to a user in chromego, a word to be used in permissions (block url/YouTube channel/etc).
  • chromego_del: Remove a word from a user in chromego to be used in permissions (block url/YouTube channel/etc).
  • chromego_list: List all permissions in chromego (block url/YouTube channel/etc).
  • fw_add: Block a hostname using a deny rule in firewall, if append time to command will block from 23:00 to 8:00
  • fw_delete: Remove a hostname from a deny firewall rule, if hostname is empty, will remove all rules created by this bot.
  • fw_disable: Disable a firewall rule.
  • fw_enable: Enable a firewall rule.
  • fw_list: List all fw rules.
  • fwr_disable: Disable a redirect firewall rule.
  • fwr_enable: Enable a redirect firewall rule.
  • fwr_list: List all redirect fw rules.
  • fw_unblock: Remove a hostname from a deny firewall rule, if hostname is empty, will remove all rules created by this bot.
  • get_ip: Get WAN IPAddress.
  • get_mac: Get the Organization that own the MacAddr.
  • get_ping: Ping an address or host, return Up or Down.
  • get_uptime: Return the uptime from this Device.
  • hst_list: Get hosts in the dhcp Leases. If a hostname is present, search only for this hostname.
  • ignoredmac_add: Add a new macaddress to the allowlist and avoid being notified about it.
  • ignoredmac_list: Shows the list of ignored mac addresses that will not be notified by the bot.
  • interface_down: Shutdown an interface by name.
  • interface_restart: Restart an interface by name.
  • interfaces_list: Get interfaces configuration.
  • interface_up: Start up an interface by name.
  • lights: Turn On or Off house Lights.
  • msg_tv: Send Message to Samsung TV
  • netstat: Prints netstat table in ESTABLISHED, CLOSED and TIME_WAIT State.
  • opkg_install: Install a package from opkg.
  • opkg_update: Update list of packages available.
  • ping_udp: Create a UDP packet to puncture a hole through a NAT firewall of your ISP
  • proc_list: List all process in execution
  • proc_restart: Restart a process in init.d
  • proc_start: Start a process in init.d
  • proc_stop: Stop a process in init.d
  • proxy_disable: Disable HTTP and HTTPS or HTTP or HTTPS proxy.
  • proxy_enable: Enable HTTP and HTTPS or HTTP or HTTPS proxy.
  • proxy_list: List proxy rules that is enabled.
  • reboot: Reboot the router.
  • start: This menu help!
  • swports_list: Switch ports list with states.
  • wifi_disable: Disable a wireless device radio.
  • wifi_enable: Enable a wireless device radio.
  • wifi_list: List all wireless devices.
  • wifi_restart: Restart a wireless device radio.
  • wll_list: Get a Wi-Fi clients list that is connected to this device

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

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

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

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

  • ntfy.sh (произносится как “notify, нотифай”) это сервис оповещений Издатель — Подписчик (англ. publisher-subscriber; pub/sub) поверх HTTP протокола. Он позволяет вам отправлять оповещения на ваш телефон или компьютер с помощью скриптов с любого устройства используя REST API. У него есть приложения для Android и iOS.
  • Тоже самое но я хочу использовать Google по какой-то причине: gCompat-UP Distrib (Android)
  • У меня есть сервер Nextcloud: NextPush (Android)
  • Я использую XMPP клиент Conversations: Conversations (Android)

Пример скрипта для отправки пуш нотификаций через 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.

This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies
  • Last modified: 2024/12/17 19:28
  • by stokito