一、AnyTLS 简介与准备工作
1.1 AnyTLS 是什么
本文以 sing-box 服务端为例,同时给出 AnyTLS 与 Hysteria2 的入站配置。如果你只需要 AnyTLS,可以删掉 Hysteria2 部分,只保留 AnyTLS 入站。
1.2 环境要求
- 一台 VPS,推荐 Debian 12 / Ubuntu 22.04 及以上
- 一个已经托管到 Cloudflare 的域名,例如
example.com - Cloudflare API Token,建议权限为
Zone:DNS:Edit与Zone:Zone:Read - root 权限或可使用
sudo - 放行所需端口的系统防火墙与云厂商安全组
本文示例使用端口 32802,你可以按需修改。AnyTLS 使用 TCP,Hysteria2 使用 UDP,因此二者可以共用同一端口。
二、安装 sing-box 官方最新版
2.1 方式一:官方一键脚本
官方提供了一键安装脚本,适合快速部署:
curl -fsSL https://sing-box.app/install.sh | sh
安装完成后,可以检查版本:
sing-box version
更新只需要再次执行脚本即可。
2.2 方式二:APT 仓库安装
如果你更希望使用 APT 管理更新,可以添加官方 APT 源。
# 1. 下载并添加签名密钥
mkdir -p /etc/apt/keyrings
curl -fsSL https://sing-box.app/gpg.key -o /etc/apt/keyrings/sagernet.asc
chmod a+r /etc/apt/keyrings/sagernet.asc
# 2. 添加官方 APT 存储库
echo "deb [signed-by=/etc/apt/keyrings/sagernet.asc] https://deb.sagernet.org/ * *" | tee /etc/apt/sources.list.d/sagernet.list
# 3. 更新源并安装 sing-box
apt update
apt install sing-box -y三、使用 acme.sh 申请 TLS 证书
3.1 安装 acme.sh
curl https://get.acme.sh | sh
source ~/.bashrc
3.2 配置 Cloudflare API Token
将 password 替换为你自己的 Cloudflare API Token:
export CF_Token="password"
acme.sh --set-default-ca --server letsencrypt
3.3 签发并安装证书
创建 sing-box 配置目录:
sudo mkdir -p /etc/sing-box
使用 Cloudflare DNS 验证方式签发证书:
acme.sh --issue --dns dns_cf -d example.com
将证书安装到 sing-box 指定路径并设置证书权限:
acme.sh --install-cert -d example.com \
--key-file /etc/sing-box/key.pem \
--fullchain-file /etc/sing-box/cert.pem \
--reloadcmd "chown sing-box:sing-box /etc/sing-box/key.pem /etc/sing-box/cert.pem && systemctl restart sing-box"
acme.sh 会自动创建续期任务,续期成功后会执行 reloadcmd 重启 sing-box。如果此时 sing-box 尚未配置完成,reloadcmd 可能报错,可以先忽略,等配置完成后再手动重启。
四、配置 AnyTLS 服务端
4.1 编辑配置文件
nano /etc/sing-box/config.json
4.2 完整配置示例
以下配置同时启用 AnyTLS 与 Hysteria2 入站。请替换 example.com 和密码、端口。
{
"log": {
"level": "info",
"timestamp": true
},
"inbounds": [
{
"type": "anytls",
"tag": "anytls-in",
"listen": "::",
"listen_port": 32802,
"users": [
{
"name": "my-user",
"password": "password"
}
],
"tls": {
"enabled": true,
"server_name": "example.com",
"certificate_path": "/etc/sing-box/cert.pem",
"key_path": "/etc/sing-box/key.pem"
}
},
{
"type": "hysteria2",
"tag": "hy2-in",
"listen": "::",
"listen_port": 32802,
"users": [
{
"password": "password"
}
],
"tls": {
"enabled": true,
"server_name": "example.com",
"certificate_path": "/etc/sing-box/cert.pem",
"key_path": "/etc/sing-box/key.pem"
}
}
],
"outbounds": [
{
"type": "direct",
"tag": "direct"
},
{
"type": "block",
"tag": "block"
}
]
}4.3 配置说明
log.level:日志级别,调试时可设为debug,稳定后建议info或warnanytls-in:AnyTLS 入站,使用 TCP,密码在users中配置hy2-in:Hysteria2 入站,使用 UDP,可与 AnyTLS 共用端口server_name:必须与证书域名一致,客户端 SNI 也要填写相同值,若是自签证书需要填自签证书生成时的域名certificate_path/key_path:证书路径,需确保 sing-box 用户有读取权限outbounds:最简出站,direct表示直连,block表示拦截
如果你只部署 AnyTLS,可以删除 hy2-in 整个对象,并只放行 TCP 端口。
五、启动、自启与日志
5.1 启动并设置开机自启
systemctl enable --now sing-box
systemctl start sing-box
systemctl restart sing-box
systemctl status sing-box
如果看到绿色的 active (running),说明服务已经正常运行。
5.2 查看详细日志
journalctl -u sing-box -f
如果启动失败,优先检查:
- JSON 是否存在语法错误
- 证书路径与权限是否正确
- 端口是否被占用
- 云厂商安全组与系统防火墙是否放行
- sing-box 版本是否支持
anytls
5.3 配置文件检查
在重启前,可以用以下命令检查配置:
sing-box check -c /etc/sing-box/config.json
如果没有报错,再执行重启。
喜欢的话,留下你的评论吧~