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

156 lines
4.7 KiB
Markdown
Raw 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.
# Proxy VM — VLESS Reality шлюз
Ubuntu VM в Proxmox для обхода РКН:
- **HTTP прокси** на порту `8888` — для Telegram бота в Home Assistant
- **SOCKS5** на порту `1080` — универсальный прокси
- **Прозрачный прокси (tproxy)** — для телевизора без каких-либо настроек на нём
Протокол: VLESS + Reality (практически не определяется DPI).
---
## Быстрый старт
### 1. Подготовить VM
Минимальные требования:
- Ubuntu 22.04 LTS (или 24.04)
- 1 vCPU, 512 MB RAM, 4 GB диск
- Статический IP `192.168.2.200` (или настроить через DHCP-резервирование)
### 2. Скопировать файлы на VM
```bash
scp -r tasks/ha/proxy-vm/ user@192.168.2.200:~/proxy-vm/
ssh user@192.168.2.200
cd ~/proxy-vm
```
### 3. Заполнить параметры
```bash
cp params.env.example params.env
nano params.env # заполни все значения
```
Обязательные параметры:
```env
VLESS_SERVER_IP=<IP сервера>
VLESS_UUID=<UUID>
VLESS_PUBLIC_KEY=<публичный ключ Reality>
VLESS_SHORT_ID=<short ID>
VLESS_SNI=www.microsoft.com
TV_SUBNET=192.168.3.0/24
```
### 4. Установить Xray
```bash
sudo bash install.sh
```
Скрипт:
- Установит Xray (последняя версия с GitHub)
- Сгенерирует `/etc/xray/config.json` с твоими параметрами
- Включит IP forwarding
- Создаст и запустит systemd сервис `xray`
### 5. Настроить прозрачный прокси для TV
```bash
sudo bash transparent-proxy.sh
```
Скрипт:
- Настроит iptables tproxy для TV подсети
- Сохранит правила через iptables-persistent
- Создаст systemd сервис для восстановления маршрутов при ребуте
### 6. Настроить Keenetic
Читай [`KEENETIC.md`](KEENETIC.md) — создать отдельный SSID `TV_VPN` с шлюзом `192.168.2.200`.
### 7. Настроить Home Assistant
Добавь в `configuration.yaml` содержимое [`ha-telegram-config.yaml`](ha-telegram-config.yaml):
```yaml
telegram_bot:
- platform: polling
api_key: "ВАШ_ТОКЕН"
proxy_url: http://192.168.2.200:8888
allowed_chat_ids:
- 126472752
```
Перезапусти HA.
### 8. Проверить
```bash
sudo bash check.sh
```
---
## Структура файлов
```
proxy-vm/
├── TZ.md # Техническое задание
├── README.md # Эта инструкция
├── params.env.example # Шаблон параметров
├── install.sh # Установка Xray + systemd
├── transparent-proxy.sh # Настройка tproxy для TV
├── config.json # Шаблон Xray конфига (справочник)
├── ha-telegram-config.yaml # Фрагмент конфига для Home Assistant
├── check.sh # Проверка работоспособности
└── KEENETIC.md # Инструкция для роутера Keenetic
```
---
## Troubleshooting
**Xray не запускается:**
```bash
journalctl -u xray -n 50 --no-pager
```
**Прокси не работает:**
```bash
curl -x http://127.0.0.1:8888 https://api.telegram.org
```
**Tproxy не перехватывает трафик:**
```bash
iptables -t mangle -L TV_TPROXY -nv # счётчики пакетов
ip rule show # правило для fwmark 1
ip route show table 100 # маршрут local default
```
**Обновить Xray:**
```bash
sudo bash install.sh # скрипт идемпотентен, установит новую версию
```
---
## Как работает tproxy
```
Телевизор отправляет пакет (например, к youtube.com:443)
▼ iptables mangle PREROUTING → TV_TPROXY
Пакет помечается fwmark=1 + tproxy redirect на порт 12345
▼ ip rule: fwmark=1 → table 100 → local default via lo
Xray (dokodemo-door tproxy) получает пакет как будто он локальный
▼ Xray routing: outbound vless-out
VLESS Reality тоннель → сервер → youtube.com
```
DNS трафик (UDP 53) из TV подсети перенаправляется на `1.1.1.1` через DNAT,
но поскольку `1.1.1.1` не является private IP, он тоже пойдёт через VLESS.