跳到正文
不翻车专注 VPN 软件评测

hy2 端口跳跃和 Brutal 带宽怎么设?一个端口被限速、带宽填多了,实测给你看

不翻车编辑部 · 更新于

封面:协议科普,测试服务器实测,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 连接,不过这些限制往往仅限单个端口。

Hysteria 官方中文文档:中国用户有时报告运营商会阻断或限速 UDP 连接,这些限制往往仅限单个端口

就像收费站盯着一条车道,这条道车太多就限流,甚至直接封了,旁边的车道它没管。端口跳跃就是冲着这一点来的。

端口跳跃是怎么跳的

分两头:

  • 服务器:还是就开一扇门(一个监听端口),再用一条转发规则,把一整排端口都接到这扇门后面。比如 20831 到 20839 这九个端口,客户端连哪一个,进的都是同一个 hy2 服务。
  • 客户端:手里拿着这一排端口,第一次连接随机选一个,之后每隔一段时间随机换一个。

换的间隔,官方客户端用 transport.udp.hopInterval 设,默认 30 秒,最少 5 秒;2.8.0 起还能用 minHopInterval / maxHopInterval 设一个范围,每次随机等多久,规律更难被看出来,两种写法不能同时用。官方文档还写着:只要这些端口都可达,跳跃对上层应用是透明的,不会丢数据、也不会断线。

Hysteria 官方中文文档:客户端随机选择一个端口进行初始连接,并定期随机跳跃到另一个端口,hopInterval 默认 30s

Hysteria 官方中文文档:服务器在所有指定的端口上可达时,跳跃过程对上层应用是透明的,不会导致数据丢失/连接断开

服务器怎么设

办法一:手动加一条转发规则。 官方文档给的 iptables 写法(把 eth0 换成你的网卡名,443 换成 hy2 监听的端口):

iptables -t nat -A PREROUTING -i eth0 -p udp --dport 20000:50000 -j REDIRECT --to-ports 443

Hysteria 官方文档的手动设置:iptables 把 UDP 20000:50000 重定向到 443,在这个示例中服务器监听 443 端口

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

测试服务器上加了一条 iptables 规则:UDP 20831 到 20839 重定向到 20830

这条规则重启就没了,长期用要写进开机脚本或者防火墙配置。官方文档同一页也有 nftables 的写法。

办法二:服务端直接监听一个范围(v2.8.0 起,仅 Linux)。 配置里写 listen: :20000-50000,服务端监听范围里的第一个端口,自己加好转发规则(nftables 或 iptables),关闭时自己清理。

Hysteria 更新日志 2.8.0:新增服务端 UDP 端口范围监听,仅 Linux,自动设置 nftables/iptables 重定向规则

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

测试服务器:listen 写成端口范围后,iptables-save 里多出 HYSTERIA-PR 链和 REDIRECT 规则,停止服务后 nat 表恢复为空

有一个小插曲:那次停止服务后,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

服务器开了哪一段,客户端就填哪一段,两边要对得上。

mihomo 文档的 Hysteria2 配置参考:ports、hop-interval、up、down 等字段

mihomo 文档:配置 ports 则启用端口跳跃,忽略 port;hop-interval 单位为秒,默认 30

sing-box 文档的 Hysteria2 出站结构:server_ports、hop_interval、hop_interval_max、up_mbps、down_mbps

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

测试用的官方客户端配置:server 写 20831-20839 端口范围,transport.udp.hopInterval 为 5s

实测一:一个端口被限速到 10 兆

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

测试服务器上的 tc 过滤器:src_port 20833,police rate 10Mbit,超出部分丢弃

  • 单连 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 秒后报错 failed to initialize client,connect error: timeout: no recent network activity

  • 单连 20833:5 秒超时,连不上。
  • 端口跳跃做了 3 次:
    • 2 次是中途跳到了 20833,速度跌到 0,最长停了大约 10 秒,连接本身没有断,跳走以后接着跑,60 秒平均分别是 261.20 和 338.10 Mbps。
    • 1 次是第一次连接随机选中的就是 20833,同样 5 秒超时,连不上。

端口跳跃是连上以后才开始跳。第一下就碰上被封的端口,要重新连一次。范围里被封的端口越多,碰上的机会越大。

端口跳跃管不了的

官方文档说得很直白:如果限制针对的是 UDP 本身而非某个具体端口,端口跳跃将无济于事。

Hysteria 官方中文文档:如果限制针对的是 UDP 本身而非某个具体端口,端口跳跃将无济于事,Mimic 会把连接伪装成 TCP

