跳转至

完整客户端配置

本页面提供了关于客户端配置文件中每一个字段的详细说明。

注意: 在客户端和服务端配置中的多处都有 "类型选择" 的配置格式:

example:
  type: a
  a:
    something: something
  b:
    something: something
  c:
    something: something

type 用于确定使用哪种模式以及解析哪些子字段。在这个例子中,example 字段可以是 abc。如果选择了 a,则会解析 a 子字段,而 bc 子字段则会被忽略。

服务器地址

server 字段用于指定客户端应连接到的 Hysteria 服务器地址。地址可以是 host:port 或仅 host。如果省略端口,默认为 443。

还可以选择使用 Hysteria 2 URI(hysteria2://)。在这种情况下,由于 URI 已经包括密码和一些其他设置,就不需要再在配置中单独指定它们。

server: example.com
server: hysteria2://user:pass@example.com/

验证

auth: some_password

注意: 如果服务器使用 userpass 验证,格式必须是 username:password

TLS

tls:
  sni: another.example.com 
  insecure: false 
  pinSHA256: BA:88:45:17:A1... 
  ca: custom_ca.crt 

传输 (Transport)

transport 用于自定义 QUIC 连接使用的底层协议。目前唯一可用的类型是 udp,保留类型选项是为了将来可能添加的其他类型。

transport:
  type: udp 
  udp:
    hopInterval: 30s 

混淆

默认 Hysteria 协议伪装为 HTTP/3。如果你的网络针对性屏蔽了 QUIC 或 HTTP/3 流量(但允许其他 UDP 流量),可以使用混淆来解决此问题。目前有一个名为 "Salamander" 的混淆实现,将数据包混淆成没有特征的 UDP 包。此功能需要一个混淆密码,密码在客户端和服务端必须相同。

注意: 使用错误的混淆密码将导致无法连接,效果如同服务器没有运行一样。如果遇到连接问题,请先仔细检查混淆密码是否正确。

obfs:
  type: salamander 
  salamander:
    password: cry_me_a_r1ver 

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 查询)无效。

带宽

bandwidth:
  up: 100 mbps
  down: 200 mbps

Hysteria 内置了两套拥塞控制算法(BBR 与 Brutal),使用哪个由是否提供了带宽值决定。 如果希望使用 BBR 而不是 Brutal,可以删除整个 bandwidth 部分。详细信息请参见 带宽协商流程拥塞控制细节

⚠️ 警告 带宽值并非越大越好,请务必不要超过你当前网络环境所能达到的最大带宽。否则只会适得其反,导致网络拥塞,连接不稳定。

客户端的实际上传速度将是这里指定的值,和服务器最大下载速度(如果服务器设置中指定了)中最小的值。同理,客户端的实际下载速度将是这里指定的值,和服务器最大上传速度中最小的值。

一个例外是,如果服务器启用了 ignoreClientBandwidth 选项,这里指定的值将被忽略。

支持的单位有:

  • bpsb(每秒比特数)
  • kbpskbk(每秒千比特)
  • mbpsmbm(每秒兆比特)
  • gbpsgbg(每秒吉比特)
  • tbpstbt(每秒太比特)

快速打开 (Fast Open)

Fast Open 可以减少每个连接建立时一个 RTT,但代价是 SOCKS5/HTTP 等代理协议的正确语义。当这个选项启用时,客户端总是立即接受一个连接,不先与服务器确认目的地是否可达。如果服务器随后返回失败或拒绝连接,客户端将关闭连接。

fastOpen: true

懒狗模式 (Lazy)

启用该选项后,客户端只在有传入连接的时候才会连接到服务器。默认行为是在启动时立即连接到服务器。

这个选项对于启动后可能长时间没有传入连接的情况,或者刚启动时网络不一定可用的情况很有用。

lazy: true

代理模式

要使用 Hysteria 客户端,必须至少指定下面中的一个代理模式。

提示:从 2.4.1 版本开始,Hysteria 客户端支持单端口同时支持 SOCKS5 和 HTTP 代理,只需在配置文件中同时配置 socks5http 并且 listen 地址完全相同即可。

SOCKS5

SOCKS5 代理服务器。支持 TCP 和 UDP。

socks5:
  listen: 127.0.0.1:1080 
  username: user 
  password: pass 
  disableUDP: false 

HTTP

HTTP 代理服务器。支持 HTTP 和 HTTPS (CONNECT)。

http:
  listen: 127.0.0.1:8080 
  username: king 
  password: kong 
  realm: martian 

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

tcpTProxy:
  listen: :2500 

UDP TProxy (Linux)

TPROXY(透明代理)是一个仅限 Linux 的特性,允许透明代理 UDP 连接。详细信息请参阅 配置 TPROXY

udpTProxy:
  listen: :2500 
  timeout: 20s 

TCP Redirect (Linux)

REDIRECT 本质上是一种特殊的 DNAT,目标地址是本机。这种方法早于 TPROXY,是实现 TCP 透明代理的一种较旧方式。如果你的内核支持 TPROXY,我们建议使用 TPROXY 来代替 REDIRECT。

tcpRedirect:
  listen: :3500

示例:

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 才能让一个网卡接收来自其他网卡的流量。

sysctl net.ipv4.conf.default.rp_filter=2
sysctl net.ipv4.conf.all.rp_filter=2

已知的兼容性问题:

操作系统 问题
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 支持