Узлы ретранслятора

Что решают ретрансляторы

Когда 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 КБ, проверка хопа неубедительна вместо прохождения.

Чтобы вывести ретранслятор из эксплуатации, удалите цепи через него. 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, отправляет всё остальное в сайт маскировки и достижим только с последнего хопа ретранслятора. Собственная цель маскировки выхода и его другие записи не меняются. Имя не должно быть достижимо с выхода, потому что выход всё ещё представляет свою собственную цель маскировки. Зондировщик который достигает ретранслятора без действительного ключа поэтому переправлен на ту цель вместо получения ответа прокси.

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

meridian check 203.0.113.10
meridian test

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

Выберите SNI выхода

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

Что Meridian не делает ещё

  • Это не говорит вам либо ретранслятор 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

Хопы развёрнутые более ранними релизами запускаются как meridian-realm-* пока следующее meridian apply не переименует их; meridian check RELAY предупреждает пока.

On this page