与Caddy复用端口的Hysteria2代理方案


前言

对于部分侧重发包而非传输可靠性的使用场景如流媒体、直播、游戏联机的场景,如果您的VPS线路足够优质,那么自建基于UDP协议的Hysteria2节点能帮您省下游戏加速器的花费。本文将为使用Caddy建站的服主们提供Hysteria2的端口复用伪装部署方式。

准备

  • 本系列将继续沿用在前篇中详述过的Caddy负责入站分流、sing-box为多协议代理后端的方案架构,故本次仅针对换用Hysteria2协议而产生的些微改动做重点说明。如果您是初学者,请结合系列其他文章拼凑出完整的配置文件。
  • Hysteria2通过模拟Web Server的行为实现伪装,对象是同服务器上部署的真实网站blog.mydomain.com,我们假设您已经在服务器上建站并为其申请了SSL证书,在之后的实现中会调用它。

安装与配置

Caddy

Caddy的安装过程不再赘述。原本Web Server会接管TCP和UDP传输层响应不同http协议版本的网站请求,这通常发生在同一个接口上,为保证伪装效果代理后端需要和Web Server复用监听接口。对Caddy一侧来说意味着在配置文件中禁用对HTTP/3支持以避免占用UDP 8443端口:

/etc/caddy/Caddyfile(节选)
1
2
3
4
5
6
7
8
9
10
{
# Global Options
servers :8443 {
protocols h1 h2 h2c # 监听协议不包含UDP上的HTTP/3
}
...
}
*.mydomain.com {
...
}

sing-box

无论您使用什么后端实现Hysteria2服务,它都需要代替Caddy接管服务器https端口的UDP流量,对其中访问服务器上网站blog.mydomain.com的常规流量和Hysteria2代理协议流量分流处理。
在sing-box配置模板中我们使用了相对保守的BBR流控算法。要使用它,除了需要设定代理用户的MY_USERNAMEMY_PASSWORD,还需要按实际情况修改网站域名等信息、确保证书路径能够被sing-box正确索引,否则你需要让代理后端自签证书提供给Hysteria2。

/etc/singbox/config.json(节选)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
{
...
"inbounds": [{
"tag": "hy2-in",
"type": "hysteria2",
"listen": "::",
"listen_port": 8443,
"ignore_client_bandwidth": true,
"masquerade": "http://localhost:8080",
"users": [{
"name": "MY_USERNAME",
"password": "MY_PASSWORD"
}],
"tls": {
"enabled": true,
"server_name": "blog.mydomain.com",
"key_path": "/path/to/wildcard_.mydomain.com.key",
"certificate_path": "/path/to/wildcard_.mydomain.com.crt"
}
}],
"outbounds": [...],
"route": {
"rules": [
{
"inbound": ["hy2-in"],
"action": "sniff"
}
]
...
}
}

性能调优

调增UDP缓冲区(此处为16M)

1
echo "net.core.rmem_max=16777216" >> /etc/sysctl.conf && echo "net.core.wmem_max=16777216" >> /etc/sysctl.conf

客户端配置

使用剪贴板将节点分享链接导入您的客户端。其中MY_PASSWORD需要和sing-box配置文件保持一致。

1
hysteria2://[email protected]:8443?insecure=0

完成!

启动Caddy与sing-box服务。此时可通过sudo ss -lnp | grep :8443命令查询接口占用情况。若配置无误,可以看到Caddy和sing-box分别监听8443端口的TCP和UDP。
若有余力,还可以模拟网络審查官员使用curl --http3-only https://blog.mydomain.com:8443对端口进行扫描,会返回服务器上网站的真实网页内容以达到伪装目的。
对于已经在使用xray协议的用户请注意,Hysteria2不支持CDN中转流量。