Перейти к содержимому

Промежуточные серверы

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

Клиент → Промежуточный сервер (отечественный IP) → Выходной сервер (за границей) → Internet

Цензоры видят трафик к отечественному IP. Промежуточный сервер пересылает необработанный TCP выходному серверу; шифрование сквозное, от клиента до выхода, поэтому промежуточный сервер никогда не видит трафик в открытом виде.

Промежуточный сервер запускает Realm, маленький TCP-форвардер с нулевым копированием. Он слушает на порту 443 (настраивается) и пересылает трафик слушателю Reality выхода. Docker и панели на промежуточном сервере нет.

Промежуточные серверы несут трафик Reality. XHTTP, WSS и Hysteria2 работают на собственном адресе и домене выхода и остаются в той же подписке как запасные варианты.

Сначала разверните выход, затем укажите на него промежуточный сервер:

Окно терминала
meridian relay add 203.0.113.10 --exit 198.51.100.10

Meridian добавляет промежуточный сервер в вашу топологию и применяет её:

  1. Подготавливает промежуточный сервер (пакеты, BBR, защита SSH, файрвол, который открывает только SSH и порт промежуточного сервера)
  2. Устанавливает Realm (версия-закреплена, SHA256-проверена) как сервис systemd
  3. Указывает промежуточный сервер на слушатель Reality выхода
  4. Публикует промежуточный сервер в подписке каждого клиента
ФлагПо умолчаниюОписание
--exit/-e EXIT(требуется)IP или имя выходного сервера
--name NAME(авто)Понятное имя промежуточного сервера (например ru-moscow)
--port/-p PORT443Порт слушания на промежуточном сервере
--sni HOSTцель выходаЦель маскировки Reality для этого промежуточного сервера; пропустите, чтобы использовать цель выхода
--user/-u USERrootSSH-пользователь на промежуточном сервере
--ssh-port PORT22SSH-порт на промежуточном сервере
--yes/-yПропустить диалоги подтверждения
Окно терминала
meridian relay add 203.0.113.10 --exit 198.51.100.10 --name ru-moscow \
--port 443 --sni dl.google.com --user ubuntu --ssh-port 2222 --yes

Существующие клиенты получают промежуточный сервер при следующем обновлении подписки, и их страницы подключения перечисляют его. Новые клиенты получают его автоматически:

Окно терминала
meridian client add alice # промежуточный сервер включён
Окно терминала
meridian relay list # все промежуточные серверы
meridian relay list --exit 198.51.100.10 # промежуточные серверы одного выхода

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

Окно терминала
meridian check 203.0.113.10
meridian test

Check также измеряет каждый хоп: из каждого хопа это загружает сайт маскировки выхода через следующий хоп, отправляя тот же SNI, который отправляют клиенты, и сообщает время подключения, время до первого байта и сколько байт пришло. Передача, которая замерзает между примерно 8 и 32 КБ, — признак дросселирования на этом хопе и сообщается как предупреждение; обычное исправление — взять промежуточный сервер у другого провайдера (другая сеть или ASN). Если домашняя страница сайта маскировки меньше 32 КБ, проверка хопа неубедительна вместо прохождения.

Чтобы дать промежуточному серверу другой SNI маскировки, например когда meridian test --probe сообщает, что его SNI заблокирован, смените его на месте. Meridian проверяет, что выход открывает новый сайт, показывает рассмотрение и применяет его; старое имя сразу перестаёт работать, а приложения переключатся при следующем обновлении подписки (каждые 6 часов) или при ручном обновлении. Укажите SNI самого выхода, чтобы промежуточный сервер снова следовал за выходом:

Окно терминала
meridian relay sni 203.0.113.10 dl.google.com

Чтобы вывести промежуточный сервер из эксплуатации, удалите цепочки через него. Meridian показывает то, что будет удалено, запрашивает подтверждение и очищает сервис Realm, правила файрвола и опубликованные точки входа; существующие клиенты теряют промежуточный сервер при следующем обновлении подписки:

Окно терминала
meridian relay remove 203.0.113.10

Присоедините несколько промежуточных серверов к одному выходу, например в разных городах или сетях:

Окно терминала
meridian relay add 203.0.113.10 --exit 198.51.100.10 --name ru-moscow
meridian relay add 203.0.113.11 --exit 198.51.100.10 --name ru-spb

