hy2 端口跳跃和 Brutal 带宽怎么设?一个端口被限速、带宽填多了,实测给你看
不翻车编辑部 · 更新于

先说结论:hy2 节点白天正常、晚上就剩几兆或者干脆连不上,有一种可能是运营商盯上了你连的那一个 UDP 端口。端口跳跃让客户端每隔几秒换一个端口连,服务器用一条转发规则把一整段端口接到同一个服务上。我们在测试服务器上把一个端口限速到 10 兆:单连这个端口只跑 8.7 兆,开了端口跳跃,一分钟平均 345 兆。节点里的上传、下载带宽两栏(Brutal)要小心:线路就能跑 100 兆时填 1000,速度从 93.8 兆掉到 85.1 兆,服务器发出去的流量是你收到的 10 倍。不确定就别填,要填宁低勿高。
测试在 2026 年 10 月 21 日(服务器时间 UTC 04:30–04:52)做,服务端和客户端都是 Hysteria 官方 v2.13.0(2026-10-05 发布的最新版)。限速、封端口、丢包都是我们在服务器上人为模拟的,真实运营商怎么限、限多少,要看你那边的网络。原理部分来自 Hysteria、mihomo、sing-box 和 tcp-brutal 的官方文档,核对日期 2026 年 10 月 20 日,出处列在文末。
hy2 本身是什么、优缺点有哪些,先看Hysteria2 科普;hy2 和 VLESS 在丢包线路上差多少,看丢包实测 60 次。
端口、UDP 先说清楚
- UDP 是一种发数据的方式,像拿大喇叭喊话,喊完就算,不等对方回一句“收到”,所以快。hy2 走的就是 UDP。
- 端口可以想成门牌号。服务器是一栋楼,端口是楼里的一扇扇门。hy2 平时守着其中一扇,常见的是 443 号。门固定,就好盯。
运营商为什么盯单个端口
Hysteria 官方文档「端口跳跃」一页开头就写着:中国用户有时报告运营商会阻断或限速 UDP 连接,不过这些限制往往仅限单个端口。

就像收费站盯着一条车道,这条道车太多就限流,甚至直接封了,旁边的车道它没管。端口跳跃就是冲着这一点来的。
端口跳跃是怎么跳的
分两头:
- 服务器:还是就开一扇门(一个监听端口),再用一条转发规则,把一整排端口都接到这扇门后面。比如 20831 到 20839 这九个端口,客户端连哪一个,进的都是同一个 hy2 服务。
- 客户端:手里拿着这一排端口,第一次连接随机选一个,之后每隔一段时间随机换一个。
换的间隔,官方客户端用 transport.udp.hopInterval 设,默认 30 秒,最少 5 秒;2.8.0 起还能用 minHopInterval / maxHopInterval 设一个范围,每次随机等多久,规律更难被看出来,两种写法不能同时用。官方文档还写着:只要这些端口都可达,跳跃对上层应用是透明的,不会丢数据、也不会断线。


服务器怎么设
办法一:手动加一条转发规则。 官方文档给的 iptables 写法(把 eth0 换成你的网卡名,443 换成 hy2 监听的端口):
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 20000:50000 -j REDIRECT --to-ports 443

我们在测试服务器上加的就是这一条,范围换成了 20831–20839,转到监听的 20830:

这条规则重启就没了,长期用要写进开机脚本或者防火墙配置。官方文档同一页也有 nftables 的写法。
办法二:服务端直接监听一个范围(v2.8.0 起,仅 Linux)。 配置里写 listen: :20000-50000,服务端监听范围里的第一个端口,自己加好转发规则(nftables 或 iptables),关闭时自己清理。

我们试了 listen: :20831-20839,启动后多出 3 条 nat 规则,把 20832–20839 转到 20831;停止服务后 IPv4 的规则都清掉了:

有一个小插曲:那次停止服务后,IPv6 的 nat 表里留下了一条 OUTPUT 跳转规则和一条空链,我们手动删掉了。只遇到一次,没有重复验证。用这种办法的,停服或者换配置以后,可以用 iptables-save 和 ip6tables-save 看一眼。
不管哪种,都要放行整段 UDP 端口:服务器防火墙(比如 ufw allow 20000:50000/udp)和云服务商后台的安全组都要放。用 3x-ui 建 hy2 节点的,面板入站的写法见3x-ui 一台服务器开两个节点。
客户端怎么填
| 客户端 | 端口范围 | 跳跃间隔 |
|---|---|---|
| 官方客户端 | server: 你的地址:20000-50000 |
transport.udp.hopInterval: 30s |
| Clash Verge 等 mihomo 内核 | ports: 20000-50000 |
hop-interval: 30(单位秒,也能写 15-30 随机) |
| sing-box(1.11 起) | server_ports: ["20000:50000"] |
hop_interval,1.14 起有 hop_interval_max |
服务器开了哪一段,客户端就填哪一段,两边要对得上。



