Свой VPN на VPS позволяет управлять сервером и доступом к нему, подключать собственные устройства и выбирать хостера. В этом руководстве настроим Xray с VLESS, REALITY и Vision без веб-панели: подготовим Ubuntu, создадим конфигурацию и подключим телефон или компьютер.

Материал сверен с документацией проекта 23 октября 2026 года. Для воспроизводимости указан Xray-core v26.10.21. Это инструкция на основе первоисточников; мы не заявляем, что протестировали эту конфигурацию у всех российских операторов. Если читаете позже, проверьте релизы Xray и примечания к обновлениям.

Что будем настраивать

Xray — программа, которая принимает соединения ваших устройств и передаёт их трафик через сервер. VLESS отвечает за протокол подключения, REALITY — за защиту соединения, Vision — за режим обработки трафика. На устройстве клиент создаёт VPN-туннель или системный прокси. Здесь используем связку VLESS + RAW/TCP + REALITY + Vision.

Собственный сервер не становится невидимым. Интернет-провайдер видит его IP, а хостер обслуживает вашу виртуальную машину. Оплата криптовалютой сама по себе не обеспечивает анонимность. HTTPS остаётся необходимым для защиты содержимого соединений с сайтами.

Главное ограничение: корректный конфиг не гарантирует доступность адреса. Если сеть перестаёт пропускать соединения к IP, изменение UUID или переустановка Xray проблему адреса не исправят.

Почему доступность меняется

В исследовании hyperion_cs за июнь 2026 года описаны наблюдения фильтрации с учётом сети назначения, TLS-отпечатка и поведения соединений. В обсуждении net4people осенью 2026 года участники сообщают о блокировках отдельных IP, в том числе у самостоятельно настроенных серверов. Это наблюдения конкретных исследователей и пользователей, а не доказательство одинаковой фильтрации по всей России.

Практический вывод: проверяйте свою домашнюю и мобильную сеть отдельно. Сервер, доступный у одного оператора, может не работать у другого. Не выбирайте провайдера только по обещанию «защиты от блокировок» и не оплачивайте длительный период до проверки подключения.

Для режима, когда оператор разрешает только ограниченный набор адресов, эта инструкция не даёт универсального решения. Amnezia также отдельно рассматривает ограничения self-hosted при белых списках. Ни выбор SNI, ни порт 443 не превращают произвольный VPS в разрешённый ресурс.

Как выбрать VPS

Для первого личного сервера разумная отправная точка — 1 vCPU, 1 ГБ RAM и около 10 ГБ диска. Это ориентир, а не обещание определённой скорости: важны канал, загрузка узла и число устройств. Выбирайте Ubuntu 24.04 LTS и виртуальную машину с root-доступом.

До оплаты проверьте:

  • Выделенный публичный IPv4 входит в стоимость. Тарифы IPv6 only для этого сценария исключаем: доступность IPv6 в вашей сети может отличаться.
  • Хостер разрешает личный VPN и исходящий трафик нужных приложений.
  • Входящий TCP-порт 443 доступен и не занят службой провайдера.
  • Понятны лимит трафика, скорость порта и стоимость превышения.
  • Есть консоль восстановления, возможность переустановки ОС и понятные условия замены IP.
  • Можно получить тестовый адрес или оплатить короткий период.

Страна влияет на задержку и доступность ресурсов, но сама по себе не определяет устойчивость к блокировкам. Регистрация без KYC, оплата криптовалютой и внимание хостера к приватности — дополнительные критерии. Они не заменяют проверку сети и условий обслуживания.

Проверяем адрес до установки

Попросите тестовый IP выбранной локации, затем повторите проверку с фактическим адресом выданного VPS. Успешный тест соседнего сервера не гарантирует доступность вашего.

Сначала подключитесь по SSH. Пример ниже выполняется на вашем компьютере; замените адрес и имя пользователя данными из панели хостера:

ssh root@YOUR_SERVER_IPV4

При первом входе сверяйте отпечаток SSH-ключа сервера через консоль или панель провайдера, если она его показывает. Не игнорируйте предупреждение о смене ключа на уже знакомом сервере без выяснения причины.

