最近GFW好像又有升级,原本的gost mtls方案似乎速度受到了严重限制,也许AI时代,强化了DPI对TCP协议的嗅探吧。家里的翻美西的上行速度受到严重影响,这几天正好有时间,稍微研究了下,发现了个新的翻墙利器Hysteria2,似乎是基于udp的,上行速度明显改善,操作流程这里笔记一下。

官方网站:https://v2.hysteria.network/

一,安装

从官网(https://v2.hysteria.network/zh/docs/getting-started/Installation/)直接下载二进制执行程序(Windows环境)或者通过脚本安装(Linux)都是OK的。

bash <(curl -fsSL https://get.hy2.sh/)

二,运行启动

./hysteria-linux-amd64-avx server -c config.yaml    //启动服务端
./hysteria-linux-amd64-avx client -c config.yaml    //启动客户端

三,关于配置

运行启动非常简单,配置其实也不麻烦,原本参考官网使用了个免费域名(https://freedomain.one/)+免费ssl证明书(Hysteria2内置)实现带tls验证的方式。但是由于是udp的协议,其实是用不了cloudflare的cdn之类的加速。加上如果不带混淆,稳定性也是问题。最终使用放弃了证书方式。当然虽然不验证但是服务端一个起码的自签名的证书对还是要的。下面是我的配置

服务端配置:

listen: :8443
auth:
  type: password
  password: <强密码>
# 提高连接稳定性
idleTimeout: 0s
fastOpen: true
noDelay: true
readBufferSize: 2097152

# 根据需要调整,和客户端反向
bandwidth:
  up_mbps: 400                    
  down_mbps: 40

quic:
  initStreamReceiveWindow: 26843545
  maxStreamReceiveWindow: 26843545
  initConnReceiveWindow: 67108864
  maxConnReceiveWindow: 67108864
  maxIdleTimeout: 30s
  keepAlivePeriod: 10s
  maxIncomingStreams: 1024
  disablePathMTUDiscovery: false

tls:
  cert: <证书.crt文件>
  key: <私钥.key文件>
  sniGuard: disable

obfs:
  type: salamander
  salamander:
    password: <混淆用强密码>

客户端配置:

# 服务端地址和端口
server: <服务器IP地址>:8443

# 身份验证配置
auth: <强密码>

# 和服务端一致 提高连接稳定性
idleTimeout: 0s
fastOpen: true
noDelay: true
readBufferSize: 2097152
# 和服务端反向
bandwidth:
  up_mbps: 40
  down_mbps: 400

quic:
  initStreamReceiveWindow: 26843545
  maxStreamReceiveWindow: 26843545
  initConnReceiveWindow: 67108864
  maxConnReceiveWindow: 67108864
  maxIdleTimeout: 30s
  keepAlivePeriod: 10s
  maxIncomingStreams: 1024
  disablePathMTUDiscovery: false
# 混淆
obfs:
  type: salamander
  salamander:
    password: <混淆用强密码>
# 不适用证书验证
tls:
  insecure: true  

# 配置代理(使用 SOCKS5)
socks5:
  listen: 0.0.0.0:1097  # 监听本地 SOCKS5 代理,端口可以按需修改
# 端口转发(比如暴露客户端3090端口,重定向到服务端3088端口的SS服务)
tcpForwarding:
  - listen: :3090
    remote: 127.0.0.1:3088

进一步优化,自动重启等。

1,创建服务文件(/etc/systemd/system/)

[Unit]
Description=Hysteria 2 Client WIN
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/hysteria -c /etc/hysteria/win-client.yaml
Restart=on-failure

[Install]
WantedBy=multi-user.target

2,然后注册并启动这个服务

systemctl enable --now hysteria-client.service          # 注册服务
systemctl restart hysteria-client.service               # 重启服务
systemctl status hysteria-client.service                # 服务状态查看
journalctl --no-pager -e -u hysteria-client.service     # 查看Log

三,监视及心跳程序

考虑到upd协议本身的限制,如果长时间闲置或者网路忙,可能会在通路节点被清理,所以顺便实现了个监视程序,每分钟链接一次,如果网络断了则重新链接。 (/usr/local/bin/)check-hysteria.sh

#!/bin/bash
URL="https://1.1.1.1"
# 随机延迟一点,自我感觉可以降低暴露可能性,纯自我安慰
sleep $((RANDOM % 60))
# 使用 hysteria2 的本地 SOCKS5 代理访问
if curl -s --socks5-hostname 127.0.0.1:1097 --max-time 10 $URL >/dev/null; then
    exit 0
else
    systemctl restart hysteria-client.service
fi

配置定时任务:创建(/etc/systemd/system/)hysteria-watchdog-client.timer:

[Unit]
Description=Hysteria connectivity watchdog timer

[Timer]
OnBootSec=2min
OnUnitActiveSec=1min

[Install]
WantedBy=timers.target

然后配置相应的服务(/etc/systemd/system/) hysteria-watchdog-client.service

[Unit]
Description=Check Hysteria connectivity

[Service]
Type=oneshot
ExecStart=/usr/local/bin/check-hysteria-client.sh

启用这个timer

chmod +x /usr/local/bin/check-hysteria.sh
systemctl daemon-reload
systemctl enable --now hysteria-watchdog.timer

这样基本上就不会断了,客户端检测到链接不到会自动重启。

最后修改日期: 2025年5月9日

作者