H1

H1Cloud VLESS · Общий гайд

Установка и настройка VLESS-сервера на Pterodactyl с нуля.

guide · ru

Полный гайд по установке и настройке

Скрипт скачивает Xray, генерит ключи Reality, поднимает inbound'ы WS+TLS и Reality+Vision, опционально стартует HTTP API и subscription-сервер. Всё работает на Pterodactyl без рута.

1. Что нужно

Pterodactyl-сервер с bash/python и доменом, привязанным через Pterodactyl Domains.

bash В любом bash-egg'е (например, generic Linux).
curl Нужен чтобы скачать Xray и сам скрипт.
python3 Используется для JSON, генерации ключей, API/sub серверов.
домен Поддомен подключённый через Pterodactyl Domains (TLS-фронт для WS).
Без рута. Скрипт не использует sudo и не пишет в системные пути. Биндимся только на порты, выделенные птеродактилем твоему серверу.

2. Установка

Одна команда в консоль птеродактиля.

  1. 1

    Скачай и запусти

    В консоли сервера выполни:

    curl -fsSL https://raw.githubusercontent.com/h1gurodev/h1cloud-vless/refs/heads/main/main.sh -o start.sh && chmod +x start.sh && bash start.sh

    Скрипт скачает Xray-linux-64.zip, распакует xray, сгенерит ключи Reality (x25519) и подготовит конфиг.

  2. 2

    Сделай авто-запуск

    При запуске сервера нажми 3 и введи:

    bash start.sh
    END

    Теперь после рестарта сервера всё поднимется само.

3. Первый запуск и домен

При первом старте скрипт попросит ввести домен.

  1. 1

    Привяжи домен в Pterodactyl Domains

    В панели Pterodactyl зайди в раздел Domains и привяжи поддомен к своему серверу (это даст тебе TLS-сертификат и проксирование на твой порт).

  2. 2

    Введи домен в консоли

    При первом запуске скрипт выведет:

    Enter domain connected in Pterodactyl Domains:

    Введи домен без https://, например vpn.example.com. Домен сохранится в domain.txt.

  3. 3

    Проверь, что всё поднялось

    После запуска ты увидишь шапку h1cloud vless is ready с портами и доменом. Если что-то не запустилось — ищи ошибку выше.

Поменять домен потом:
vpn domain vpn.example.com

4. Команды vpn

Печатай прямо в консоли сервера. Можно также запускать как ./main.sh vpn ....

CREATE vpn add NAME DAYS

Создать клиента на DAYS дней. Сразу выведет VLESS-ссылки (ws + reality + subscription, если активна).

vpn add test 30
LIST vpn list

Список активных клиентов с UUID, датой окончания и оставшимся временем.

INFO vpn info NAME

Полная инфа по клиенту + готовые ссылки.

LINK vpn link NAME

Только ссылки клиента: ws, reality, subscription.

RENEW vpn renew NAME DAYS

Продлить клиента на DAYS дней (прибавляется к текущей дате истечения).

vpn renew test 15
DEL vpn del NAME

Удалить клиента.

KEYS vpn keys

Вывести key.txt: все клиенты с ссылками + последние логи.

LOGS vpn logs [COUNT]

Показать последние COUNT (по умолчанию 50) строк лога действий.

DOMAIN vpn domain DOMAIN

Сменить публичный домен. После смены все ссылки пересоберутся.

REALITY vpn reality PORT [PUBLIC_PORT] [SNI] [DEST]

Настройка Reality. PORT — локальный порт xray, PUBLIC_PORT — внешний, SNI — домен-маска (по умолчанию www.microsoft.com).

vpn reality 8443 8443 www.microsoft.com
RESTART vpn restart

Перезапустить xray (пересобрать конфиг). Делается автоматически при add/del/renew.

STOP vpn stop

Остановить сервер (xray + API + sub).

5. HTTP API и Subscription

Опциональные сервисы. Можно поднять оба, или только один, или ни одного.

HTTP API

Поднимает HTTP-сервер для управления клиентами через JSON.

vpn api 25626
vpn api token
vpn api status
vpn api stop

Подробное описание методов — в API Docs.

Subscription

HTTP-сервер для клиентских приложений (v2rayN, NekoBox и т.д.). Отдаёт base64-список ссылок по токену.

vpn sub 25627
vpn sub token
vpn sub status
vpn sub stop

URL: http://DOMAIN:PORT/sub/NAME?token=TOKEN

Порты в Pterodactyl. Сначала добавь нужные порты в аллокации сервера в панели, только потом запускай vpn api PORT / vpn sub PORT на этих портах.

6. Reality vs WS — что выбрать

В клиенте у тебя будет 2 ссылки. Любую можно использовать.

WS + TLS

WebSocket поверх TLS, который терминирует Pterodactyl Domains. Удобно тем, что использует порт 443 и неотличим от обычного HTTPS-трафика к твоему домену.

  • Порт — внешний (обычно 443)
  • Путь /xray
  • Зависит от Pterodactyl Domains

Reality + Vision

Современный TLS-стелс от Xray. Маскируется под чужой домен (по умолчанию www.microsoft.com), не требует своего TLS-сертификата.

  • Свой отдельный TCP-порт
  • Flow xtls-rprx-vision
  • Лучше для обхода блокировок

7. Файлы в рабочей папке

Скрипт хранит всё в текущей папке сервера. Бэкап делается копированием этих файлов.

users.jsonСписок клиентов (имя, UUID, expires_at).
key.txtСгенерированные VLESS-ссылки для всех клиентов.
logs.txtЖурнал действий (create/delete/renew/api).
api_token.txtТокен для HTTP API. Не публикуй.
sub_token.txtТокен для subscription. Не публикуй.
reality_private_key.txtПриватный ключ Reality. Не публикуй.
reality_public_key.txtПубличный ключ Reality (pbk в ссылке).
reality_short_id.txtReality short id (sid в ссылке).
domain.txtПубличный домен.
config.jsonСгенерированный конфиг Xray.

8. Частые ошибки

Если что-то не работает — начни отсюда.

ERR cannot generate reality x25519 keys

Xray не смог сгенерить ключи. Обычно — устаревший парсер на новом формате (см. XTLS/Xray-core#5159). Скрипт уже умеет три формата: Private key:, PrivateKey: + Password:, и Password (PublicKey):. Если ошибка всё ещё — обнови скрипт до последней версии.

ERR пустые строки и текст без \n не видно в консоли

Известный баг Pterodactyl wings (panel#4782): строки без содержимого дропаются. В скрипте всё уже починено через blank() + PYTHONUNBUFFERED=1 + python3 -u.

ERR xray failed to start

Чаще всего — конфликт портов: WS и Reality на одном порту, или порт уже занят. Проверь SERVER_PORT и REALITY_PORT. Команды:

vpn reality 8443
vpn restart
ERR клиент не подключается через WS

WS+TLS требует, чтобы домен был привязан в Pterodactyl Domains (тогда панель терминирует TLS на 443 и проксирует на твой порт). Без Domains используй только Reality.

ERR api failed to start

Порт не выделен в Pterodactyl или уже занят. Добавь allocation в панели и запусти заново:

vpn api 25626