Собственный VPN с открытым исходным кодом

Поделитесь безопасным интернетом с теми, кто вам дорог

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

Страница подключения — то, что получает каждый человек
Вот что получают близкие — открыть страницу подключения · открыть веб-панель

Как это работает

Две команды — и VPN работает

Понадобится VPS на Debian или Ubuntu (хватит самого простого за $5 в месяц) и терминал на вашем компьютере. Остальное Meridian настроит сам.

Полная настройка через meridian setup от начала до конца за 4 минуты. Скачать видео
Шаг 1 — Установка
curl -sSf https://getmeridian.org/install.sh | bash
затем
Шаг 2 — Настройка
meridian setup

Мастер задаст несколько простых вопросов, покажет итоговый план и настроит сервер. Чтобы развернуть один сервер без вопросов, выполните meridian deploy IP — см. справочник CLI.

Вывод команды развёртывания Meridian в терминале

Что происходит под капотом

  1. Устанавливает сервис управления и веб-панель вместе с агентом узла, который управляет Xray, — без Docker и сторонних панелей

  2. Генерирует ключевую пару x25519 — уникальные криптографические ключи для аутентификации Reality

  3. Защищает сервер — UFW открывает только ваш порт SSH, 443 (TCP и UDP) и 80 для выпуска сертификатов; вход по SSH только по ключу, fail2ban и алгоритм управления перегрузкой BBR

  4. Настраивает VLESS+Reality на порту TCP 443, где при любой внешней проверке виден сертификат настоящего сайта

  5. Добавляет XHTTP и Hysteria2 — XHTTP через nginx на том же порту и Hysteria2 на UDP 443 с обфускацией salamander

  6. Выдаёт QR-коды и страницу подключения — после проверки того, что через новую подписку проходит реальный трафик

Команду безопасно запускать повторно: ключи и учётные данные сохранятся, прерванная установка продолжится с места остановки, а работающий сервер обновится без простоев.

Посмотрите

Что получаете вы и ваши близкие

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

Страница подключения

Каждый человек открывает свою ссылку на подписку в браузере: выбирает платформу и приложение, добавляет подключение одним нажатием или по QR-коду, видит свой трафик и срок доступа, а также простые подсказки на четырёх языках.

Открыть страницу подключения

Веб-панель

Команда meridian panel открывает вашу панель управления (консоль владельца). Добавляйте людей, делитесь ссылками и QR-кодами, задавайте сроки доступа, лимиты трафика и устройств, ведите личные заметки и метки, публикуйте общие уведомления и выпускайте API-токены.

Открыть веб-панель

Конструктор команд

Соберите свою команду

Выберите нужные параметры и скопируйте готовую команду: развёртывание, промежуточные серверы, проверка состояния, подбор сайтов для маскировки, диагностика и удаление.

Разворачивает Reality, XHTTP и Hysteria2 на одном сервере. Настраивает сервис управления, веб-панель, nginx, файрвол и TLS.

IP-адрес сервера, имя сохранённого сервера или «local» для запуска на самом сервере. Если оставить пустым, команда спросит адрес при запуске.
По умолчанию — сохранённый пользователь или root. Для другого пользователя нужен sudo без пароля.
По умолчанию — сохранённый порт или 22.
Необязательно. Переносит XHTTP на ваш домен и добавляет WSS; оба способа могут работать через CDN Cloudflare.
Сайт, под который маскируется Reality. Оставьте auto, чтобы команда сама подобрала рабочий сайт, или найдите его на вкладке «Подбор SNI».
Имя первого пользователя. По умолчанию — «default».
Название, которое отображается на страницах подключения.
Эмодзи или ссылка на картинку для страницы подключения.
Цветовая тема страницы подключения.
Команда
meridian deploy

Настраиваете впервые? Запустите meridian setup — пошаговый мастер сам спросит всё необходимое.

Технология

Как обеспечивается устойчивость к блокировкам

Трафик OpenVPN и WireGuard легко вычислить по характерным сигнатурам. Соединение VLESS+Reality практически неотличимо от обычного посещения сайта по HTTPS.

Глубокий анализ пакетов (DPI)

Системы DPI анализируют структуру пакетов, чтобы находить и блокировать VPN- и прокси-протоколы. Рукопожатия OpenVPN и WireGuard распознаются с первых же байтов.