Повторите подключение через другую сеть, например раздав мобильный интернет. Отсутствие ответа на ping ничего не доказывает: ICMP может быть отключён. Проверка TCP-порта имеет смысл, когда на нём уже работает служба. Позже проверим порт 443 после запуска Xray.

Если SSH недоступен, откройте консоль VPS у хостера и проверьте состояние машины, адрес и firewall. Пока базовая связность не восстановлена, устанавливать VPN бессмысленно. Отсутствие IP в публичном реестре блокировок также не подтверждает доступность из конкретной сети.

Готовим Ubuntu 24.04

Дальнейшие серверные команды выполняются от root в Bash на новом VPS с Ubuntu 24.04 LTS. Если вошли обычным пользователем, сначала выполните sudo -i. На машине с сайтами или другими сервисами не применяйте эти команды без учёта их конфигурации.

apt update
apt upgrade -y
apt install -y curl ca-certificates openssl unzip ufw nano less
timedatectl set-ntp true
timedatectl status
ss -lntp

Если обновление требует перезагрузки, выполните её сейчас и войдите снова. Порт 443 должен быть свободен: не останавливайте неизвестный процесс вслепую. Для существующего HTTPS-сайта потребуется другая схема размещения.

Защищаем SSH и открываем нужный порт

Добавьте свой публичный SSH-ключ и убедитесь, что вход с ним работает во втором окне терминала. Приватный ключ остаётся на вашем компьютере. Не отключайте парольный вход до успешной проверки ключа и консоли восстановления.

Следующий пример подходит только для нового сервера, где SSH слушает стандартный TCP-порт 22. Если у вас другой порт, сначала разрешите именно его. Оставьте текущую SSH-сессию открытой:

ufw allow 22/tcp
ufw allow 443/tcp
ufw default deny incoming
ufw default allow outgoing
ufw enable
ufw status verbose

После включения снова проверьте вход в отдельном окне. Если у хостера есть внешний firewall или security group, разрешите там SSH и TCP 443 тоже. Для данной конфигурации входящий UDP 443 не нужен. Не открывайте диапазоны портов «на всякий случай».

Недорогие VPS с IPv4 для личного VPN

Ниже — до 20 самых дешёвых подходящих тарифов из нашего каталога. Виджет получает актуальные данные из БД и исключает планы, отмеченные как IPv6 only. Сверьте наличие публичного IPv4 и итоговую стоимость на сайте хостера перед оплатой.

Наличие тарифа в каталоге не означает, что его IP проверен из вашей российской сети. До длительной оплаты проверьте доступность адреса и возможность его замены.

Недорогие VPS с IPv4 для личного VPN

До 20 самых дешёвых тарифов каталога по месячной цене в USD. IPv6-only тарифы исключены; доступность из вашей сети и правила хостера проверяйте отдельно.

20 тарифов · Цены в USD за месяц

Провайдер и тарифЛокацияРесурсыДискОсобенностиЦена / месяц

Spark

Локация
  • Соединенные Штаты
  • Великобритания
Ресурсы

1 vCPU · 0.5 ГБ RAM

Диск

20 ГБ SSD

2,66 $в месяц
Тариф у провайдера

SSD VPS 1GB

Локация
  • Соединенные Штаты
  • Германия
Ресурсы

1 vCPU · 1 ГБ RAM

Диск

55 ГБ SSD

3,00 $в месяц
Тариф у провайдера

Linux-10-1C-1M

Локация
  • Нидерланды
  • Польша
Ресурсы

1 vCPU · 1 ГБ RAM

Диск

10 ГБ NVMe

3,37 $в месяц
Тариф у провайдера

Nano

Локация
  • Соединенные Штаты
  • Великобритания
Ресурсы

1 vCPU · 1 ГБ RAM

Диск

25 ГБ SSD

3,46 $в месяц
Тариф у провайдера

vc2-1c-0.5gb

Локация
  • Соединенные Штаты
Ресурсы

1 vCPU · 0.5 ГБ RAM

Диск

10 ГБ SSD