我们测试用的官方客户端配置(密码已隐去):

实测一:一个端口被限速到 10 兆
我们在服务器出口上只对 20833 这一个端口加了 10 兆的限速(tc 的 police),模拟运营商限了这一个端口。

- 单连 20833:下载测 3 次,8.63、8.70、8.66 Mbps。
- 端口跳跃(20831–20839,5 秒跳一次),连测 60 秒,服务器用 tcpdump 记下每一秒客户端发往哪个端口:20831 → 20837 → 20834 → 20837 → 20836 → 20832 → 20833 → 20837 → 20831 → 20837 → 20837 → 20839,每 5 秒换一个。落在 20833 的那几秒,速度跌到 6.1、17.3、8.8、9.6 兆;跳走后一两秒回到 146、411 兆。60 秒平均 345.38 Mbps。另一次同样的测试平均 321.29 Mbps。
- 整个过程客户端没有断线、没有重连。
实测二:一个端口被封死
把 20833 两个方向的包全部丢掉:

- 单连 20833:5 秒超时,连不上。
- 端口跳跃做了 3 次:
- 2 次是中途跳到了 20833,速度跌到 0,最长停了大约 10 秒,连接本身没有断,跳走以后接着跑,60 秒平均分别是 261.20 和 338.10 Mbps。
- 1 次是第一次连接随机选中的就是 20833,同样 5 秒超时,连不上。
端口跳跃是连上以后才开始跳。第一下就碰上被封的端口,要重新连一次。范围里被封的端口越多,碰上的机会越大。
端口跳跃管不了的
官方文档说得很直白:如果限制针对的是 UDP 本身而非某个具体端口,端口跳跃将无济于事。

这时候有两条路(TCP 是另一种发数据的方式,像寄挂号信,每一封都要对方签收):
- Mimic:官方支持的第三方工具,把 UDP 包改写成 TCP 的样子。文档写明它只支持 Linux,服务器和客户端两头都要装,而且和端口跳跃不能同时用。手机、Windows 客户端用不了。
- 换一个走 TCP 的协议:比如 VLESS + REALITY,和 hy2 放在同一个客户端里,晚上 hy2 不行就切过去。做法见3x-ui 一台服务器开两个节点。
晚上慢也不一定是端口被限,服务器超售、国际出口拥堵,换什么设置都没用,排查顺序见晚高峰为什么慢。
Brutal 是什么
Brutal 是 hy2 控制“发多快”的办法,这类办法叫拥塞控制。打个比方:
- 普通的拥塞控制(比如 BBR)像开车看路况:前面堵了、东西丢了,就松油门,再慢慢试着加速。
- Brutal 像定速巡航:你告诉它 100,它就一直开 100,路上丢了包,还按丢的比例多发一点补上。
官方文档原话:Brutal 采用固定速率模型,丢包或 RTT 变化不会降低速度;如果无法达到预定的目标速率,反而会根据计算的丢包率提高发送速率来进行补偿。它只在你知道(并正确设置了)当前网络的最大速度时才能正常运行,擅长在拥塞的网络中抢占带宽,因此得名(brutal 就是“野蛮”)。

在哪填:就是 hy2 节点里的上传、下载带宽两栏。官方客户端写在 bandwidth 下面的 up、down,Clash Verge 里是 up、down(不写单位默认 Mbps),sing-box 里是 up_mbps、down_mbps。
- 填了哪个方向,那个方向就用 Brutal;不填,就用 BBR。BBR 自己按测出来的带宽和延迟调速度,不用你填。
- 服务器端也能填带宽,那是给每个客户端的速度上限,实际以两边小的那个为准。服务器开了
ignoreClientBandwidth,客户端填的就不算数。
实测三:带宽填多填少
还是那台服务器。把 hy2 端口的出口限速到 100 兆,相当于这条线路实际就能跑 100 兆。客户端只改 down 这一行,分别填 50、100、300、1000,再加一组不填(BBR),每组下载 10 秒、测 3 次,取中间那次。同时在服务器上统计这个端口发出了多少字节。