VLESS+Reality работает внутри стандартного соединения TLS 1.3 на порту 443, поэтому для DPI он выглядит как обычный HTTPS-трафик к сайту маскировки. Кроме того, на каждом сервере настраиваются XHTTP и Hysteria2: если один способ заблокируют, остальные продолжат работать.

Активные проверки (Active probing)

Системы цензуры сами подключаются к подозрительным серверам и проверяют их ответы. Если сервер ведёт себя не так, как сайт, за который он себя выдаёт, IP-адрес блокируют.

Reality использует TLS-рукопожатие настоящего сайта — по умолчанию сайта из той же сети, где расположен ваш сервер, или www.google.com. Любой запрос без вашего ключа прозрачно перенаправляется на этот сайт и получает его подлинный сертификат. VPN-туннель открывается только для клиентов с вашим ключом.

Имитация TLS-отпечатков браузеров

При установке TLS-соединения клиент отправляет пакет Client Hello с характерным набором параметров (отпечатком). Если отпечаток приложения отличается от настоящего браузера, соединение могут заблокировать.

Клиентские приложения используют библиотеку uTLS и повторяют Client Hello браузера Chrome. Для каждого подключения Reality и XHTTP Meridian также добавляет в подписку профиль с отпечатком Firefox — на случай если один из отпечатков попадёт под фильтрацию.

Подключение

Отсканировали QR-код — и в сети

После развёртывания каждый человек получает страницу подключения с QR-кодом и кнопкой импорта. Отправьте ссылку близким — достаточно одного нажатия, чтобы подключиться.

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

Включите автоматическую настройку даты и времени на всех устройствах: если часы спешат или отстают, соединение может не установиться.

Архитектура

Как всё устроено

Архитектура Meridian: nginx распределяет трафик на порту TCP 443 по SNI между Xray Reality, XHTTP и страницами подключения; Hysteria2 принимает соединения на порту UDP 443Internetnginx stream — SNI routerTCP 443Xray Hysteria2UDP 443 (salamander)Xray Realitynginx http :8443SNI = camouflageno SNI / server IPConnection pagesControl serviceXray XHTTPXray WSSdomain modenginx ACMETCP 80
Обычный режим (без домена)

nginx принимает соединения на порту TCP 443 и с помощью модуля stream распределяет их по полю TLS SNI. Трафик Reality направляется в Xray. Остальные запросы передаются в модуль http nginx, который обслуживает страницы подключения, подписки и протокол XHTTP по HTTPS с краткосрочным IP-сертификатом Let's Encrypt (выпускается через acme.sh). Hysteria2 работает на порту UDP 443 с обфускацией salamander.

Сервис управления Meridian закрыт за nginx по секретному пути: он хранит базу пользователей, формирует подписки и открывает веб-панель по HTTPS без необходимости поднимать SSH-туннель. Компактный агент на каждом узле сам устанавливает исходящее соединение с сервисом управления, поэтому открывать дополнительные входящие порты на серверах не нужно.

Доменный режим (резервный канал через CDN)

При указании флага --domain nginx выпускает сертификат Let's Encrypt для вашего домена и направляет запросы с этим SNI на доменные обработчики. XHTTP переносится на домен, и дополнительно включается VLESS+WSS. Если включить проксирование домена в Cloudflare, оба протокола пойдут через CDN и продолжат работать даже при прямой блокировке IP-адреса вашего сервера. Сервис управления и страницы подключения при этом остаются на IP-сертификате.

Промежуточный сервер (вход внутри страны)

TCP-форвардер Realm на сервере внутри вашей страны принимает соединения и перенаправляет их на выходной сервер за рубежом. Через промежуточный сервер передаётся только трафик Reality; протоколы XHTTP, WSS и Hysteria2 по-прежнему подключаются к выходному серверу напрямую. Шифрование остаётся сквозным между приложением пользователя и выходным сервером, поэтому промежуточный сервер не имеет доступа к содержимому трафика.

Добавить промежуточный сервер можно командой meridian relay add RELAY_IP --exit EXIT. Ссылки в подписках и на страницах подключения обновятся автоматически.

Готовы начать?

Установите Meridian, разверните сервер и поделитесь доступом с близкими. Вся настройка обычно занимает от 3 до 10 минут.