Commit 1efc636a authored by Vitaly Lipatov's avatar Vitaly Lipatov

router/docs: add egw/ogw gateways and telegraf monitoring documentation

parent 79cdae92
# Шлюзы egw/ogw на border
## Терминология
- **egw** (exit gateway) — весь трафик клиента выходит в интернет через VDS
- **ogw** (outgoing gateway) — трафик идёт напрямую через провайдера, DPI обходится локально (nfqws/zapret)
- **igw** (internet gateway) — маршрутизатор, определяющий через какой канал (egw, ogw, upstream) пойдёт трафик
## VDS-серверы (апстримы)
Все VDS находятся в домене `*.egw.eterhost.ru`.
| Имя | IP | Хостинг | SSH |
|-----|----|---------|-----|
| hetzner.egw.eterhost.ru | 135.181.95.108 | Hetzner (Финляндия) | `ssh -p32 root@hetzner.egw.eterhost.ru` |
| sprintbox.egw.eterhost.ru | 138.249.117.171 | Sprintbox | — |
| vdska.egw.eterhost.ru | 217.177.44.55 | VDSka (Ubuntu 24.04) | `ssh root@vdska.egw.eterhost.ru` |
| beget.egw.eterhost.ru | 217.12.37.55 | Beget | — |
## Архитектура
```mermaid
graph LR
subgraph border ["border (PVE-хост)"]
subgraph hetzner_group ["hetzner"]
CT668[openconnect.hetzner.egw<br/>:112 vpns]
CT675[nfqws.ovpn.hetzner.egw<br/>:118 tun0]
CT680[gre.hetzner.egw<br/>:122 gre1]
CT684[xray.hetzner.egw<br/>:125 xray0]
CT673[amneziawg.hetzner.egw<br/>:116 ⏸]
end
subgraph sprintbox_group ["sprintbox"]
CT674[xray.sprintbox.egw<br/>:117 xray0]
CT676[ovpn.sprintbox.egw<br/>:119 tun0]
CT677[ikev2.egw<br/>:120 ipsec]
CT681[gre.sprintbox.egw<br/>:123 gre1]
CT670[cloak.ovpn.sprintbox.egw<br/>:113 ⏸]
CT671[amneziawg.sprintbox.egw<br/>:114 ⏸]
CT672[nfqws.ovpn.sprintbox.egw<br/>:115 ⏸]
end
subgraph vdska_group ["vdska"]
CT686[gre.vdska.egw<br/>:127 gre1]
end
subgraph beget_group ["beget"]
CT531[ikev2.beget.ogw<br/>:12 ipsec1]
CT683[gre.beget.ogw<br/>:124 gre1]
end
subgraph local_group ["без VDS"]
CT685[nfqws.ogw<br/>:126 zapret]
end
CT516{igw<br/>:13<br/>маршрутизатор}
subgraph vpn_group ["VPN-серверы"]
CT258[vpn.eterfund<br/>:180]
VPNOFF[vpn.office<br/>:22]
EVPN[evpn.eterfund<br/>:181]
end
end
HZ[hetzner.egw.eterhost.ru<br/>135.181.95.108]
SP[sprintbox.egw.eterhost.ru<br/>138.249.117.171]
VK[vdska.egw.eterhost.ru<br/>217.177.44.55]
BG[beget.egw.eterhost.ru<br/>217.12.37.55]
INET((Интернет))
CT668 & CT675 & CT680 & CT684 --> HZ
CT674 & CT676 & CT677 & CT681 --> SP
CT686 --> VK
CT531 & CT683 --> BG
HZ & SP & VK & BG --> INET
CT685 -->|"напрямую через провайдера"| INET
CT258 & VPNOFF -->|"default via igw"| CT516
EVPN -->|"default via 91.232.225.1"| INET
CT516 -->|"выбор канала"| CT668 & CT674 & CT675 & CT676 & CT677 & CT680 & CT681 & CT684 & CT686 & CT531 & CT683 & CT685
```
## Контейнеры
### Работающие (egw — весь трафик через VDS)
| CTID | Имя | IP | VDS | Технология | Интерфейс |
|------|-----|----|-----|------------|-----------|
| 668 | openconnect.hetzner.egw | 91.232.225.112 | hetzner | OpenConnect | vpns |
| 674 | xray.sprintbox.egw | 91.232.225.117 | sprintbox | Xray | xray0 |
| 675 | nfqws.ovpn.hetzner.egw | 91.232.225.118 | hetzner | OpenVPN + nfqws | tun0 |
| 676 | ovpn.sprintbox.egw | 91.232.225.119 | sprintbox | OpenVPN | tun0 |
| 677 | ikev2.egw | 91.232.225.120 | sprintbox | IKEv2/IPsec | ipsec |
| 680 | gre.hetzner.egw | 91.232.225.122 | hetzner | GRE | gre1 |
| 681 | gre.sprintbox.egw | 91.232.225.123 | sprintbox | GRE | gre1 |
| 684 | xray.hetzner.egw | 91.232.225.125 | hetzner | Xray | xray0 |
| 686 | gre.vdska.egw | 91.232.225.127 | vdska | GRE | gre1 |
### Работающие (ogw — DPI обход без туннеля)
| CTID | Имя | IP | Технология |
|------|-----|----|------------|
| 531 | ikev2.beget.ogw | 91.232.225.12 | IKEv2/IPsec через beget |
| 683 | gre.beget.ogw | 91.232.225.124 | GRE через beget |
| 685 | nfqws.ogw | 91.232.225.126 | zapret/nfqws (напрямую) |
### Маршрутизатор
| CTID | Имя | IP | Назначение |
|------|-----|----|------------|
| 516 | igw.etersoft.ru | 91.232.225.13 | Определяет через какой канал пойдёт трафик |
### VPN-серверы (клиентский доступ)
Принимают VPN-подключения от сотрудников, трафик клиентов направляют через igw.
| CTID | Имя | IP | Default via | Протокол |
|------|-----|----|-------------|----------|
| 258 | vpn.eterfund.ru | 91.232.225.180 | igw (91.232.225.13) | OpenVPN (tun0, tun1) |
| — | vpn.office.etersoft.ru | 91.232.225.22 | igw (91.232.225.13) | OpenVPN (tun0) + WireGuard (wg0) |
| — | evpn.eterfund.ru | 91.232.225.181 | 91.232.225.1 (напрямую) | OpenVPN (tun0) |
### Остановленные
| CTID | Имя | VDS |
|------|-----|-----|
| 670 | cloak.ovpn.sprintbox.egw | sprintbox |
| 671 | amneziawg.sprintbox.egw | sprintbox |
| 672 | nfqws.ovpn.sprintbox.egw | sprintbox |
| 673 | amneziawg.hetzner.egw | hetzner |
| 514 | ogw | — |
| 528 | egw.etersoft.ru | — |
### Тестовые
| CTID | Имя | IP |
|------|-----|----|
| 678 | local-test.egw.eterhost.ru | 91.232.225.121 |
| 679 | remote-test.egw.eterhost.ru | — |
## Маршрутизация
Все контейнеры в сети 91.232.225.0/24 на border. Трафик до VDS идёт через маршрутизатор 91.232.225.1.
**egw-контейнеры:** default route через туннель (gre1/tun0/xray0/vpns) → VDS → интернет.
**ogw-контейнеры:** default route через 91.232.225.1 → провайдер → интернет. Обход DPI локально (nfqws/zapret).
**GRE-шлюзы** требуют MASQUERADE для клиентского трафика:
```
iptables -t nat -A POSTROUTING -s 91.232.225.0/24 -o gre1 -j MASQUERADE
```
## Мониторинг
Telegraf → InfluxDB → Grafana на telegraf.office.etersoft.ru (CT 682, 10.20.30.130).
Подробнее: [telegraf-monitoring.md](telegraf-monitoring.md)
# Мониторинг VPN-шлюзов: Telegraf + InfluxDB + Grafana
## Обзор
Мониторинг латентности, потерь пакетов и трафика по 14 VPN-шлюзам на border (PVE-хост).
Все компоненты развёрнуты из пакетов ALT Linux (Sisyphus/p11).
## Архитектура
```
┌─────────────────────┐
│ Grafana (nginx:443) │
│ InfluxDB (8086) │ telegraf.office.etersoft.ru
│ Telegraf (local) │ CT 682, 10.20.30.130, vmbr1
└──────────┬──────────┘
│ HTTP :8086
┌──────┴──────────────────────────────────────┐
│ 14 шлюзов (CT 531-684) на 91.232.225.x │
│ каждый с Telegraf → InfluxDB │
│ маршрут 10.20.30.0/24 via 91.232.225.1 │
└─────────────────────────────────────────────┘
```
## Компоненты
### Сервер мониторинга (CT 682, telegraf.office.etersoft.ru)
| Компонент | Версия | Порт | Назначение |
|-----------|--------|------|------------|
| InfluxDB | 1.12.0 | 8086 | Time-series БД, база `gateways` |
| Grafana | 12.3.2 | 3000 (через nginx 443) | Визуализация |
| Telegraf | 1.35.3 | — | Локальный сбор метрик хоста |
| nginx | — | 80/443 | SSL-прокси для Grafana |
- Контейнер склонирован из kuma (CT 106), лишние сервисы отключены
- SSL-сертификаты: `/etc/nginx/ssl/telegraf.{crt,key}`
- DNS: ns1.etersoft.ru и dhcp.office.etersoft.ru
### Шлюзы с Telegraf
| CTID | Имя | IP |
|------|-----|----|
| 531 | ikev2.beget.ogw.etersoft.ru | 91.232.225.12 |
| 668 | openconnect.hetzner.egw.etersoft.ru | 91.232.225.112 |
| 670 | cloak.ovpn.sprintbox.egw.etersoft.ru | 91.232.225.113 |
| 671 | amneziawg.sprintbox.egw.etersoft.ru | 91.232.225.114 |
| 672 | nfqws.ovpn.sprintbox.egw.etersoft.ru | 91.232.225.115 |
| 673 | amneziawg.hetzner.egw.etersoft.ru | 91.232.225.116 |
| 674 | xray.sprintbox.egw.etersoft.ru | 91.232.225.117 |
| 675 | nfqws.ovpn.hetzner.egw.etersoft.ru | 91.232.225.118 |
| 676 | ovpn.sprintbox.egw.etersoft.ru | 91.232.225.119 |
| 677 | ikev2.egw.etersoft.ru | 91.232.225.120 |
| 680 | gre.hetzner.egw.etersoft.ru | 91.232.225.122 |
| 681 | gre.sprintbox.egw.etersoft.ru | 91.232.225.123 |
| 683 | gre.beget.ogw.etersoft.ru | 91.232.225.124 |
| 684 | xray.hetzner.egw.etersoft.ru | 91.232.225.125 |
Не мониторятся: igw (516, 91.232.225.13), egw (528, 91.232.225.14).
## Конфигурация
### Telegraf на шлюзе (/etc/telegraf/telegraf.conf)
```toml
[global_tags]
gateway = "ИМЯ_ШЛЮЗА" # например "nfqws.ovpn.hetzner"
[agent]
interval = "30s"
flush_interval = "30s"
hostname = ""
[[outputs.influxdb]]
urls = ["http://10.20.30.130:8086"]
database = "gateways"
[[inputs.net]]
interfaces = ["tun*", "wg*", "eth0", "gre*", "awg*", "xray*"]
[[inputs.ping]]
urls = ["8.8.8.8", "1.1.1.1"]
count = 3
ping_interval = 1.0
timeout = 3.0
[[inputs.cpu]]
percpu = false
totalcpu = true
[[inputs.mem]]
```
### Маршрутизация на шлюзах
Персистентный маршрут через systemd-networkd drop-in:
**Файл:** `/etc/systemd/network/eth0.network.d/monitoring.conf`
```ini
[Route]
Gateway = 91.232.225.1
Destination = 10.20.30.0/24
```
### Grafana
- URL: https://telegraf.office.etersoft.ru (admin / simsimopen)
- Datasource: InfluxDB, http://localhost:8086, БД `gateways`
- Дашборд: "VPN Gateways"
- Ping Latency (ms) — по шлюзам
- Packet Loss (%) — по шлюзам
- Traffic Sent (bytes/s) — по VPN-интерфейсам
- Traffic Received (bytes/s) — по VPN-интерфейсам
- Gateway Status — таблица
### nginx
**Файл:** `/etc/nginx/sites-available.d/grafana.conf`
- HTTP (80) → redirect HTTPS
- `https://telegraf` → redirect `https://telegraf.office.etersoft.ru`
- HTTPS (443) → proxy_pass http://127.0.0.1:3000
## Добавление нового шлюза
```bash
# 1. Маршрут до мониторинга
ssh root@GATEWAY_IP "
mkdir -p /etc/systemd/network/eth0.network.d
cat > /etc/systemd/network/eth0.network.d/monitoring.conf << 'EOF'
[Route]
Gateway = 91.232.225.1
Destination = 10.20.30.0/24
EOF
networkctl reload
ip route add 10.20.30.0/24 via 91.232.225.1
"
# 2. Установка и настройка telegraf
ssh root@GATEWAY_IP "epm -y install telegraf"
ssh root@GATEWAY_IP "cat > /etc/telegraf/telegraf.conf" << EOF
[global_tags]
gateway = "ИМЯ_ШЛЮЗА"
[agent]
interval = "30s"
flush_interval = "30s"
hostname = ""
[[outputs.influxdb]]
urls = ["http://10.20.30.130:8086"]
database = "gateways"
[[inputs.net]]
interfaces = ["tun*", "wg*", "eth0", "gre*", "awg*", "xray*"]
[[inputs.ping]]
urls = ["8.8.8.8", "1.1.1.1"]
count = 3
ping_interval = 1.0
timeout = 3.0
[[inputs.cpu]]
percpu = false
totalcpu = true
[[inputs.mem]]
EOF
ssh root@GATEWAY_IP "serv telegraf on; serv telegraf start"
```
## Диагностика
```bash
# Проверить, что InfluxDB жив
curl http://10.20.30.130:8086/health
# Проверить, что данные приходят
ssh root@10.20.30.130 "influx -database gateways -execute \
'SELECT last(average_response_ms) FROM ping WHERE time > now() - 5m GROUP BY gateway'"
# Статус telegraf на шлюзе
ssh root@GATEWAY_IP "serv telegraf status"
# Логи telegraf на шлюзе
ssh root@GATEWAY_IP "journalctl -eu telegraf --no-pager -n 20"
# Проверить связность шлюз → InfluxDB
ssh root@GATEWAY_IP "ping -c1 10.20.30.130"
ssh root@GATEWAY_IP "curl -s http://10.20.30.130:8086/health"
```
## Дата развёртывания
2026-02-15
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