Особенности
3,50 $в месяц
Тариф у провайдера

Cloud VPS 1 Gen 2

Локация
  • Литва
  • Нидерланды
Ресурсы

1 vCPU · 1 ГБ RAM

Диск

20 ГБ SSD

3,51 $в месяц
Тариф у провайдера

bKVM 512

Локация
  • Кипр
  • Франция
Ресурсы

1 vCPU · 0.5 ГБ RAM

Диск

6 ГБ HDD

3,67 $в месяц
Тариф у провайдера

Vultr vc2-1c-0.5gb-v6

Локация
  • Соединенные Штаты
Ресурсы

1 vCPU · 0.5 ГБ RAM

Диск

10 ГБ Other

Особенности
4,00 $в месяц
Тариф у провайдера
Выберите предложения для сравнения

Цены пересчитываются из валюты провайдера и обновляются вместе с каталогом. Уточняйте актуальную стоимость и доступность на сайте провайдера.

Устанавливаем Xray

Используем официальный Xray-install. Сначала скачиваем скрипт в файл, затем просматриваем и запускаем. Не используйте копии установщика из случайных каналов.

curl -fL https://raw.githubusercontent.com/XTLS/Xray-install/main/install-release.sh -o /root/xray-install.sh
less /root/xray-install.sh
bash /root/xray-install.sh install --version v26.10.21
/usr/local/bin/xray version
systemctl cat xray

Для выхода из less нажмите q. Убедитесь, что скачивание завершилось без ошибки и версия соответствует выбранному релизу. Установщик создаёт службу systemd; текущая версия скрипта запускает её от пользователя xray. Проверьте это в выводе systemctl cat xray: ниже права файла рассчитаны на группу xray.

Выбираем цель REALITY

REALITY использует TLS-рукопожатие целевого сайта. Адрес target задает, куда Xray передает соединение, а serverNames содержит допустимые SNI для клиента. Для базовой схемы нужен HTTPS-сайт с TLS 1.3 и HTTP/2, доступный с VPS. Покупать собственный домен для использования сторонней цели не обязательно.

В руководствах и готовых конфигурациях встречаются, например:

  • dl.google.com — упоминается в официальном README REALITY как пример особенностей TLS-рукопожатия. Это кандидат для проверки, а не гарантия работы из вашей сети.
  • www.microsoft.com — распространенный пример из старых инструкций. В обсуждении проекта разбиралась ошибка работы с этой целью в старой версии v26.3.27. Это исторический пример, а не утверждение о несовместимости с актуальным релизом.
  • www.apple.com — еще один встречающийся в конфигурациях пример. Не выбирайте его автоматически: пригодность зависит от актуального поведения сайта, версии Xray и вашей сети.

Это примеры имен, а не список рекомендуемых или проверенных нами доменов для России. Сервисы меняют сертификаты, TLS-настройки и адреса. Оценивайте конкретный поддомен: example.com и www.example.com могут вести себя по-разному. Проверяйте поддержку TLS 1.3 и h2, соответствие имени сертификату и отсутствие перенаправления на другой домен.

В документации REALITY предпочтительной названа цель из той же автономной системы, что и сервер. Известное имя на IP постороннего хостера само по себе не делает соединение обычным трафиком к этому сервису. Неавторизованные подключения пересылаются к target; выбор публичного CDN может превратить VPS в доступный посторонним ретранслятор.

Проверьте выбранную цель, заменив YOUR_TARGET_DOMAIN настоящим доменом:

/usr/local/bin/xray tls ping YOUR_TARGET_DOMAIN
openssl s_client -connect YOUR_TARGET_DOMAIN:443 -servername YOUR_TARGET_DOMAIN -tls1_3 -alpn h2 </dev/null

Проверьте успешное TLS-соединение, согласование h2 и сертификат для выбранного имени. Проверка с VPS подтверждает свойства цели, но не доступность вашего VPN из России: подключение клиента нужно проверять отдельно. В базовой схеме для dl.google.com значение target было бы dl.google.com:443, а имя в serverNames и SNI клиента — dl.google.com. Эти значения должны быть согласованы.

