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 的问题。如遇类似问题可尝试使用端口跳跃来解决。