这时候有两条路(TCP 是另一种发数据的方式,像寄挂号信,每一封都要对方签收):

  1. Mimic:官方支持的第三方工具,把 UDP 包改写成 TCP 的样子。文档写明它只支持 Linux,服务器和客户端两头都要装,而且和端口跳跃不能同时用。手机、Windows 客户端用不了。
  2. 换一个走 TCP 的协议:比如 VLESS + REALITY,和 hy2 放在同一个客户端里,晚上 hy2 不行就切过去。做法见3x-ui 一台服务器开两个节点。

晚上慢也不一定是端口被限,服务器超售、国际出口拥堵,换什么设置都没用,排查顺序见晚高峰为什么慢。

Brutal 是什么

Brutal 是 hy2 控制“发多快”的办法,这类办法叫拥塞控制。打个比方:

  • 普通的拥塞控制(比如 BBR)像开车看路况:前面堵了、东西丢了,就松油门,再慢慢试着加速。
  • Brutal 像定速巡航:你告诉它 100,它就一直开 100,路上丢了包,还按丢的比例多发一点补上。

官方文档原话:Brutal 采用固定速率模型,丢包或 RTT 变化不会降低速度;如果无法达到预定的目标速率,反而会根据计算的丢包率提高发送速率来进行补偿。它只在你知道(并正确设置了)当前网络的最大速度时才能正常运行,擅长在拥塞的网络中抢占带宽,因此得名(brutal 就是“野蛮”)。

Hysteria 官方中文文档的拥塞控制细节:Brutal 采用固定速率模型,丢包或 RTT 变化不会降低速度

在哪填:就是 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 次,取中间那次。同时在服务器上统计这个端口发出了多少字节。

测试用的客户端配置:bandwidth 下 up 50 mbps,down 依次填 50、100、300、1000,或整段删掉用 BBR

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 是协议本身的包头开销,没有浪费时就是这个数。)

  1. 填少了等于自己限速。 填 50 跑 46.7,几乎不浪费流量。
  2. 填对了最快。 填 100 跑 93.8;不填交给 BBR 跑 91.4,差不多。
  3. 填多了不会更快,反而略慢,还白白多发流量。 填 300,服务器发出的是你收到的 4 倍;填 1000 是 10 倍,10 秒里服务器发出 999–1177 MB,你只收到 105–112 MB,多出来的全在路上被丢了。

官方文档专门警告过:带宽值并非越大越好,不要设置得高于实际最大值,否则会因为补偿机制导致连接速度慢、不稳定,且浪费流量。服务器按流量计费、或者每月有流量上限的,这些多发的流量都算在你头上。

Hysteria 官方中文文档:Brutal 带宽设置低于实际最大值也能正常运行,相当于限速;设置高于实际最大值会导致速度慢、不稳定且浪费流量

没加限速时(这条路含服务器单核 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。

带宽到底怎么填

  1. 不确定,就别填,交给 BBR。
  2. 要填:先不填带宽测 3 次速,取中间那个数(为什么看中间值,见测速为什么看中位数),填这个数或者再低一点。宁可低,别高。
  3. up 是你上传,down 是你下载,两个分开测、分开填。

TCP Brutal 是什么

在 sing-box 的多路复用设置里能看到一个 brutal 选项,对应的是 TCP Brutal:Hysteria 官方把 Brutal 搬到 TCP 上,做成一个 Linux 内核模块,装在服务器上(项目在 apernet/tcp-brutal,2026-09-26 发布的 v2.0.1)。

tcp-brutal 仓库简介:Hysteria 的拥塞控制算法移植到 TCP,作为 Linux 内核模块

官方 README 里几条要点:

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

tcp-brutal README:不要把 brutal 设为系统默认拥塞控制,没有规则和程序设置的连接只有 1 Mbps

sing-box 文档写明,用它需要服务器装好 brutal 内核模块。要往服务器内核里装东西,这篇只讲原理,我们没有在测试服务器上装。

小结

  • 晚上 hy2 慢、连不上:先试端口跳跃,服务器转一段端口、放行整段 UDP,客户端填同样的范围。
  • 整个 UDP 都被限:端口跳跃没用,换走 TCP 的协议。
  • 带宽两栏:不确定就别填,要填就填实测值,宁低勿高。

换完节点,可以用本站的我的 IP 看出口有没有变,用 DNS 泄漏检测 看解析有没有漏回国内。各协议在墙面前的表现,见翻墙协议从夯到拉。

这次测试的局限

  • 一台服务器(1 核,同时还有别的实验在跑)、一个客户端、一个时段。限速、封端口、丢包都是在服务器上人为模拟的,只测了下载方向。
  • 服务器单核,最高速度大约 400 兆,受 CPU 影响。
  • 每次测速的原始输出、每秒端口记录和清理前后的规则表都留档备查。

资料来源

核对日期均为 2026 年 10 月 20 日。