Когда использовать собственный домен

Собственный домен дает контроль над сайтом и сертификатом. Здесь важно различать два варианта.

Если просто направить A-запись своего домена на VPS и указать это имя в поле Address клиента, домен станет адресом подключения. Цель REALITY и SNI от этого не изменятся. Это удобно при смене IP, но не устраняет блокировку адреса и не создает HTTPS-сайт автоматически.

Для использования собственного сайта как цели REALITY потребуется отдельная настройка HTTPS, которую также называют self-steal:

  • Возьмите домен или поддомен, например site.example.com, и направьте A-запись на IPv4 вашего VPS. Для этой прямой схемы используйте DNS без проксирования через CDN. AAAA-запись добавляйте только при настроенном и доступном IPv6.
  • Разместите обычную страницу и настройте для нее действительный сертификат от доверенного центра сертификации, TLS 1.3 и HTTP/2. Пример HTTPS-настройки есть в документации Nginx. Самоподписанный сертификат и отключение проверки сертификата не являются заменой этой настройки.
  • На том же VPS HTTPS-сайт можно слушать на 127.0.0.1:8443, оставив внешний TCP-порт 443 за Xray. В таком варианте target будет 127.0.0.1:8443, а serverNames и SNI клиента — site.example.com. Имя в сертификате сайта должно соответствовать этому домену.
  • Не указывайте target на публичный IP этого же VPS и порт 443, который уже слушает Xray: получится зацикливание соединений. В базовом конфиге ниже для локальной цели нужно изменить target отдельно от serverNames, а не заменять все заполнители одной строкой.
  • Настройте автоматическое продление сертификата и его загрузку веб-сервером после обновления. Если используете HTTP-01 для выпуска или продления, учитывайте доступность порта 80; для DNS-01 нужна настройка проверки через DNS.
  • Сначала проверьте локальный HTTPS-сайт с нужным SNI, затем конфигурацию Xray и открытие сайта через внешний порт 443 обычным браузером. После изменения SNI обновите клиентские профили. В этой инструкции Xray работает как служба systemd; внутри Docker адрес 127.0.0.1 относится к самому контейнеру, поэтому схему доступа к веб-серверу нужно настраивать отдельно.

Свой сайт не делает сервер неуязвимым для блокировок. Он позволяет управлять целью REALITY, но оператор по-прежнему видит IP назначения. Не размещайте на таком домене админку, ссылки подключения, UUID и другие секреты. Если адрес или подсеть недоступны, ни сторонний SNI, ни собственный домен сами по себе это не исправят.

Генерируем доступы

/usr/local/bin/xray uuid
/usr/local/bin/xray x25519
openssl rand -hex 8

Сохраните UUID, приватный ключ, публичную часть ключа и short ID в менеджере паролей. В v26.10.21 генератор называет публичную часть Password (PublicKey); Hash32 для этого профиля не нужен. Это подтверждается исходником команды генерации.

PrivateKey нужен только серверу. Публичная часть нужна клиенту. Не публикуйте конфигурацию, ссылку подключения или QR-код: они позволяют использовать ваш сервер.

Создаём конфигурацию

Откройте /usr/local/etc/xray/config.json в nano и замените содержимое следующим JSON. Подставьте собственные значения вместо YOUR_UUID, YOUR_PRIVATE_KEY, YOUR_SHORT_ID и YOUR_TARGET_DOMAIN. Для варианта со сторонней целью одинаковый домен укажите в обоих местах. Для своего локального сайта используйте различающиеся target и serverNames, как описано выше.

{
  "log": { "loglevel": "warning" },
  "inbounds": [
    {
      "listen": "0.0.0.0",
      "port": 443,
      "protocol": "vless",
      "settings": {
        "users": [
          { "id": "YOUR_UUID", "flow": "xtls-rprx-vision" }
        ],
        "decryption": "none"
      },
      "streamSettings": {
        "network": "raw",
        "security": "reality",
        "realitySettings": {
          "show": false,
          "target": "YOUR_TARGET_DOMAIN:443",
          "xver": 0,
          "serverNames": ["YOUR_TARGET_DOMAIN"],
          "privateKey": "YOUR_PRIVATE_KEY",
          "shortIds": ["YOUR_SHORT_ID"]
        }
      }
    }
  ],
  "outbounds": [
    { "protocol": "freedom", "tag": "direct" },
    { "protocol": "blackhole", "tag": "block" }
  ],
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "rules": [
      { "type": "field", "ip": ["geoip:private"], "outboundTag": "block" }
    ]
  }
}

