完整客户端配置
本页面提供了关于客户端配置文件中每一个字段的详细说明。
注意: 在客户端和服务端配置中的多处都有 "类型选择" 的配置格式:
type
用于确定使用哪种模式以及解析哪些子字段。在这个例子中,example
字段可以是 a
、b
或 c
。如果选择了 a
,则会解析 a
子字段,而 b
和 c
子字段则会被忽略。
服务器地址
server
字段用于指定客户端应连接到的 Hysteria 服务器地址。地址可以是 host:port
或仅 host
。如果省略端口,默认为 443。
还可以选择使用 Hysteria 2 URI(hysteria2://
)。在这种情况下,由于 URI 已经包括密码和一些其他设置,就不需要再在配置中单独指定它们。
验证
注意: 如果服务器使用
userpass
验证,格式必须是username:password
。
TLS
传输 (Transport)
transport
用于自定义 QUIC 连接使用的底层协议。目前唯一可用的类型是 udp
,保留类型选项是为了将来可能添加的其他类型。
混淆
默认 Hysteria 协议伪装为 HTTP/3。如果你的网络针对性屏蔽了 QUIC 或 HTTP/3 流量(但允许其他 UDP 流量),可以使用混淆来解决此问题。目前有一个名为 "Salamander" 的混淆实现,将数据包混淆成没有特征的 UDP 包。此功能需要一个混淆密码,密码在客户端和服务端必须相同。
注意: 使用错误的混淆密码将导致无法连接,效果如同服务器没有运行一样。如果遇到连接问题,请先仔细检查混淆密码是否正确。
QUIC 参数
quic:
initStreamReceiveWindow: 8388608
maxStreamReceiveWindow: 8388608
initConnReceiveWindow: 20971520
maxConnReceiveWindow: 20971520
maxIdleTimeout: 30s
keepAlivePeriod: 10s
disablePathMTUDiscovery: false
sockopts:
bindInterface: eth0
fwmark: 1234
fdControlUnixSocket: ./test.sock
默认的流和连接接收窗口大小分别为 8MB 和 20MB。除非你完全明白自己在做什么,否则不建议修改这些值。如果要改,建议保持流接收窗口与连接接收窗口的比例为 2:5。
注意: sockopts
项下的子选项目前仅对出站 QUIC 连接有效,对其它出站连接(例如为解析服务端地址而发送的 DNS 查询)无效。
带宽
Hysteria 内置了两套拥塞控制算法(BBR 与 Brutal),使用哪个由是否提供了带宽值决定。 如果希望使用 BBR 而不是 Brutal,可以删除整个 bandwidth
部分。详细信息请参见 带宽协商流程 与 拥塞控制细节。
⚠️ 警告 带宽值并非越大越好,请务必不要超过你当前网络环境所能达到的最大带宽。否则只会适得其反,导致网络拥塞,连接不稳定。
客户端的实际上传速度将是这里指定的值,和服务器最大下载速度(如果服务器设置中指定了)中最小的值。同理,客户端的实际下载速度将是这里指定的值,和服务器最大上传速度中最小的值。
一个例外是,如果服务器启用了 ignoreClientBandwidth
选项,这里指定的值将被忽略。
支持的单位有:
bps
或b
(每秒比特数)kbps
或kb
或k
(每秒千比特)mbps
或mb
或m
(每秒兆比特)gbps
或gb
或g
(每秒吉比特)tbps
或tb
或t
(每秒太比特)
快速打开 (Fast Open)
Fast Open 可以减少每个连接建立时一个 RTT,但代价是 SOCKS5/HTTP 等代理协议的正确语义。当这个选项启用时,客户端总是立即接受一个连接,不先与服务器确认目的地是否可达。如果服务器随后返回失败或拒绝连接,客户端将关闭连接。
懒狗模式 (Lazy)
启用该选项后,客户端只在有传入连接的时候才会连接到服务器。默认行为是在启动时立即连接到服务器。
这个选项对于启动后可能长时间没有传入连接的情况,或者刚启动时网络不一定可用的情况很有用。
代理模式
要使用 Hysteria 客户端,必须至少指定下面中的一个代理模式。
提示:从 2.4.1 版本开始,Hysteria 客户端支持单端口同时支持 SOCKS5 和 HTTP 代理,只需在配置文件中同时配置
socks5
和http
并且listen
地址完全相同即可。
SOCKS5
SOCKS5 代理服务器。支持 TCP 和 UDP。
HTTP
HTTP 代理服务器。支持 HTTP 和 HTTPS (CONNECT)。
TCP 转发
TCP 转发允许你从服务器(或任何远程主机)向客户端转发一个或多个 TCP 端口。这在某些情况下很有用,比如访问服务器本地或者内网的服务。
tcpForwarding:
- listen: 127.0.0.1:6600
remote: 127.0.0.1:6600
- listen: 127.0.0.1:6601
remote: other.machine.internal:6601
UDP 转发
UDP 转发允许你从服务器(或任何远程主机)向客户端转发一个或多个 UDP 端口。这在某些情况下很有用,比如访问服务器本地或者内网的服务。
udpForwarding:
- listen: 127.0.0.1:5300
remote: 127.0.0.1:5300
timeout: 20s
- listen: 127.0.0.1:5301
remote: other.machine.internal:5301
timeout: 20s
TCP TProxy (Linux)
TPROXY(透明代理)是一个仅限 Linux 的特性,允许透明代理 TCP 连接。详细信息请参阅 配置 TPROXY。
UDP TProxy (Linux)
TPROXY(透明代理)是一个仅限 Linux 的特性,允许透明代理 UDP 连接。详细信息请参阅 配置 TPROXY。
TCP Redirect (Linux)
REDIRECT 本质上是一种特殊的 DNAT,目标地址是本机。这种方法早于 TPROXY,是实现 TCP 透明代理的一种较旧方式。如果你的内核支持 TPROXY,我们建议使用 TPROXY 来代替 REDIRECT。
示例:
iptables -t nat -N HYSTERIA
iptables -t nat -A HYSTERIA -d 0.0.0.0/8 -j RETURN
iptables -t nat -A HYSTERIA -d 10.0.0.0/8 -j RETURN
iptables -t nat -A HYSTERIA -d 127.0.0.0/8 -j RETURN
iptables -t nat -A HYSTERIA -d 169.254.0.0/16 -j RETURN
iptables -t nat -A HYSTERIA -d 172.16.0.0/12 -j RETURN
iptables -t nat -A HYSTERIA -d 192.168.0.0/16 -j RETURN
iptables -t nat -A HYSTERIA -d 224.0.0.0/4 -j RETURN
iptables -t nat -A HYSTERIA -d 240.0.0.0/4 -j RETURN
iptables -t nat -A HYSTERIA -p tcp -j REDIRECT --to-ports 3500
iptables -t nat -A OUTPUT -p tcp -j HYSTERIA
iptables -t nat -A PREROUTING -p tcp -j HYSTERIA
ip6tables -t nat -N HYSTERIA
ip6tables -t nat -A HYSTERIA ! -d 2000::/3 -j RETURN
ip6tables -t nat -A HYSTERIA -p tcp -j REDIRECT --to-ports 3500
ip6tables -t nat -A OUTPUT -p tcp -j HYSTERIA
ip6tables -t nat -A PREROUTING -p tcp -j HYSTERIA
define HYSTERIA_REDIRECT_PORT=3500
define BYPASS_IPV4={
0.0.0.0/8, 10.0.0.0/8, 127.0.0.0/8, 169.254.0.0/16,
172.16.0.0/12, 192.168.0.0/16, 224.0.0.0/3
}
define BYPASS_IPV6={ ::/128 }
table inet hysteria_redirect {
chain prerouting {
type nat hook prerouting priority filter; policy accept;
meta l4proto tcp counter jump hysteria
}
chain output {
type nat hook output priority filter; policy accept;
meta l4proto tcp counter jump hysteria
}
chain hysteria {
ip daddr $BYPASS_IPV4 counter return
ip6 daddr $BYPASS_IPV6 counter return
ip6 daddr != 2000::/3 counter return
meta l4proto tcp counter redirect to :$HYSTERIA_REDIRECT_PORT
}
}
TUN
TUN 是一个跨平台的透明代理解决方案,在系统中创建虚拟网卡,利用系统路由功能来捕获及重定向流量。目前兼容 Windows、Linux 和 macOS 平台。
不同于常规的三层 VPN 技术(如 WireGuard 和 OpenVPN),Hysteria 的 TUN 模式只能处理 TCP 和 UDP 流量,不支持 ICMP 等其它协议(这意味着不支持 ping 等操作)。其会完全接管 TCP 协议栈以加速 TCP 连接。
与 Hysteria 1 的 TUN 实现相比,Hysteria 2 的 TUN 基于 sing-tun 的 "system" 栈,需要在虚拟网卡上配置一个 /30 的 IPv4 地址和一个 /126 的 IPv6 地址。Hysteria 会自动完成网卡、地址和路由规则的配置。
注意:
ipv4Exclude
/ipv6Exclude
对于避免形成路由环路非常重要。请见这两个字段的注释以了解更多信息。
tun:
name: "hytun"
mtu: 1500
timeout: 5m
address:
ipv4: 100.100.100.101/30
ipv6: 2001::ffff:ffff:ffff:fff1/126
route:
ipv4: [0.0.0.0/0]
ipv6: ["2000::/3"]
ipv4Exclude: [192.0.2.1/32]
ipv6Exclude: ["2001:db8::1/128"]
注意:Linux 上有时需要禁用 rp_filter
才能让一个网卡接收来自其他网卡的流量。
已知的兼容性问题:
操作系统 | 问题 |
---|---|
macOS | TUN 接口的名称必须是 utun+数字, 例如 utun123 。 |
Windows Server 2022 | 需要禁用防火墙才能正常使用。 |
CentOS 7 | 需要禁用防火墙才能正常使用。 对于 4.17 之前的内核,自动添加的路由规则将无法正常工作(原因), 可将内核升级到 4.17 或更高版本,或者在 Hysteria 客户端启动后执行 ip rule del from all goto 9010; ip -6 rule del from all goto 9010 来解决此问题。 |
FreeBSD | 无法使用,不被 sing-tun 支持。 |