Перейти к содержанию

Смена портов

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

Клиент

Клиент Hysteria поддерживает специальный формат адреса с несколькими портами:

example.com:1234,5678,9012 # (1)!
example.com:20000-50000 # (2)!
example.com:1234,5000-6000,7044,8000-9000 # (3)!
  1. Несколько отдельных портов.
  2. Диапазон портов.
  3. Комбинация обоих вариантов.

Количество портов не ограничено.

Клиент случайным образом выберет один из указанных портов для начального соединения и будет периодически переключаться на другой порт. Опция для управления интервалом — hopInterval в секции transport:

transport:
  udp:
    hopInterval: 30s # (1)!
  1. 30s — значение по умолчанию. Минимально допустимое — 5s.

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

Сервер

Сервер Hysteria не имеет встроенной поддержки прослушивания на нескольких портах, поэтому вы не можете использовать вышеуказанный формат в качестве адреса прослушивания на стороне сервера. Мы рекомендуем использовать DNAT в iptables или nftables для перенаправления портов на порт прослушивания сервера.

# IPv4
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 20000:50000 -j REDIRECT --to-ports 443
# IPv6
ip6tables -t nat -A PREROUTING -i eth0 -p udp --dport 20000:50000 -j REDIRECT --to-ports 443
define INGRESS_INTERFACE="eth0"
define PORT_RANGE=20000-50000
define HYSTERIA_SERVER_PORT=443

table inet hysteria_porthopping {
  chain prerouting {
    type nat hook prerouting priority dstnat; policy accept;
    iifname $INGRESS_INTERFACE udp dport $PORT_RANGE counter redirect to :$HYSTERIA_SERVER_PORT
  }
}

В этом примере сервер слушает на порту 443, но клиент может подключаться к любому порту в диапазоне 20000-50000.