多端口 (端口跳跃)

1.3.0 版本开始,Hysteria 加入了多端口/范围端口地址的支持。客户端在填写服务器地址时支持以下新的格式:

server:port1,port2-port3,...

例如:

example.com:1145,5144 表示服务器在 1145 和 5144 端口上可用(共 2 个端口)

example.com:20000-50000 表示服务器在 20000 到 50000 端口上可用(共 30001 个端口)

example.com:1145,5144-10240 表示服务器在 1145 和 5144-10240 端口上可用(共 5098 个端口)

对端口的数量没有限制,可以添加任意多个端口/端口范围。

客户端会在连接时随机选择一个端口进行连接,并每过一段时间(默认 10 秒,由客户端配置中的 hop_interval 控制)随机选择一个新端口进行连接。切换的过程对上层应用是透明的,正常情况下不会造成任何数据丢失/连接中断。

⚠ 注意 ⚠

本功能目前只支持 UDP 协议。

端口跳跃依赖 1.3.0 添加的 QUIC 连接迁移,需要服务端和客户端均为 1.3.0 或更高版本。

服务端配置 #

服务端并没有直接内置多端口地址的支持(不能使用上述地址格式作为监听地址),需要配合外部的端口转发机制来实现。

以 Linux 为例,将 eth0 上的 UDP 20000-50000 端口转发到 5666 端口:

# IPv4
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 20000:50000 -j DNAT --to-destination :5666
# IPv6
ip6tables -t nat -A PREROUTING -i eth0 -p udp --dport 20000:50000 -j DNAT --to-destination :5666

服务端正常监听在 5666 端口,在客户端用 example.com:20000-50000 连接即可。

当然,服务端在多个端口可用并不代表客户端一定要使用它们。如果客户端不希望开启端口跳跃,依然可以从这些端口里随便选一个进行连接。

为什么要用端口跳跃? #

一直以来都有中国用户反馈长时间单端口 UDP 连接容易被运营商封锁/QoS 的问题。如遇类似问题可尝试使用端口跳跃来解决。