Промежуточные серверы
Что решают промежуточные серверы
Заголовок раздела «Что решают промежуточные серверы»Когда 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.10Meridian добавляет промежуточный сервер в вашу топологию и применяет её:
- Подготавливает промежуточный сервер (пакеты, BBR, защита SSH, файрвол, который открывает только SSH и порт промежуточного сервера)
- Устанавливает Realm (версия-закреплена, SHA256-проверена) как сервис systemd
- Указывает промежуточный сервер на слушатель Reality выхода
- Публикует промежуточный сервер в подписке каждого клиента
| Флаг | По умолчанию | Описание |
|---|---|---|
--exit/-e EXIT | (требуется) | IP или имя выходного сервера |
--name NAME | (авто) | Понятное имя промежуточного сервера (например ru-moscow) |
--port/-p PORT | 443 | Порт слушания на промежуточном сервере |
--sni HOST | цель выхода | Цель маскировки Reality для этого промежуточного сервера; пропустите, чтобы использовать цель выхода |
--user/-u USER | root | SSH-пользователь на промежуточном сервере |
--ssh-port PORT | 22 | SSH-порт на промежуточном сервере |
--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.10meridian testCheck также измеряет каждый хоп: из каждого хопа это загружает сайт маскировки выхода через следующий хоп, отправляя тот же 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-moscowmeridian 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.10meridian testmeridian test с вашей собственной машины не может сказать вам что разрешённая мобильная сеть пропускает. Попробуйте это на реальном устройстве на той сети.
Выберите SNI выхода
Заголовок раздела «Выберите SNI выхода»--sni на meridian deploy и meridian node add установлено цель маскировки для прямого пути Reality выхода. Цель должна быть сайтом который выход может достичь с TLS 1.3, и deploy проверяет реальный трафик через это и останавливается если ничего не проходит. Перед разворачиванием проверьте кандидата с meridian check IP --sni HOST. На сети которая проверяет только имена, разрешённое имя может позволить прямому пути пройти, но будто имя работает зависит от оператора, поэтому тестируйте каждое.
Что Meridian не делает
Заголовок раздела «Что 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