Files
wiki/tasks/proxy-vm/PROJECT.md
2026-04-12 21:55:33 +03:00

234 lines
9.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ProxyVM — Документация проекта
**Статус:** active
**Дата запуска:** 04.04.2026
**Обновлено:** 12.04.2026 (12:04 UTC)
---
## Цели проекта
1. **Задача #1: Homenet-VPN** — Wi-Fi сеть 192.168.4.0/24, TCP трафик через Xray VLESS Reality (прозрачный прокси). UDP/443 (QUIC) — напрямую. Статус: **ГОТОВО** ✅ (12.04.2026)
2. **Задача #2: HA Telegram** — Home Assistant отправляет Telegram-уведомления через VLESS. Остальной трафик HA — напрямую. Статус: **ГОТОВО**
---
## Задача #2 — HA Telegram через VLESS (ЗАВЕРШЕНА ✅)
**Дата:** 10.04.2026
### Схема работы
```
Home Assistant (192.168.2.139, gateway = Keenetic 192.168.2.1)
│ SOCKS5 proxy (только telegram_bot интеграция)
vpn-srv SOCKS5 (192.168.2.200:1080) ← Xray
│ VLESS Reality (xtls-rprx-vision)
VLESS Server (43.245.226.231:53903)
api.telegram.org
```
Важно: только `telegram_bot` интеграция ходит через прокси. Остальной трафик HA идёт напрямую через Keenetic.
### Конфигурация в HA
Интеграция `telegram_bot` настроена через UI (Настройки → Интеграции → Telegram Bot):
| Параметр | Значение |
|----------|----------|
| Platform | polling |
| API Key | `8251509944:AAGkRr_5ZIIQNd4XrlI5QI9DYZS8JUPhcxY` |
| Proxy URL | `socks5://192.168.2.200:1080` |
| API Endpoint | `https://api.telegram.org` |
| Allowed Chat ID | 126472752 (Слава) |
| Config Entry ID | `01KNVZDDM3ZNJS1WX309K7E1EN` |
### Бот
- **Username:** `@ha542_bot`
- **Bot ID:** 8251509944
- **Notify Entity:** `notify.telegram_bot_8251509944_126472752`
### Как отправить сообщение из HA
```yaml
service: notify.send_message
target:
entity_id: notify.telegram_bot_8251509944_126472752
data:
message: "Текст уведомления"
```
Или через Developer Tools → Services.
### Доступ к HAOS
- **URL:** `https://ha.homenet542.keenetic.pro`
- **IP в LAN:** 192.168.2.139
- **HAOS Version:** 17.1 | HA Core: 2026.3.4
- **HA Token:** `HA_TOKEN` в `~/.openclaw/.env`
- **SSH через vpn-srv:**
```bash
# Шаг 1: Скопировать ключ на vpn-srv
scp -i /home/node/.openclaw/ha_ssh_key -P 3322 /home/node/.openclaw/ha_ssh_key vpn@185.130.212.192:/tmp/ha_key
# Шаг 2: SSH к HA
ssh -i /home/node/.openclaw/ha_ssh_key -p 3322 vpn@185.130.212.192 \
"ssh -i /tmp/ha_key root@192.168.2.139"
```
---
## Задача #1 — Wi-Fi Homenet_vpn transparent proxy (ГОТОВО ✅ 12.04.2026)
**Цель:** Устройства в сети 192.168.4.0/24 (телевизор и др.) автоматически используют VLESS прокси без настройки на устройстве.
### Архитектура (финальная, рабочая)
```
Телевизор/телефон
│ Wi-Fi "Homenet_vpn" (SSID)
Keenetic (DHCP: gateway=192.168.4.1, DNS=192.168.4.1)
│ VLAN/bridge → ens19
vpn-srv (192.168.4.1 на ens19)
│ iptables nat REDIRECT → port 12345
Xray dokodemo-door:12345 (tproxy=redirect, followRedirect=true)
│ VLESS Reality (xtls-rprx-vision)
VLESS Server (43.245.226.231:53903)
🌐 Internet
```
**Что работает:** DNS (UDP/53 → 1.1.1.1 напрямую), TCP → VLESS ✅, Telegram ✅, YouTube ✅
**UDP/443 (QUIC):** RETURN — не проксируется (браузер откатывается на TCP автоматически)
**MTU/MSS:** зажат до 1280 (TCPMSS clamp) — без этого Telegram/YouTube не работали
### Почему REDIRECT, а не TPROXY
Пробовали оба режима 12.04.2026:
- **TPROXY** (`iptables -t mangle TPROXY + ip rule fwmark`) — пакеты получали mark, но до Xray не доходили (проблема с routing table 100 + ядро переопределяло маршрут как `local`)
- **REDIRECT** (`iptables -t nat REDIRECT`) — работает сразу, проще, надёжнее
Итоговый выбор: **nat REDIRECT**. redsocks не используется (несовместим с xtls-rprx-vision).
---
## Инфраструктура vpn-srv
### Доступ
```bash
ssh -i /home/node/.openclaw/ha_ssh_key -o StrictHostKeyChecking=no -p 3322 vpn@185.130.212.192
# sudo через пайп:
echo meNt85doC | sudo -S <команда>
```
| Параметр | Значение |
|----------|----------|
| IP (LAN) | 192.168.2.200/24 (ens18) |
| IP (VPN subnet) | 192.168.4.1/24 (ens19) |
| OS | Ubuntu 22.04 |
| Sudo password | meNt85doC |
### Сервисы на vpn-srv
| Сервис | Порт | Статус |
|--------|------|--------|
| frpc | → relay:7000 | ✅ enabled |
| xray | 12345 (redirect), 1080 (socks5), 8888 (http) | ✅ enabled |
| redsocks | — | ❌ не используется (удалить) |
| netfilter-persistent | — | ✅ enabled |
### FRP туннель
- **relay:** `185.130.212.192:7000`, token: `frp_vpnsrv_2026_secret`
- **SSH через relay:** порт 3322 → vpn-srv:22
- **relay root SSH:** `root@185.130.212.192`, пароль `AR5f7_T-bA`
### VLESS сервер
```
vless://009625cc-588f-4cba-941f-ab8c960efa04@43.245.226.231:53903
?type=tcp&encryption=none&security=reality
&pbk=fgKnOtQWS5FErVT8E-roZgQOG6XQzDxB9-N5pRoAyBI
&fp=chrome&sni=yahoo.com&sid=d00e60e4&spx=%2F
&flow=xtls-rprx-vision
```
### Конфигурационные файлы
| Файл | Описание |
|------|----------|
| `/etc/xray/config.json` | Конфиг Xray — dokodemo redirect + SOCKS5 + HTTP + VLESS out ✅ |
| `/etc/iptables/rules.v4` | iptables — финальные правила (актуально 12.04.2026) ✅ |
| `/etc/sysctl.d/99-tproxy.conf` | rp_filter=0, ip_forward=1 ✅ |
| `/etc/frp/frpc.toml` | FRP клиент ✅ |
| `/etc/netplan/99-vpn-alias.yaml` | IP 192.168.4.1 на ens19 ✅ |
| `/etc/network/if-up.d/tproxy-routes` | ip rule для TPROXY (устарел, но безвреден) |
| `/home/vpn/transparent-proxy.sh` | Скрипт tproxy (устарел, не используется) |
### iptables (финальное рабочее состояние, сохранено в rules.v4)
```bash
# mangle: MSS clamp (критично для Telegram/YouTube)
-A FORWARD -s 192.168.4.0/24 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1280
-A POSTROUTING -s 192.168.4.0/24 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1280
# nat: UDP/443 (QUIC) не проксируем — xtls-rprx-vision не поддерживает UDP
-A PREROUTING -s 192.168.4.0/24 -p udp --dport 443 -j RETURN
# DNS напрямую к 1.1.1.1
-A PREROUTING -s 192.168.4.0/24 -p udp --dport 53 -j DNAT --to-destination 1.1.1.1
# TCP → Xray
-A PREROUTING -s 192.168.4.0/24 -p tcp -j REDIRECT --to-ports 12345
# MASQUERADE
-A POSTROUTING -s 192.168.4.0/24 -j MASQUERADE
-A POSTROUTING -s 192.168.2.0/24 -j MASQUERADE
```
✅ **rules.v4 актуален** — сохранён 12.04.2026 12:04 UTC
---
## TODO
- [x] **Задача #1:** Transparent proxy работает ✅ (12.04.2026 — nat REDIRECT + MSS clamp)
- [x] redsocks не используется (несовместим с xtls-rprx-vision)
- [x] iptables сохранены в rules.v4, netfilter-persistent enabled ✅
- [x] sysctl rp_filter=0 + ip_forward=1 персистентны ✅
- [x] После рестарта всё поднимается автоматически ✅
- [x] `/homeassistant/custom_components/set_proxy/` — не найдено (already gone) ✅
- [x] Удалены устаревшие файлы с vpn-srv: transparent-proxy.sh, check.sh, install.sh, config.json, params.env ✅
---
## Хронология
| Дата | Событие |
|------|---------|
| 04.04.2026 | Создан сегмент Homenet_vpn в Keenetic, настроен Proxmox VLAN |
| 05.04.2026 | Установлен Xray, настроен tproxy |
| 10.04.2026 | Полная отладка: frpc, redsocks, netplan, iptables-persistent |
| 10.04.2026 | DNS ✅, ping ✅, UDP ✅ — TCP через tproxy ❌ (конфликт flow) |
| 12.04.2026 | Диагностика: найдена ошибка `"tproxy": "redirect"` в xray config |
| 12.04.2026 | **Фикс:** исправлено на `"tproxy": "tproxy"`, Xray перезапущен, TCP заработал ✅ |
| 12.04.2026 | TPROXY через mangle не заработал (routing table 100 / ядро) — переключились на nat REDIRECT |
| 12.04.2026 | Telegram/YouTube не работали — фикс: MSS clamp 1280 (splice broken pipe) |
| 12.04.2026 | **ПОЛНОСТЬЮ РАБОТАЕТ:** сайты ✅ Telegram ✅ YouTube ✅ — все конфиги сохранены |
| 10.04.2026 | **Задача #2 DONE:** HA Telegram через SOCKS5 proxy → VLESS ✅ |
_Хронология отсортирована по дате. Последнее обновление: 12.04.2026 12:08 UTC_