Клиенты получают каждый промежуточный сервер в своей подписке. Для цепочек промежуточных серверов с более чем одним звеном используйте meridian setup.

Во время некоторых ограничений мобильного интернета в России операторы пропускают только утверждённый список сайтов и адресов. Отчёты варьируются по оператору, региону и неделе, и ни один оператор не опубликовывает свой список. Meridian не обнаруживает или отслеживает белые списки; этот раздел охватывает что вы можете установить сегодня и что остаётся ручным.

  • Сети отличаются. Некоторые, похоже, смотрят только на имя сервера (SNI) которое подключение объявляет. Другие также проверяют IP адрес назначения. Где только имя проверяется, прямой путь Reality с разрешённым именем может пройти. Где IP также проверяется, первый хоп должен быть адресом на списке.
  • Адреса облака отечественных провайдеров обычно первый хоп. Не каждый адрес от провайдера в списке: люди описывают одну подсеть диапазона провайдера быть разрешённой пока другая из того же провайдера не является. Провайдеры могут также ограничить приватных клиентов, ограничить как часто вы можете пересоздать сервер или дротель пропускную способность.
  • Иностранные CDN адреса обычно не разрешены на мобильных сетях. Относитесь к режиму домена через Cloudflare как резервный для домашних подключений, не как ответ белого списка.
  • Связь промежуточного сервера с выходом тоже может быть нарушена. Промежуточный сервер, который доступен пользователям, всё равно может потерять подключение к иностранному выходу.

Промежуточный сервер на разрешённом адресе

Заголовок раздела «Промежуточный сервер на разрешённом адресе»

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

Окно терминала
meridian relay add 203.0.113.10 --exit 198.51.100.10 --name ru-mobile --sni allowed.example.com

С --sni только запись этого промежуточного сервера в подписке объявляет это имя. Meridian даёт промежуточному серверу собственный слушатель на выходе, достижимый только с последнего хопа, и Reality-слушатель (те же ключи), который имитирует это имя. Он направляет в Reality только это имя, а всё остальное отправляет на этот сайт, поэтому зонд, достигший промежуточного сервера без действительного ключа, видит настоящий сертификат сайта вместо ответа прокси. Собственная цель маскировки выхода и его другие записи не меняются. Выход должен открывать это имя по TLS 1.3 с HTTP/2; сменить его позже можно командой meridian relay sni RELAY NEW_SNI.

Затем проверьте промежуточный сервер и тестируйте с сети, которая имеет значение:

Окно терминала
meridian check 203.0.113.10
meridian test

meridian test с вашей собственной машины не может сказать вам что разрешённая мобильная сеть пропускает. Попробуйте это на реальном устройстве на той сети.

--sni на meridian deploy и meridian node add установлено цель маскировки для прямого пути Reality выхода. Цель должна быть сайтом который выход может достичь с TLS 1.3, и deploy проверяет реальный трафик через это и останавливается если ничего не проходит. Перед разворачиванием проверьте кандидата с meridian check IP --sni HOST. На сети которая проверяет только имена, разрешённое имя может позволить прямому пути пройти, но будто имя работает зависит от оператора, поэтому тестируйте каждое.

  • Он не говорит вам, есть ли IP промежуточного сервера в каком-либо списке оператора и активны ли ограничения.
  • Это не устанавливает фронтирование через облако отечественного CDN. Режим домена построен и протестирован для Cloudflare.
  • Промежуточный сервер несёт только Reality. XHTTP, WSS и Hysteria2 остаются на выходе.
  • Это не туннель через третью сторону вызывает или сервисы сообщений.

Другой сервис использует порт слушания на промежуточном сервере. Проверьте с ss -tlnp sport = :443 и остановите его или выберите другой порт с --port 8443.

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

Промежуточный сервер должен достичь порта Reality выхода. Запустите meridian test для сквозной проверки маршрута и meridian check EXIT для проверки самого выхода.

На промежуточном сервере выведите сервисы форвардера и прочитайте их логи. Промежуточные серверы используют нейтральные имена (модули netfwd-*, конфиги /etc/netfwd/), поэтому ничто на них не называет Meridian, Realm или промежуточный сервер:

Окно терминала
systemctl list-units 'netfwd-*'
journalctl -u 'netfwd-*' --no-pager -n 20