| down 填 | 速度(中位数) | 3 次 | 服务器发出 ÷ 你收到 |
|---|---|---|---|
| 50 | 46.7 Mbps | 46.8 / 43.6 / 46.7 | 1.05 |
| 100(填对了) | 93.8 Mbps | 94.0 / 90.8 / 93.9 | 1.10 |
| 不填(BBR) | 91.4 Mbps | 91.4 / 89.8 / 93.7 | 1.47 |
| 300 | 88.8 Mbps | 88.8 / 92.7 / 88.6 | 4.01 |
| 1000 | 85.1 Mbps | 84.2 / 85.1 / 89.4 | 10.06 |
(1.05 是协议本身的包头开销,没有浪费时就是这个数。)
- 填少了等于自己限速。 填 50 跑 46.7,几乎不浪费流量。
- 填对了最快。 填 100 跑 93.8;不填交给 BBR 跑 91.4,差不多。
- 填多了不会更快,反而略慢,还白白多发流量。 填 300,服务器发出的是你收到的 4 倍;填 1000 是 10 倍,10 秒里服务器发出 999–1177 MB,你只收到 105–112 MB,多出来的全在路上被丢了。
官方文档专门警告过:带宽值并非越大越好,不要设置得高于实际最大值,否则会因为补偿机制导致连接速度慢、不稳定,且浪费流量。服务器按流量计费、或者每月有流量上限的,这些多发的流量都算在你头上。

没加限速时(这条路含服务器单核 CPU,大约能跑 400 兆),不填跑 389.3,填 1000 跑 393.9,差别不大,服务器多发 1.14 倍。
实测四:丢包时 Brutal 更快吗
去掉限速,改成随机丢 5% 的包,各测 6 次:
| 6 次(Mbps) | 中位数 | |
|---|---|---|
| down 填 300(Brutal) | 235.2 / 285.3 / 212.4 / 247.8 / 247.6 / 248.2 | 247.7 |
| 不填(BBR) | 167.1 / 294.8 / 166.1 / 338.6 / 295.8 / 345.0 | 295.3 |
Brutal 更稳(212 到 285),BBR 忽高忽低(166 到 345),中位数反而是 BBR 高。这和我们上一次 hy2 对 VLESS 的丢包实测对得上:hy2 在丢包线路上快,主要不是靠 Brutal。
带宽到底怎么填
- 不确定,就别填,交给 BBR。
- 要填:先不填带宽测 3 次速,取中间那个数(为什么看中间值,见测速为什么看中位数),填这个数或者再低一点。宁可低,别高。
- up 是你上传,down 是你下载,两个分开测、分开填。
TCP Brutal 是什么
在 sing-box 的多路复用设置里能看到一个 brutal 选项,对应的是 TCP Brutal:Hysteria 官方把 Brutal 搬到 TCP 上,做成一个 Linux 内核模块,装在服务器上(项目在 apernet/tcp-brutal,2026-09-26 发布的 v2.0.1)。

官方 README 里几条要点:
- 它控制的是发送,数据主要是服务器发给你,所以只在服务器一边装就能拿到大部分好处,对端不用改。
- 和 hy2 的 Brutal 一样要你知道带宽,“填高了只会制造丢包”。
- 别把它设成系统默认的拥塞控制,否则没有规则、也没有程序单独设置的连接只有 1 Mbps。
- v2 起不再需要程序支持,用
brutalctl add <目标地址> <速度>按目标地址设速度;要求 Linux 5.10 以上。

sing-box 文档写明,用它需要服务器装好 brutal 内核模块。要往服务器内核里装东西,这篇只讲原理,我们没有在测试服务器上装。
小结
- 晚上 hy2 慢、连不上:先试端口跳跃,服务器转一段端口、放行整段 UDP,客户端填同样的范围。
- 整个 UDP 都被限:端口跳跃没用,换走 TCP 的协议。
- 带宽两栏:不确定就别填,要填就填实测值,宁低勿高。
换完节点,可以用本站的我的 IP 看出口有没有变,用 DNS 泄漏检测 看解析有没有漏回国内。各协议在墙面前的表现,见翻墙协议从夯到拉。
这次测试的局限
- 一台服务器(1 核,同时还有别的实验在跑)、一个客户端、一个时段。限速、封端口、丢包都是在服务器上人为模拟的,只测了下载方向。
- 服务器单核,最高速度大约 400 兆,受 CPU 影响。
- 每次测速的原始输出、每秒端口记录和清理前后的规则表都留档备查。
资料来源
核对日期均为 2026 年 10 月 20 日。
