8.8 KiB
AnyTLS-go 备用服务器安装指南
1. 文档信息
| 项目 | 内容 |
|---|---|
| 目标 | 在 Linux 服务器上安装 AnyTLS-go,作为 VLESS + REALITY 主入口之外的备用入口 |
| 适用架构 | x86_64/amd64、aarch64/arm64 |
| 示例版本 | v0.0.13 |
| 默认端口 | 8443/TCP |
| 更新日期 | 2026-07-25 |
本文是 VLESS + REALITY 与 AnyTLS 双协议部署方案 中 AnyTLS 备用入口的详细安装步骤。安装的是 anytls/anytls-go 参考服务端实现,默认独立监听 8443/TCP,不与监听 443/TCP 的 Xray 服务互相转发。执行前,将文中的端口、服务器地址和密码按实际环境填写。
重要限制:官方将 AnyTLS-go 定位为协议参考实现,而不是功能完备的生产级服务端。当前
anytls-server会在每次启动时生成一个短期自签名证书,不支持通过命令行加载正式证书。客户端需要允许该实现对应的不安全证书校验方式。若生产环境要求校验证书、域名和 SNI,应改用支持 AnyTLS 的 sing-box 服务端方案。
2. 部署参数
安装前确认以下参数:
| 参数 | 示例 | 说明 |
|---|---|---|
| 服务器公网地址 | <SERVER_IP_OR_DOMAIN> |
客户端连接地址 |
| 服务端口 | 8443 |
必须为未占用的 TCP 端口 |
| 密码 | <RANDOM_HEX_PASSWORD> |
建议使用至少 32 字节随机值 |
| CPU 架构 | amd64 或 arm64 |
由 uname -m 确认 |
同时确认云平台安全组、主机防火墙和上游网络均允许所选 TCP 端口入站。
3. 前置检查
登录服务器后执行:
uname -m
cat /etc/os-release
sudo ss -lntp 'sport = :8443'
架构对应关系:
uname -m 输出 |
发布包架构 |
|---|---|
x86_64 |
amd64 |
aarch64 或 arm64 |
arm64 |
若端口检查有输出,说明 8443 已被占用,应先选择其他端口。
安装依赖,按服务器发行版选择一组命令:
# Debian / Ubuntu
sudo apt-get update
sudo apt-get install -y curl unzip openssl
# RHEL / Rocky Linux / AlmaLinux
sudo dnf install -y curl unzip openssl
4. 下载并安装
以下命令固定安装 v0.0.13,并使用 GitHub Release 提供的 SHA-256 摘要校验安装包:
ANYTLS_VERSION=0.0.13
case "$(uname -m)" in
x86_64)
ANYTLS_ARCH=amd64
EXPECTED_SHA256=7e80fc099ea54a71110d256dd60648c47c63c70a3c499eb1f6d7aaa4edb7016f
;;
aarch64|arm64)
ANYTLS_ARCH=arm64
EXPECTED_SHA256=88cb762c3c8eb56b46a2d8d6feab9c0858655192143fc164874229499246a956
;;
*)
echo "不支持的 CPU 架构: $(uname -m)" >&2
exit 1
;;
esac
WORK_DIR="$(mktemp -d)"
PACKAGE="anytls_${ANYTLS_VERSION}_linux_${ANYTLS_ARCH}.zip"
curl --fail --location \
--output "${WORK_DIR}/${PACKAGE}" \
"https://github.com/anytls/anytls-go/releases/download/v${ANYTLS_VERSION}/${PACKAGE}"
echo "${EXPECTED_SHA256} ${WORK_DIR}/${PACKAGE}" | sha256sum --check -
unzip "${WORK_DIR}/${PACKAGE}" -d "${WORK_DIR}/anytls"
sudo install -m 0755 "${WORK_DIR}/anytls/anytls-server" /usr/local/bin/anytls-server
/usr/local/bin/anytls-server -h
只有在校验结果显示 OK 后才继续安装。版本升级时,必须同时更新版本号和对应架构的官方 SHA-256 摘要。
5. 创建运行用户和配置
创建无登录权限的系统用户:
sudo groupadd --system anytls
sudo useradd --system --gid anytls --no-create-home --shell /usr/sbin/nologin anytls
sudo install -d -m 0750 -o root -g anytls /etc/anytls-go
生成一个 32 字节随机密码:
openssl rand -hex 32
记录输出结果,然后创建配置文件:
sudoedit /etc/anytls-go/anytls.env
写入以下内容,将占位符替换为刚生成的密码:
ANYTLS_LISTEN=0.0.0.0:8443
ANYTLS_PASSWORD=<RANDOM_HEX_PASSWORD>
设置配置文件权限:
sudo chown root:anytls /etc/anytls-go/anytls.env
sudo chmod 0640 /etc/anytls-go/anytls.env
anytls-server当前只支持通过-p参数接收密码,因此运行时密码会出现在服务进程的命令行参数中。配置文件权限只能减少静态文件泄露风险,不能消除这一实现限制。服务器应限制非必要的系统登录账号。
6. 创建 systemd 服务
创建服务文件:
sudoedit /etc/systemd/system/anytls-go.service
写入:
[Unit]
Description=AnyTLS-go Server
Documentation=https://github.com/anytls/anytls-go
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=anytls
Group=anytls
EnvironmentFile=/etc/anytls-go/anytls.env
ExecStart=/usr/local/bin/anytls-server -l ${ANYTLS_LISTEN} -p ${ANYTLS_PASSWORD}
Restart=on-failure
RestartSec=5s
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
ProtectKernelTunables=true
ProtectKernelModules=true
ProtectControlGroups=true
RestrictAddressFamilies=AF_INET AF_INET6
LockPersonality=true
MemoryDenyWriteExecute=true
UMask=0077
[Install]
WantedBy=multi-user.target
检查并启动服务:
sudo systemd-analyze verify /etc/systemd/system/anytls-go.service
sudo systemctl daemon-reload
sudo systemctl enable --now anytls-go
sudo systemctl status anytls-go --no-pager
7. 放行端口
除云平台安全组外,还需按服务器实际使用的防火墙选择一组命令。不要同时配置 UFW 和 firewalld。
UFW:
sudo ufw allow 8443/tcp
sudo ufw status
firewalld:
sudo firewall-cmd --permanent --add-port=8443/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-ports
若使用了其他端口,需要同步修改防火墙规则和 /etc/anytls-go/anytls.env。
8. 服务端验收
确认服务处于运行状态并监听预期端口:
sudo systemctl is-active anytls-go
sudo ss -lntp 'sport = :8443'
sudo journalctl -u anytls-go -n 50 --no-pager
期望日志包含类似内容:
[Server] anytls-go ...
[Server] Listening TCP 0.0.0.0:8443
从另一台可访问服务器的设备检查公网端口:
nc -vz <SERVER_IP_OR_DOMAIN> 8443
端口连通只说明 TCP 链路正常,完整验收仍需通过 AnyTLS 客户端发起代理请求。
9. 客户端联调
使用同版本参考客户端进行基础联调:
./anytls-client \
-l 127.0.0.1:1080 \
-s <SERVER_IP_OR_DOMAIN>:8443 \
-p <RANDOM_HEX_PASSWORD>
另开一个终端,通过本地 SOCKS5 代理验证出口:
curl --proxy socks5h://127.0.0.1:1080 https://api.ipify.org
v0.0.12 及以上版本也支持 URI:
anytls://<RANDOM_HEX_PASSWORD>@<SERVER_IP_OR_DOMAIN>:8443
使用 sing-box、mihomo、Shadowrocket 等第三方客户端时,至少需要填写服务器地址、端口和相同密码。由于参考服务端使用临时自签名证书,还需要按客户端文档配置对应的跳过证书校验选项;不要将这一配置套用到支持正式证书的其他服务端。
10. 日常运维
常用命令:
sudo systemctl restart anytls-go
sudo systemctl stop anytls-go
sudo systemctl start anytls-go
sudo journalctl -u anytls-go -f
修改端口或密码后执行:
sudo systemctl restart anytls-go
sudo systemctl status anytls-go --no-pager
升级时下载目标版本对应架构的发布包,核对官方摘要,重新安装 /usr/local/bin/anytls-server,然后重启并重复第 8、9 节的验收步骤。
11. 故障排查
| 现象 | 检查项 |
|---|---|
| 服务启动失败 | journalctl -u anytls-go -n 100 --no-pager;检查环境文件格式及权限 |
| 提示端口被占用 | ss -lntp 'sport = :8443';更换端口或停止冲突服务 |
| 外网无法连接 | 云安全组、主机防火墙、运营商或机房入站策略 |
| TCP 可连接但代理失败 | 客户端协议类型、端口、密码、证书校验设置是否一致 |
| 重启后客户端证书报错 | 参考服务端每次启动都会重新生成临时自签名证书 |
| 下载速度异常 | 服务器线路质量、丢包、MTU、客户端实现和 CPU 使用率 |
12. 卸载
确认不再使用后执行:
sudo systemctl disable --now anytls-go
sudo rm /etc/systemd/system/anytls-go.service
sudo systemctl daemon-reload
sudo rm /usr/local/bin/anytls-server
sudo rm /etc/anytls-go/anytls.env
sudo rmdir /etc/anytls-go
sudo userdel anytls
最后删除云安全组和主机防火墙中的 AnyTLS 端口放行规则。上述操作会删除服务配置和密码,执行前应确认没有其他服务复用这些文件或账号。