Правило geoip:private запрещает клиентам обращения к локальным и частным адресам через сервер; стандартный установщик загружает необходимую базу geoip. Оно не является списком российских сайтов и не настраивает раздельное туннелирование.

Сохраните файл: Ctrl+O, Enter, затем Ctrl+X. Используем актуальные имена users, target и raw. В старых примерах встречаются clients, dest и tcp: не смешивайте пример с настройками другого транспорта. Основа схемы приведена в официальном репозитории примеров Xray.

Установите права и проверьте конфигурацию до запуска:

chown root:xray /usr/local/etc/xray/config.json
chmod 640 /usr/local/etc/xray/config.json
runuser -u xray -- /usr/local/bin/xray run -test -config /usr/local/etc/xray/config.json

При ошибке не переходите дальше. Исправьте указанное поле или синтаксис JSON и повторите проверку. Она подтверждает чтение и корректность конфигурации, но не доступность VPN извне.

systemctl enable xray
systemctl restart xray
systemctl status xray --no-pager
journalctl -u xray -n 50 --no-pager
ss -lntp 'sport = :443'

Ожидаем работающую службу и прослушивание TCP 443. Если порт занят или служба завершилась, сначала исправьте причину из журнала.

Подключаем устройства

Для Android можно использовать v2rayNG, для Windows и macOS — v2rayN. Для iOS есть Happ, ссылки на магазины опубликованы у разработчика. Загружайте клиенты из официальных источников и выбирайте актуальную версию с поддержкой REALITY и Vision. Названия полей зависят от приложения и версии.

Создайте профиль VLESS вручную:

  • Address / Server: публичный IPv4 вашего VPS, не домен цели REALITY.
  • Port: 443.
  • UUID / ID: ваш YOUR_UUID.
  • Encryption: none.
  • Flow: xtls-rprx-vision.
  • Transport: TCP / RAW, без HTTP-заголовка.
  • Security: REALITY.
  • SNI / Server name: ваш YOUR_TARGET_DOMAIN.
  • Public key / Password: значение Password (PublicKey) из генератора, не PrivateKey.
  • Short ID: ваш YOUR_SHORT_ID.
  • Fingerprint: chrome как исходный вариант, без заявления, что он подходит любой сети.

Альтернативно замените все заглавные заполнители в этой ссылке и импортируйте её из буфера обмена:

vless://YOUR_UUID@YOUR_SERVER_IPV4:443?encryption=none&flow=xtls-rprx-vision&security=reality&sni=YOUR_TARGET_DOMAIN&fp=chrome&pbk=YOUR_PUBLIC_KEY&sid=YOUR_SHORT_ID&type=tcp&headerType=none#My-Xray

Для приложений на телефоне включите VPN-режим и разрешите создание туннеля. На компьютере системный прокси охватывает только приложения, которые его учитывают; для общего трафика используйте TUN-режим, если клиент его поддерживает. Не включайте одновременно несколько VPN-приложений при первой проверке.

Проверяем трафик, DNS и IPv6

Сначала запишите внешний IP без туннеля. После подключения он должен смениться на адрес выхода VPS для трафика, направленного через туннель. Проверьте несколько сайтов и отдельное приложение, затем повторите тест через мобильную сеть.

Проверьте DNS в клиенте: запросы сайтов, которые должны идти через VPN, не должны уходить напрямую к провайдеру. Открытие одного сайта не подтверждает правильную маршрутизацию всех запросов. Отдельно проверьте IPv6: если клиент не туннелирует его, выберите поддерживаемую клиентом блокировку прямого IPv6 или полное туннелирование. Наличие IPv4 на сервере не предотвращает утечку IPv6 с устройства.

