Свой 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 проверен из вашей российской сети. До длительной оплаты проверьте доступность адреса и возможность его замены.
Устанавливаем 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 — это доступный адрес, согласованная конфигурация, проверенная маршрутизация и план восстановления. Сохраните локальную копию этой инструкции и профиля, чтобы потеря подключения не лишила вас доступа к настройкам.