最近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: <强密码>
# 提高连接稳定性
upMTU: 1200
downMTU: 1200
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: <强密码>
# 和服务端一致 提高连接稳定性
upMTU: 1200
downMTU: 1200
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
这样基本上就不会断了,客户端检测到链接不到会自动重启。