Затем остановите соединение и проверьте поведение приложений. Если нужен запрет прямого выхода при обрыве, настройте kill switch средствами клиента или ОС и проверьте его отдельно. Системный прокси не заменяет такую защиту.

После базовой проверки можно включить раздельную маршрутизацию: локальные ресурсы и нужные российские сервисы напрямую, остальные — через VPN. При правке правил повторяйте проверки DNS и внешнего IP. Начальная конфигурация сервера не содержит готового списка исключений для ваших приложений.

Если соединение не работает

Порт недоступен

На сервере проверьте systemctl status xray, ss и оба firewall. С компьютера с macOS или Linux выполните nc -vz -w 5 YOUR_SERVER_IPV4 443; в PowerShell — Test-NetConnection YOUR_SERVER_IPV4 -Port 443.

Если служба слушает порт, но он доступен только из некоторых сетей, возможны ограничения маршрута или фильтрация. Это ещё не доказывает причину: сравните сети и обратитесь к хостеру. Если пропали и SSH, и VPN, воспользуйтесь консолью VPS, прежде чем менять конфигурацию.

TCP проходит, но клиент не подключается

Сверьте UUID, публичный ключ, short ID, SNI, порт, REALITY и Vision. Проверьте доступность цели с VPS. Посмотрите журнал сервера и клиента, скрыв секреты перед передачей кому-либо. Обновите устаревший клиент. Успешное TCP-соединение не означает успешную аутентификацию REALITY.

Если профиль работает через одну сеть, но не через другую, проверьте настройку TLS fingerprint клиента. Например, можно сравнить chrome с firefox, меняя только этот параметр. Это диагностическая попытка, а не универсальный способ: результаты зависят от сети и меняются со временем. После неудачных попыток дайте соединению паузу; непрерывные переподключения мешают отличить временную фильтрацию от ошибки настроек.

Подключение есть, страницы зависают

Проверьте DNS, доступность обычных HTTPS-сайтов непосредственно с VPS и лимиты трафика. Если проблема возникает лишь в одной российской сети или после некоторого объёма передачи, сравните результаты из другой сети. Не объявляйте любой таймаут блокировкой IP и не меняйте несколько параметров одновременно: так теряется возможность установить причину.

Когда рассматривать XHTTP и замену IP

XHTTP — другой транспорт Xray. Его стоит изучать как отдельную резервную конфигурацию, если базовая связка не подходит вашей сети. Это не переключатель, который достаточно включить только на сервере: нужны совместимый клиент и согласованные настройки. Vision из текущего примера нельзя автоматически переносить в другую схему.

CDN также не гарантирует доступность. Cloudflare документировала ограничения передачи данных из российских сетей в 2025 году. Проверяйте конкретную цепочку соединений, а не только способность открыть главную страницу CDN.

Если подтверждена проблема с адресом, обсудите с хостером замену IP. Новый адрес из той же подсети может попасть под те же ограничения. Для резерва полезнее другой провайдер или сеть, чем второй сервер с соседним IP. После замены обновите адрес в клиентах; при переносе на новую машину заново защитите SSH, настройте firewall и проверьте доступы.

Поддерживаем сервер

Храните резервную копию конфигурации в защищённом месте. Перед обновлением читайте изменения релиза, сохраняйте рабочую версию и проверяйте JSON. Обновляйте ОС и клиенты, контролируйте дисковое пространство и расход трафика. Журнал ошибок может содержать адреса и другие чувствительные сведения: не публикуйте его целиком.

Для каждого пользователя создавайте отдельный UUID в массиве users. Чтобы отозвать доступ, удалите нужную запись, выполните проверку конфига и перезапустите службу. При утечке приватного ключа REALITY создайте новую пару и обновите клиентов. Не раздавайте один публичный профиль неограниченному кругу людей.

Рабочий личный VPN — это доступный адрес, согласованная конфигурация, проверенная маршрутизация и план восстановления. Сохраните локальную копию этой инструкции и профиля, чтобы потеря подключения не лишила вас доступа к настройкам.