## Концепция - **Сервер A** (_РФ_):\ Точка входа, принимает трафик пользователей Telegram-прокси через **HAProxy** (порт `443\tcp`)\ и отправляет его через локальный клиент **Xray** (порт `10443\tcp`) на Сервер **B**.\ Порт для клиентов HAProxy — `443\tcp` - **Сервер B** (_условно Нидерланды_):\ Точка выхода, на нем работает **Xray-сервер** (принимает подключения точки входа) и **telemt**.\ На сервере должен быть неограниченный доступ до серверов Telegram.\ Порт для VLESS/REALITY (вход) — `443\tcp`\ Внутренний порт telemt (куда пробрасывается трафик) — `8443\tcp` Туннель работает по протоколу VLESS-XTLS-Reality (или VLESS/xhttp/reality). Оригинальный IP-адрес клиента сохраняется благодаря протоколу PROXYv2, который HAProxy добавляет перед отправкой в Xray, и который прозрачно доходит до telemt. --- ## Шаг 1. Настройка туннеля Xray (A <-> B) На обоих серверах необходимо установить **Xray-core** (рекомендуется версия 1.8.4 или новее). Официальный скрипт установки (выполнить на обоих серверах): ```bash bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install ``` ### Генерация ключей и параметров (выполнить один раз) Для конфигурации потребуются уникальные ID и ключи Xray Reality. Выполните на любом сервере с установленным Xray: 1. **UUID клиента:** ```bash xray uuid # Сохраните вывод (например: 12345678-abcd-1234-abcd-1234567890ab) — это ``` 2. **Пара ключей X25519 (Private & Public) для Reality:** ```bash xray x25519 # Сохраните Private key () и Public key () ``` 3. **Short ID (идентификатор Reality):** ```bash openssl rand -hex 16 # Сохраните вывод (например: 0123456789abcdef0123456789abcdef) — это ``` 4. **Random Path (путь для xhttp):** ```bash openssl rand -hex 8 # Сохраните вывод (например, abc123def456), чтобы заменить в конфигах ``` --- ### Конфигурация Сервера B (_Нидерланды_): Создаем или редактируем файл `/usr/local/etc/xray/config.json`. Этот Xray-сервер будет слушать порт `443` и прозрачно пропускать валидный Reality трафик дальше, а "замаскированный" трафик (например, если кто-то стучится в лоб веб-браузером) пойдет на `yahoo.com`. ```bash nano /usr/local/etc/xray/config.json ``` Содержимое файла: ```json { "log": { "loglevel": "error", "access": "none" }, "inbounds": [ { "tag": "vless-in", "port": 443, "protocol": "vless", "settings": { "clients": [ { "id": "" } ], "decryption": "none" }, "streamSettings": { "network": "xhttp", "security": "reality", "realitySettings": { "dest": "yahoo.com:443", "serverNames": [ "yahoo.com" ], "privateKey": "", "shortIds": [ "" ] }, "xhttpSettings": { "path": "/", "mode": "auto" } } } ], "outbounds": [ { "tag": "tunnel-to-telemt", "protocol": "freedom", "settings": { "destination": "127.0.0.1:8443" } } ], "routing": { "domainStrategy": "AsIs", "rules": [ { "type": "field", "inboundTag": [ "vless-in" ], "outboundTag": "tunnel-to-telemt" } ] } } ``` Открываем порт на фаерволе (если включен): ```bash sudo ufw allow 443/tcp ``` Перезапускаем Xray: ```bash sudo systemctl restart xray sudo systemctl enable xray ``` --- ### Конфигурация Сервера A (_РФ_): Аналогично, редактируем `/usr/local/etc/xray/config.json`. Здесь Xray выступает клиентом: он локально принимает трафик на порту `10443\tcp` (от HAProxy) и упаковывает его в Reality до Сервера B, прося тот доставить данные на *свой локальный* порт `127.0.0.1:8443` (именно там будет слушать telemt). ```bash nano /usr/local/etc/xray/config.json ``` Содержимое файла: ```json { "log": { "loglevel": "error", "access": "none" }, "inbounds": [ { "port": 10443, "listen": "127.0.0.1", "protocol": "dokodemo-door", "settings": { "address": "127.0.0.1", "port": 8443, "network": "tcp" } } ], "outbounds": [ { "tag": "vless-out", "protocol": "vless", "settings": { "vnext": [ { "address": "", "port": 443, "users": [ { "id": "", "encryption": "none" } ] } ] }, "streamSettings": { "network": "xhttp", "security": "reality", "realitySettings": { "serverName": "yahoo.com", "publicKey": "", "shortId": "", "spiderX": "/", "fingerprint": "chrome" }, "xhttpSettings": { "path": "/" } } } ] } ``` *Замените `` на внешний IP-адрес Сервера B.* Перезапускаем Xray: ```bash sudo systemctl restart xray sudo systemctl enable xray ``` --- ## Шаг 2. Настройка HAProxy на Сервере A (_РФ_) HAProxy будет висеть на публичном порту `443` Сервера A, принимать подключения от Telegram-клиентов, добавлять заголовок `PROXYv2` (чтобы пробросить реальный IP пользователя) и отправлять в локальный клиент Xray. Установка Docker аналогична [инструкции AmneziaWG варианта](./VPS_DOUBLE_HOP.ru.md). > [!WARNING] > Если запускаете не под `root` или возникают проблемы с правами на `443` порт: > ```bash > echo "net.ipv4.ip_unprivileged_port_start = 0" | sudo tee -a /etc/sysctl.conf && sudo sysctl -p > ``` #### Создаем папку для HAProxy: ```bash mkdir -p /opt/docker-compose/haproxy && cd $_ ``` #### Создаем файл `docker-compose.yaml` ```yaml services: haproxy: image: haproxy:latest container_name: haproxy restart: unless-stopped # user: "root" network_mode: "host" volumes: - ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro logging: driver: "json-file" options: max-size: "1m" max-file: "1" ``` #### Создаем файл конфигурации `haproxy.cfg` ```haproxy global log stdout format raw local0 maxconn 10000 defaults log global mode tcp option tcplog option clitcpka option srvtcpka timeout connect 5s timeout client 2h timeout server 2h timeout check 5s frontend tcp_in_443 bind *:443 maxconn 8000 option tcp-smart-accept default_backend telemt_nodes backend telemt_nodes option tcp-smart-connect server telemt_core 127.0.0.1:10443 check inter 5s rise 2 fall 3 maxconn 250000 send-proxy-v2 ``` >[!WARNING] >**Файл должен заканчиваться пустой строкой, иначе HAProxy не запустится!** #### Разрешаем порт `443\tcp` в фаерволе и запускаем контейнер ```bash sudo ufw allow 443/tcp docker compose up -d ``` --- ## Шаг 3. Установка и настройка telemt на Сервере B (_Нидерланды_) Установка telemt описана [в основной инструкции](../QUICK_START_GUIDE.ru.md). Отличие в том, что telemt должен слушать *внутренний* порт (так как 443 занят Xray-сервером), а также ожидать `PROXY` протокол из Xray туннеля. В конфиге `config.toml` прокси (на Сервере B) укажите: ```toml [server] port = 8443 listen_addr_ipv4 = "127.0.0.1" proxy_protocol = true [general.links] show = "*" public_host = "" public_port = 443 ``` - `port = 8443` и `listen_addr_ipv4 = "127.0.0.1"` означают, что telemt принимает подключения только изнутри (приходящие от локального Xray-процесса). - `proxy_protocol = true` заставляет telemt парсить PROXYv2-заголовок (который добавил HAProxy на Сервере A и протащил Xray), восстанавливая IP-адрес конечного пользователя (РФ). - В `public_host` укажите публичный IP-адрес или домен Сервера A, чтобы ссылки на подключение генерировались корректно. Перезапустите `telemt`, и клиенты смогут подключаться по выданным ссылкам.