mirror of
https://github.com/andrey271192/kaskad.git
synced 2026-09-20 13:49:56 +00:00
Каскадная маршрутизация русских сайтов через свой набор RU-серверов с failover, Telegram-ботом и веб-интерфейсом. - bin/ — failover-script, route/domain helpers, ams/ru bootstrap - bot/ — Telegram-бот (Python, long-poll) - webui/ — Flask single-page dashboard - docs/ — установка, архитектура, API бота и WebUI - examples/ — шаблоны конфигов
89 lines
5.4 KiB
Markdown
89 lines
5.4 KiB
Markdown
# Telegram-бот
|
||
|
||
Бот живёт на одном из ам. серверов (там, где есть доступ к api.telegram.org). Управляет всеми остальными по SSH через свой ed25519 ключ.
|
||
|
||
## Доступ
|
||
|
||
Бот реагирует ТОЛЬКО на сообщения из чата с `chat_id == TG_CHAT_ID` (см. `/etc/wireguard/notify.env`). Остальные сообщения игнорирует.
|
||
|
||
## Команды
|
||
|
||
### Туннели
|
||
|
||
| Команда | Описание |
|
||
|---|---|
|
||
| `/status` | Endpoint и handshake age для каждого ам. сервера |
|
||
| `/use <id>` | Принудительно переключить все ам. на RU-сервер с этим id |
|
||
| `/primary` | Алиас `/use primary` |
|
||
| `/backup` | Алиас `/use backup` |
|
||
| `/failover` | Алиас `/use backup` |
|
||
| `/failback` | Алиас `/use primary` |
|
||
|
||
### RU-серверы
|
||
|
||
| Команда | Описание |
|
||
|---|---|
|
||
| `/server-list` | Список RU-серверов с приоритетами |
|
||
| `/server-add <host> <user> <ssh_port> <id> [prio] [password=PW] [label=...] [listen_port=1939] [probe_port=ssh_port]` | Бот SSHит на новый RU, ставит wireguard, генерит ключ, добавляет 4 ам. как peer'ы, открывает 1939/UDP, кладёт свой ключ для будущего управления |
|
||
| `/server-remove <id\|host>` | Удалить RU из ротации (сам сервер не выключается, просто перестаёт использоваться) |
|
||
| `/bot-key` | Показать публичный SSH-ключ бота — для добавления в `authorized_keys` на новом сервере (если не хочется передавать пароль через TG) |
|
||
|
||
**Безопасность**: при `password=PW` бот после обработки автоматически удаляет своё сообщение через TG API. Но в моменте оно всё равно попадает в логи TG, поэтому надёжнее — использовать ключевую авторизацию (см. `/bot-key`).
|
||
|
||
### Ам. серверы
|
||
|
||
| Команда | Описание |
|
||
|---|---|
|
||
| `/ams-list` | Список ам. серверов |
|
||
| `/ams-add <host> <user> <ssh_port> <id> [tunnel_ip=auto] [xray_iface=amn0] [password=PW]` | Бот: ставит wireguard, кладёт свой ключ, генерит WG-ключ ам., выдаёт следующий свободный 10.0.0.X, копирует все скрипты и шаблон ru.conf со sga1, поднимает туннель на текущий primary, ставит cron, и добавляет [Peer] на ВСЕХ RU-серверах |
|
||
| `/ams-remove <id\|host>` | Снять [Peer] со всех RU; обновить JSON. Сам сервер остаётся работать (X-ray, OS), просто перестаёт быть в туннеле |
|
||
|
||
X-ray на новый ам. сервер бот НЕ ставит — это вне его компетенции.
|
||
|
||
### Маршруты (IP/CIDR)
|
||
|
||
| Команда | Описание |
|
||
|---|---|
|
||
| `/ips` | Все маршруты сразу (база + доп.) |
|
||
| `/list` | Только дополнительные (добавленные через бот) |
|
||
| `/add <IP/CIDR ...>` | Добавить (через пробел или с новой строки; `/32` дописывается сам) |
|
||
| `/remove <IP/CIDR ...>` | Удалить |
|
||
| `/clear` | Удалить ВСЕ доп. маршруты |
|
||
|
||
Базовые подсети (10 крупных сервисов: Яндекс, ВК, Mail.ru, Госуслуги, Ozon) трогать через бот нельзя — они в `/etc/wireguard/ru-base.aips`. Если нужно изменить — править вручную и `/usr/local/bin/ru-routes.sh apply`.
|
||
|
||
### Домены
|
||
|
||
| Команда | Описание |
|
||
|---|---|
|
||
| `/list-domains` | Список доменов с количеством IP |
|
||
| `/add-domain <domain ...>` | Резолвит каждый домен через `dig +short A`, добавляет полученные IP как /32 в маршруты на всех ам. серверах. Формат: пробел или с новой строки. |
|
||
| `/remove-domain <domain ...>` | Убирает домен и его IP (если их не использует другой домен). |
|
||
| `/show-domain <domain>` | Текущие IP конкретного домена |
|
||
| `/refresh-domains` | Принудительно перерезолвить все домены |
|
||
|
||
Cron `17 */6 * * * /usr/local/bin/ru-domains.py refresh` — автоматический refresh каждые 6 часов. Лог: `/var/log/ru-domains.log`.
|
||
|
||
### Прочее
|
||
|
||
| Команда | Описание |
|
||
|---|---|
|
||
| `/bot-key` | Публичный SSH-ключ бота |
|
||
| `/help` | Полная справка |
|
||
|
||
## Уведомления
|
||
|
||
При каждом автоматическом переключении (failover/failback успех/failback провал) бот шлёт сообщение в `TG_CHAT_ID` с тэгом `[ru-failover @ <hostname>]`. См. `journalctl -t ru-failover` для истории.
|
||
|
||
## Логи
|
||
|
||
```bash
|
||
# логи бота
|
||
journalctl -u ru-tg-bot.service -f
|
||
|
||
# логи failover
|
||
journalctl -t ru-failover -f
|
||
# или
|
||
grep ru-failover /var/log/syslog | tail
|
||
```
|