Настройка XHTTP-CDN и TCP-REALITY-VISION на одном VPS. #4232
Replies: 4 comments 2 replies
-
|
Почему просто не изпользовать два домена? Для своих целей достаточно какой-нибудь бесплатный субдомен |
Beta Was this translation helpful? Give feedback.
-
|
А можно пример конфига клиента? |
Beta Was this translation helpful? Give feedback.
-
|
ребята, есть примеры готовой настройки? |
Beta Was this translation helpful? Give feedback.
-
|
Сгенерировал в Claude специально гайд для неопытных. Настройка XHTTP-CDN + TCP-REALITY-VISION на VDSЧто получимДва независимых способа обхода блокировок на одном сервере:
Требования
Часть 1: Подготовка сервера1.1 Подключение к серверуssh root@IP_ВАШЕГО_VDS1.2 Установка Dockerф curl -fsSL https://get.docker.com | sh
docker --version1.3 Клонирование репозиторияcd ~
git clone https://github.com/netsentinel/xray_xhttp-cdn_with_tcp-reality_example.git
cd xray_xhttp-cdn_with_tcp-reality_exampleЧасть 2: Генерация ключей2.1 UUID (идентификатор клиента)cat /proc/sys/kernel/random/uuidПример: 2.2 Ключи REALITYdocker run --rm ghcr.io/xtls/xray-core x25519Результат: 2.3 Short IDopenssl rand -hex 8Пример: 2.4 Секретный path для XHTTPtr -dc 'A-Za-z0-9' < /dev/urandom | head -c 16; echoПример: Часть 3: Настройка конфигов3.1 Конфиг Xray (
|
| Поле | Значение |
|---|---|
| Type | VLESS |
| Address | IP вашего VDS |
| Port | 22537 (или ваш порт) |
| UUID | ваш UUID |
| Transport | none (TCP) |
| TLS | On |
| SNI | ikea.nl (или ваш SNI) |
| XTLS | xtls-rprx-vision |
| Public Key | ваш PublicKey |
| Short ID | ваш ShortID |
XHTTP
| Поле | Значение |
|---|---|
| Type | VLESS |
| Address | ваш-домен.xyz |
| Port | 22537 (или ваш порт) |
| UUID | ваш UUID |
| Transport | xhttp |
| Mode | stream-up |
| Path | ваш PATH |
| TLS | On |
| SNI | ваш-домен.xyz |
Часть 8: Проверка работы
- Подключитесь через клиент
- Откройте https://2ip.ru
- Должен показать IP вашего VDS (для REALITY) или IP Cloudflare (для XHTTP)
Устранение проблем
Контейнеры не запускаются
docker compose logs nginx
docker compose logs xrayНет подключения
- Проверьте открыт ли порт:
ufw status - Проверьте слушает ли порт:
ss -tlnp | grep ПОРТ - Проверьте логи xray:
docker compose logs xray
Медленная работа
Уберите DNS over HTTPS из конфига — используйте системный DNS.
Схема работы
REALITY (напрямую):
Клиент → VDS:22537 → nginx → xray:888 → Интернет
XHTTP (через CDN):
Клиент → Cloudflare → VDS:22537 → nginx → xray:777 → Интернет
Nginx определяет по IP источника: если Cloudflare → XHTTP, иначе → REALITY.
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
В данном материале будет рассмотрен пример сосуществования XHTTP-VLESS-TLS-over-CDN и TCP-VLESS-REALITY-VISION на одном VPS. В случае с CDN будет устанавливаться маскировочный вебсайт, для прямого доступа - reality. Таким образом, мы получаем два совершенно разных способа обхода блокировок на одном VPS. Пример составлен так, что на самом сервере не требуется практически ничего, кроме прописывания
docker compose up. Для работы данной конфигурации вам потребуется домен, который через cloudflare (далее - CF) указывает на ваш сервер, также требуется включить gRPC в настройках CF. В качестве маскировки для примера я буду применять filebrowser. Ниже представлена схема получаемого результата.Для начала рассмотрим compose.yml. В конце я предоставлю полный код, здесь же удалены некоторые части.
Теперь рассмотрим конфиг NGINX. Решение о том, откуда идет трафик, принимается на основании IP - они заранее известны для CF и прочих CDN. Поэтому создаётся файл с их перечнем -
nginx.cdn.conf.Переходим к основному конфигу. Поскольку vision порождает нечитаемый http трафик, мы не можем просто иметь
httpблок. Решение о роутинге принимается по IP вstreamблоке, т.е. имея обычный TCP-поток.Теперь конфиг xray. Тут, в целом, всё достаточно просто.
{ "log": { "error": "/var/log/xray/error.log", "loglevel": "debug" }, "dns": { "servers": [ "https://208.67.222.222/dns-query" ] }, "routing": { "domainStrategy": "IPOnDemand", "rules": [ { "inboundTag": [ "xhttp-cdn-tls", "tcp-vless-reality-vision" ], "outboundTag": "block", "protocol": [ "bittorrent" ] }, { "inboundTag": [ "xhttp-cdn-tls", "tcp-vless-reality-vision" ], "outboundTag": "block", "domain": [ "regexp:.*\\.(ru|рф|by|kz|ir|cn)$" ] }, { "inboundTag": [ "xhttp-cdn-tls", "tcp-vless-reality-vision" ], "outboundTag": "block", "ip": [ "geoip:ru", "geoip:by", "geoip:kz", "geoip:ir", "geoip:cn" ] }, { "inboundTag": [ "xhttp-cdn-tls", "tcp-vless-reality-vision" ], "outboundTag": "direct" } ] }, "outbounds": [ { "tag": "direct", "protocol": "freedom" }, { "tag": "block", "protocol": "blackhole" } ], "inbounds": [ { "tag": "xhttp-cdn-tls", "listen": "0.0.0.0", "port": 777, "protocol": "vless", "settings": { "decryption": "none", "clients": [ // cat /proc/sys/kernel/random/uuid { "id": "0358ea85-e758-4139-bddb-98d05265cf4d" } ] }, "streamSettings": { "network": "xhttp", "xhttpSettings": { "mode": "stream-up", // tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 16; echo "path": "qhq8AVkC3dOafYDz" }, "sniffing": { "enabled": true, "routeOnly": true, "destOverride": [ "quic", "http", "tls" ] } } }, { "tag": "tcp-vless-reality-vision", "listen": "0.0.0.0", "port": 888, "protocol": "vless", "settings": { "decryption": "none", "clients": [ { "flow": "xtls-rprx-vision", "id": "0358ea85-e758-4139-bddb-98d05265cf4d" } ] }, "streamSettings": { "network": "raw", "security": "reality", "realitySettings": { "dest": "ign.com:443", "serverNames": [ "ign.com" ], // xray x25519 // Private key: cPYRncL2nCQXkQNJhGDOazSmOlba_c3TC7L-GDegFTE // Public key: 3L7mhmQDgrGxL66Hnoclafw23GXw9noj7wSRwoZYal8 "privateKey": "cPYRncL2nCQXkQNJhGDOazSmOlba_c3TC7L-GDegFTE", // openssl rand -hex 8 "shortIds": [ "", "da1a33ae949fc0c6" ] }, "sniffing": { "enabled": true, "routeOnly": true, "destOverride": [ "quic", "http", "tls" ] } } } ] }Полный код примера можно найти здесь. Ещё раз, всё что вам нужно: сделать домен, который смотрит на ваш сервер; установить его на CF и включить gRPC в панели; клонировать упомянутый репозиторий, переопределить домен в nginx.conf и поднять контейнеры.
P.S. Вы можете использовать nerdctl вместо докера - команду
nerdctl compose upв директории сcompose.yml, для этого установите его:Beta Was this translation helpful? Give feedback.
All reactions