Files
ttx-project-doc/运维/AnyTLS-go服务器安装指南.md
T

8.8 KiB
Raw Blame History

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 架构 amd64arm64 uname -m 确认

同时确认云平台安全组、主机防火墙和上游网络均允许所选 TCP 端口入站。

3. 前置检查

登录服务器后执行:

uname -m
cat /etc/os-release
sudo ss -lntp 'sport = :8443'

架构对应关系:

uname -m 输出 发布包架构
x86_64 amd64
aarch64arm64 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 端口放行规则。上述操作会删除服务配置和密码,执行前应确认没有其他服务复用这些文件或账号。

13. 参考资料