Skip to content
Эта страница переведена с помощью ИИ и может содержать неточности. Помогите улучшить перевод на GitHub.

Проброс портов ​

Перенаправляет порт, который слушает этот хост, на другое устройство или сервис.

Возможности ​

  • TCP и UDP;
  • IPv4 и IPv6, с переадресацией между v4 и v6;
  • диапазоны портов и несколько портов;
  • несколько целей и переключение при отказе;
  • ограничение числа соединений;
  • статистика трафика и журнал работы;
  • отправка протокола PROXY (v1 / v2) на цель, чтобы передать следующему узлу реальный адрес клиента;
  • маршрутизация по SNI: несколько служб делят один порт, например 443, а выбор происходит по домену из TLS-рукопожатия без расшифровки TLS.

Протокол PROXY ​

Проброс портов лишь ретранслирует TCP, поэтому по умолчанию следующий узел видит только адрес самого Gately. Если в правиле установить «Протокол PROXY» в v1 или v2, Gately после подключения к цели сначала отправит заголовок PROXY, и следующий узел получит реальный адрес клиента для журналов, ограничения частоты запросов и контроля доступа.

На цели должен быть включён соответствующий режим приёма, иначе соединение будет отклонено, например:

  • haproxy: bind 192.168.1.8:4434 accept-proxy;
  • nginx: listen 4435 ssl proxy_protocol;;
  • веб-служба Gately: включите в прослушивании «Принимать протокол PROXY» и добавьте источник в доверенные источники PROXY.

Параметр действует только для TCP, на пробросы UDP он не влияет.

Маршрутизация по SNI: общий порт 443 ​

Когда нескольким службам нужен один и тот же публичный порт (например, VPN, веб-сервер и туннель одновременно используют 443), переключите режим правила с «Проброс портов» на «Маршрутизация по SNI». Gately читает домен (SNI) из первого TLS-сообщения, ClientHello, и передаёт всё соединение без изменений бэкенду, выбранному по домену. TLS здесь не расшифровывается, поэтому сертификаты остаются на бэкендах. Функция выполняет ту же задачу, что и правила req_ssl_sni в haproxy.

Правило в этом режиме содержит:

  • маршруты: у каждого маршрута есть имя, один или несколько доменов, адреса целей (несколько адресов пробуются по очереди, с переключением при отказе), необязательный порт цели (пусто означает порт прослушивания) и настройка протокола PROXY (выключен, v1 или v2). Настройка PROXY относится к маршруту, потому что одним бэкендам она необходима, а другие её отвергают;
  • цель по умолчанию: собственные адреса целей, порты целей и настройка протокола PROXY самого правила.

Домен может быть точным (vpn.example.com), шаблоном (*.example.com, любой глубины) или * (любое соединение, содержащее домен); регистр не учитывается. Порядок сопоставления: точный домен, самый длинный шаблон, *, затем цель по умолчанию. Один домен может принадлежать только одному маршруту.

Соединение отправляется на цель по умолчанию, если ни один маршрут не подошёл, клиент не передал SNI (например, подключается по IP-адресу), данные не являются TLS, ClientHello не удаётся разобрать или клиент ничего не отправил в течение 5 секунд (протоколы, в которых первым говорит сервер, например SSH). Без цели по умолчанию такие соединения закрываются и учитываются как «разорвано». Клиент, который отключился, не закончив ClientHello, отбрасывается.

Примечания:

  • маршрутизация по SNI работает только с TCP. UDP-трафик, например HTTP/3 (QUIC), не маршрутизируется, для него создайте отдельное правило;
  • ClientHello может быть разбит на несколько TLS-записей и достигать 64 КБ;
  • на карточке правила показано, сколько соединений получили каждый маршрут и цель по умолчанию.

Пример: замена haproxy ​

Такая конфигурация haproxy:

text
frontend https
    bind 192.0.2.10:443
    mode tcp
    tcp-request inspect-delay 5s
    tcp-request content accept if { req_ssl_hello_type 1 }
    use_backend ocserv if { req_ssl_sni -i tz.example.com }
    default_backend web
backend ocserv
    server ocserv 127.0.0.1:443 send-proxy-v2
backend web
    server web 127.0.0.1:8443 send-proxy-v2

превращается в одно правило Gately:

ПараметрЗначение
Режим / протоколМаршрутизация по SNI / TCP
Адрес / порт прослушивания192.0.2.10 / 443
Маршрут ocservдомен tz.example.com, цель 127.0.0.1, порт 443, PROXY v2
Цель по умолчанию127.0.0.1, порт цели 8443, PROXY v2

Укажите в качестве адреса прослушивания публичный адрес сервера, чтобы не возникало конфликта с бэкендами, которые слушают 127.0.0.1:443. Чтобы раздавать сайты средствами самого Gately, добавьте прослушивание веб-служб на 127.0.0.1:8443 с включённым «Принимать протокол PROXY» и 127.0.0.0/8 в доверенных источниках PROXY. Перед включением правила остановите haproxy: порт может слушать только одна программа.

Типичные сценарии ​

  • вывести порты сервисов NAS на единую точку входа;
  • обеспечить связь между IPv6 и IPv4 через переадресацию;
  • настроить для сервиса основной и резервный бэкенды;
  • разделить порт 443 между VPN, веб-сервером и другими TLS-службами.

Рекомендации по развёртыванию ​

Проброс портов слушает порты непосредственно на хосте, поэтому при развёртывании в Docker рекомендуется --network host.

Миграция с Lucky ​

Правила можно импортировать из lucky_portforward.lkcf; параметры TLS / шифрования потока, ограничения скорости и подобные пока не поддерживаются, при импорте выводится предупреждение.

Распространяется по лицензии Apache-2.0.