6.7 KiB
Hysteria 是专门针对恶劣网络环境(常见于在中国访问海外服务器)进行优化的连接转发和代理工具(即所谓的双边加速)。其基于修改版的 QUIC 协议,可以理解为是我此前弃坑的项目 https://github.com/dragonite-network/dragonite-java 的续作。
快速入门
关于每个参数具体的含义请见 高级用法
代理
服务端
./cmd_linux_amd64 proxy server -listen :36712 -cert example.crt -key example.key -obfs BlueberryFaygo
服务端需要一个 TLS 证书(不一定是由可信 CA 签发的有效证书)。如果你使用自签证书,请在客户端使用 -ca
指定你自己的 CA 文件,或者用 -insecure
忽略所有证书错误(不推荐)
客户端
./cmd_linux_amd64 proxy client -server example.com:36712 -socks5-addr localhost:1080 -up-mbps 10 -down-mbps 50 -obfs BlueberryFaygo
在客户端的本地 TCP 1080 上启动一个 SOCKS5 代理服务器供其他程序使用。
除了 SOCKS5 还支持 HTTP 代理 (-http-addr
& -http-timeout
)。两个模式可以同时开在不同端口。
-up-mbps 10 -down-mbps 50
是告诉服务端你的下行速度为 50 Mbps, 上行 10 Mbps。根据实际网络条件正确设置客户端的上传和下载速度十分重要!
转发
假设你想转发服务端上 localhost:8080
的一个 TCP 协议程序。
服务端
./cmd_linux_amd64 relay server -listen :36712 -remote localhost:8080 -cert example.crt -key example.key
客户端
./cmd_linux_amd64 relay client -server example.com:36712 -listen localhost:8080 -up-mbps 10 -down-mbps 50
所有到客户端本地 TCP 8080 的 TCP 连接都将通过转发,到服务器连接那里的 localhost:8080
有些用户可能会尝试用这个功能转发其他加密代理协议,比如Shadowsocks。虽然这完全可行,但从性能的角度并不是最佳选择 - 我们的协议本身就有 TLS,转发的代理协议也是加密的,再加上用户用来访问 HTTPS 网站,等于做了三重加密。如果需要代理就用我们的代理模式。
对比
代理客户端:广州移动宽带 100M
代理服务端:AWS 美西 Oregon (us-west-2) (最差线路之一)
高级用法
命令行程序支持从 JSON 文件和参数加载配置。使用 -config
指定一个JSON文件。从文件加载的配置也可以被命令行参数覆盖或进一步扩展。
代理 服务端
描述 | JSON 字段 | 命令行参数 |
---|---|---|
服务端监听地址 | listen | -listen |
禁用 UDP 支持 | disable_udp | -disable-udp |
ACL 规则文件 | acl | -acl |
TLS 证书文件 | cert | -cert |
TLS 密钥文件 | key | -key |
用户名密码验证文件 | auth | -auth |
单客户端最大上传速度 Mbps | up_mbps | -up-mbps |
单客户端最大下载速度 Mbps | down_mbps | -down-mbps |
单连接最大接收窗口大小 | recv_window_conn | -recv-window-conn |
单客户端最大接收窗口大小 | recv_window_client | -recv-window-client |
单客户端最大连接数 | max_conn_client | -max-conn-client |
混淆密钥 | obfs | -obfs |
代理 客户端
描述 | JSON 字段 | 命令行参数 |
---|---|---|
SOCKS5 监听地址 | socks5_addr | -socks5-addr |
SOCKS5 超时时间(秒) | socks5_timeout | -socks5-timeout |
禁用 SOCKS5 UDP 支持 | socks5_disable_udp | -socks5-disable-udp |
HTTP 监听地址 | http_addr | -http-addr |
HTTP 超时时间(秒) | http_timeout | -http-timeout |
ACL 规则文件 | acl | -acl |
服务端地址 | server | -server |
验证用户名 | username | -username |
验证密码 | password | -password |
忽略证书错误 | insecure | -insecure |
指定可信 CA 文件 | ca | -ca |
上传速度 Mbps | up_mbps | -up-mbps |
下载速度 Mbps | down_mbps | -down-mbps |
单连接最大接收窗口大小 | recv_window_conn | -recv-window-conn |
总最大接收窗口大小 | recv_window | -recv-window |
混淆密钥 | obfs | -obfs |
关于 SOCKS5
支持 TCP (CONNECT) 和 UDP (ASSOCIATE),不支持 BIND 也无计划支持。
关于 ACL
关于用户名密码验证
代理支持用户名和密码认证(经过 TLS 加密发送)。如果服务器启动时指定了一个验证文件,当每个用户连接时,服务器会检查该文件中是否存在相应的用户名和密码。验证文件是一个文本文件,每行有一对用户名和密码(用空格分割)。比如:
admin K2MfcwyZNJy3
shady_hacker smokeweed420
这行无效会被忽略
对文件的更改立即生效,即使服务端正在运行。
关于混淆
为了防止各类防火墙今后可能检测并阻止协议,程序内置了简单的基于 XOR 的数据包混淆机制。注意客户端和服务器的混淆设置如果不同则完全无法通信。
转发 服务端
描述 | JSON 字段 | 命令行参数 |
---|---|---|
服务端监听地址 | listen | -listen |
转发目标地址 | remote | -remote |
TLS 证书文件 | cert | -cert |
TLS 密钥文件 | key | -key |
单客户端最大上传速度 Mbps | up_mbps | -up-mbps |
单客户端最大下载速度 Mbps | down_mbps | -down-mbps |
单连接最大接收窗口大小 | recv_window_conn | -recv-window-conn |
单客户端最大接收窗口大小 | recv_window_client | -recv-window-client |
单客户端最大连接数 | max_conn_client | -max-conn-client |
混淆密钥 | obfs | -obfs |
转发 客户端
描述 | JSON 字段 | 命令行参数 |
---|---|---|
TCP 监听地址 | listen | -listen |
服务端地址 | server | -server |
客户端名称 | name | -name |
忽略证书错误 | insecure | -insecure |
指定可信 CA 文件 | ca | -ca |
上传速度 Mbps | up_mbps | -up-mbps |
下载速度 Mbps | down_mbps | -down-mbps |
单连接最大接收窗口大小 | recv_window_conn | -recv-window-conn |
总最大接收窗口大小 | recv_window | -recv-window |
混淆密钥 | obfs | -obfs |
日志
程序默认在 stdout 输出 DEBUG 级别,文字格式的日志。
如果需要修改日志级别可以使用 LOGGING_LEVEL
环境变量,支持 panic
, fatal
, error
, warn
, info
, debug
, trace
如果需要输出 JSON 可以把 LOGGING_FORMATTER
设置为 json