Commit 4fe1973b authored by Vitaly Lipatov's avatar Vitaly Lipatov

Add igw-api skill for igw route management API

Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
parent e7918c66
---
name: igw-api
description: "Route Management API on igw.etersoft.ru manage bypass/direct/geo route lists, check site blocking through gateways, export resolved routes. Self-documenting HTTP API (port 80). TRIGGER when: igw API, route management, route web UI, bypass/direct/geo list, check site blocking/domain through gateway, add/remove/move route domain, export routes CIDR/MikroTik, googlevideo CDN"
user-invocable: true
allowed-tools: Bash(curl* ssh*)
argument-hint: "[check|list|status|export|add|remove|move] [domain] [mode]"
context: fork
---
Execute igw Route Management API task: $ARGUMENTS
## Главное правило
API **самодокументированное** — ПЕРЕД любым действием вычитай живой контракт, не работай по памяти:
```bash
curl -s http://igw.etersoft.ru/api/openapi.json # полная OpenAPI спецификация
# Swagger UI: http://igw.etersoft.ru/swagger
# Веб-морда: http://igw.etersoft.ru/
```
## Доступ
- **HTTP порт 80**, НЕ HTTPS (443 закрыт — connection refused). Всегда `http://igw.etersoft.ru/...`.
- Сервер: Python BaseHTTP. Исходников в этом репо НЕТ — код на самом igw.
- SSH на хост: `ssh root@igw.etersoft.ru` (91.232.225.13) — для правки сервера/скриптов.
## Эндпоинты (актуальный список — сверь с openapi.json)
Три режима списков: **bypass / direct / geo**.
| Метод | Путь | Тело | Назначение |
|---|---|---|---|
| GET | `/api/list` | — | Все записи `{bypass:[], direct:[], geo:[]}` |
| POST | `/api/add` | `{domain, mode}` | Добавить/перенести в список. 409 при конфликте |
| POST | `/api/remove` | `{domain, mode}` | Удалить. 404 если нет |
| POST | `/api/move` | `{domain, from, to}` | Перенести между списками |
| GET | `/api/googlevideo` | — | CDN-паттерны `{patterns, count}` |
| POST | `/api/googlevideo` | `{domain}` | Нормализует `rr3---sn-...googlevideo.com``rr[1-8]---sn-...`. `{ok,pattern,added}` |
| GET | `/api/status` | — | `updated`, `pending` (неприменённые), `remaining` (сек), `duration` |
| GET | `/api/active` | — | Действующие правила из `all-routes.json` (ставит `route-update.sh`) |
| GET | `/api/export/groups` | — | Группы с числом IP и именами списков |
| GET | `/api/export` | — (query) | Resolved IP — см. ниже |
| POST | `/api/check` | `{domain}` | **Проверка домена через шлюзы** — см. ниже |
Группы (`/api/export/groups`): `cloudflare-warp, dgw, egw, gre, hetzner, ogw, zapret`.
## Read-only (безопасно, можно свободно дёргать)
```bash
B=http://igw.etersoft.ru
curl -s $B/api/status
curl -s $B/api/list
curl -s $B/api/active
curl -s $B/api/export/groups
curl -s $B/api/googlevideo
```
## Проверка блокировки (главный тест-эндпоинт)
`POST /api/check {domain}` — прогоняет домен/URL через шлюзы обхода последовательно (curl через SOCKS5). Результат/скорость по каждому шлюзу.
```bash
# JSON-ответ целиком:
curl -s -X POST http://igw.etersoft.ru/api/check \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-d '{"domain":"youtube.com"}'
# SSE-стрим (по мере проверки каждого шлюза):
curl -sN -X POST http://igw.etersoft.ru/api/check \
-H 'Content-Type: application/json' \
-H 'Accept: text/event-stream' \
-d '{"domain":"youtube.com"}'
```
Это **активная проверка** — может быть долгой (перебор шлюзов).
## Write-эндпоинты (меняют списки)
`/api/add`, `/api/remove`, `/api/move`, `/api/googlevideo` правят list-файлы. Изменения применяются **не мгновенно**`route-update.sh` по таймеру (~300s цикл). После правки проверь:
```bash
curl -s http://igw.etersoft.ru/api/status # pending=true пока не применилось
```
## Экспорт resolved IP
```bash
B=http://igw.etersoft.ru
# форматы: text (CIDR построчно), mikrotik, json
curl -s "$B/api/export?format=text"
curl -s "$B/api/export?format=mikrotik&mikrotik_list=MYLIST&group=gre"
curl -s "$B/api/export?format=json&group=egw&list=ai&aggregate=2"
# aggregate: 0=выкл, 1=смежные, 2=умная агрегация в CIDR
```
## Связанное
- Маршруты/туннели/файрвол как инфраструктура — skill `/network` (igw как хост, route-update.sh, шлюзы egw/ogw).
- Интеграция с route-update.sh: `web-bypass.list` в `routes.d/egw/`**симлинк**`/home/routeweb/route-web-api/web-bypass.list`. Конфиг маршрутов: `routes.d/GROUP/{gateway,*.list}`, `routes6.d/` для IPv6.
- Мониторинг шлюзов (health/proxy, SOCKS igw:1080) — memory: `lesson_proxy_monitoring_functional_check`, `lesson_igw_telegram_ipv6_broken`.
...@@ -20,10 +20,8 @@ Execute network task: $ARGUMENTS ...@@ -20,10 +20,8 @@ Execute network task: $ARGUMENTS
| vdska | - | VDS, tunnels | `ssh root@vdska.egw.eterhost.ru` | | vdska | - | VDS, tunnels | `ssh root@vdska.egw.eterhost.ru` |
| beget | 217.12.37.55 | VDS, tunnels | `ssh root@beget.ogw.eterhost.ru` | | beget | 217.12.37.55 | VDS, tunnels | `ssh root@beget.ogw.eterhost.ru` |
## Route web UI ## igw Route Management API → отдельный skill
- http://igw.etersoft.ru/ — manage bypass/direct/geo lists Управление списками bypass/direct/geo, проверка блокировки сайта, экспорт маршрутов — это **HTTP API**, см. skill **`/igw-api`** (самодок `http://igw.etersoft.ru/api/openapi.json`, порт 80).
- API: `/api/check` (POST, domain), `/api/list`, `/api/add`, `/api/remove`
- Check site blocking: `curl -s -X POST http://igw.etersoft.ru/api/check -H 'Content-Type: application/json' -d '{"domain":"example.com"}'`
## route-update.sh ## route-update.sh
- Location: `/root/etersoft-admin-essential/router/route-update.sh` on igw - Location: `/root/etersoft-admin-essential/router/route-update.sh` on igw
...@@ -57,9 +55,3 @@ bydpi (.129), gre.beget (.124), ikev2.beget (.130), nfqws.ogw (.126) ...@@ -57,9 +55,3 @@ bydpi (.129), gre.beget (.124), ikev2.beget (.130), nfqws.ogw (.126)
## Cloak+OpenVPN (CT 695, .132) ## Cloak+OpenVPN (CT 695, .132)
- Cloak tunnel through hetzner, SOCKS5 on port 1080 - Cloak tunnel through hetzner, SOCKS5 on port 1080
- Access: `ssh root@91.232.225.132` - Access: `ssh root@91.232.225.132`
## Route Export API (igw)
- `/api/export/resolved` — all resolved routes as CIDR
- `/api/export/resolved?format=mikrotik` — MikroTik format
- `/api/export/resolved?group=GROUP` — filter by group
- `/api/metrics` — list sizes, route counts
...@@ -67,6 +67,7 @@ ansible-playbook -i /root/.ansible/hosts ansible/playbooks/NAME.yml ...@@ -67,6 +67,7 @@ ansible-playbook -i /root/.ansible/hosts ansible/playbooks/NAME.yml
| `/eterban` | Блокировка IP: бан/разбан, проверка, тестирование ban-страницы | | `/eterban` | Блокировка IP: бан/разбан, проверка, тестирование ban-страницы |
| `/vpn` | VPN: создание/проверка пользователей на vpn.office/vpn.eterfund/evpn | | `/vpn` | VPN: создание/проверка пользователей на vpn.office/vpn.eterfund/evpn |
| `/network` | Сеть: маршруты, туннели, шлюзы igw/egw/ogw, firewall, блокировки сайтов | | `/network` | Сеть: маршруты, туннели, шлюзы igw/egw/ogw, firewall, блокировки сайтов |
| `/igw-api` | igw Route Management API (HTTP :80, самодок): списки bypass/direct/geo, проверка блокировки домена через шлюзы, экспорт маршрутов |
| `/sip` | Телефония: FreeSWITCH, телефоны, sipnet, dialplan | | `/sip` | Телефония: FreeSWITCH, телефоны, sipnet, dialplan |
### Справочные документы (.claude/docs/) ### Справочные документы (.claude/docs/)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment