# AnyTLS-go 备用服务器安装指南 ## 1. 文档信息 | 项目 | 内容 | | --- | --- | | 目标 | 在 Linux 服务器上安装 AnyTLS-go,作为 VLESS + REALITY 主入口之外的备用入口 | | 适用架构 | x86_64/amd64、aarch64/arm64 | | 示例版本 | `v0.0.13` | | 默认端口 | `8443/TCP` | | 更新日期 | 2026-07-25 | 本文是 [VLESS + REALITY 与 AnyTLS 双协议部署方案](VLESS-Reality与AnyTLS双协议部署指南.md) 中 AnyTLS 备用入口的详细安装步骤。安装的是 [`anytls/anytls-go`](https://github.com/anytls/anytls-go) 参考服务端实现,默认独立监听 `8443/TCP`,不与监听 `443/TCP` 的 Xray 服务互相转发。执行前,将文中的端口、服务器地址和密码按实际环境填写。 > **重要限制**:官方将 AnyTLS-go 定位为协议参考实现,而不是功能完备的生产级服务端。当前 `anytls-server` 会在每次启动时生成一个短期自签名证书,不支持通过命令行加载正式证书。客户端需要允许该实现对应的不安全证书校验方式。若生产环境要求校验证书、域名和 SNI,应改用支持 AnyTLS 的 sing-box 服务端方案。 ## 2. 部署参数 安装前确认以下参数: | 参数 | 示例 | 说明 | | --- | --- | --- | | 服务器公网地址 | `` | 客户端连接地址 | | 服务端口 | `8443` | 必须为未占用的 TCP 端口 | | 密码 | `` | 建议使用至少 32 字节随机值 | | CPU 架构 | `amd64` 或 `arm64` | 由 `uname -m` 确认 | 同时确认云平台安全组、主机防火墙和上游网络均允许所选 TCP 端口入站。 ## 3. 前置检查 登录服务器后执行: ```bash uname -m cat /etc/os-release sudo ss -lntp 'sport = :8443' ``` 架构对应关系: | `uname -m` 输出 | 发布包架构 | | --- | --- | | `x86_64` | `amd64` | | `aarch64` 或 `arm64` | `arm64` | 若端口检查有输出,说明 `8443` 已被占用,应先选择其他端口。 安装依赖,按服务器发行版选择一组命令: ```bash # Debian / Ubuntu sudo apt-get update sudo apt-get install -y curl unzip openssl ``` ```bash # RHEL / Rocky Linux / AlmaLinux sudo dnf install -y curl unzip openssl ``` ## 4. 下载并安装 以下命令固定安装 `v0.0.13`,并使用 GitHub Release 提供的 SHA-256 摘要校验安装包: ```bash 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. 创建运行用户和配置 创建无登录权限的系统用户: ```bash 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 字节随机密码: ```bash openssl rand -hex 32 ``` 记录输出结果,然后创建配置文件: ```bash sudoedit /etc/anytls-go/anytls.env ``` 写入以下内容,将占位符替换为刚生成的密码: ```ini ANYTLS_LISTEN=0.0.0.0:8443 ANYTLS_PASSWORD= ``` 设置配置文件权限: ```bash sudo chown root:anytls /etc/anytls-go/anytls.env sudo chmod 0640 /etc/anytls-go/anytls.env ``` > `anytls-server` 当前只支持通过 `-p` 参数接收密码,因此运行时密码会出现在服务进程的命令行参数中。配置文件权限只能减少静态文件泄露风险,不能消除这一实现限制。服务器应限制非必要的系统登录账号。 ## 6. 创建 systemd 服务 创建服务文件: ```bash sudoedit /etc/systemd/system/anytls-go.service ``` 写入: ```ini [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 ``` 检查并启动服务: ```bash 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: ```bash sudo ufw allow 8443/tcp sudo ufw status ``` firewalld: ```bash sudo firewall-cmd --permanent --add-port=8443/tcp sudo firewall-cmd --reload sudo firewall-cmd --list-ports ``` 若使用了其他端口,需要同步修改防火墙规则和 `/etc/anytls-go/anytls.env`。 ## 8. 服务端验收 确认服务处于运行状态并监听预期端口: ```bash sudo systemctl is-active anytls-go sudo ss -lntp 'sport = :8443' sudo journalctl -u anytls-go -n 50 --no-pager ``` 期望日志包含类似内容: ```text [Server] anytls-go ... [Server] Listening TCP 0.0.0.0:8443 ``` 从另一台可访问服务器的设备检查公网端口: ```bash nc -vz 8443 ``` 端口连通只说明 TCP 链路正常,完整验收仍需通过 AnyTLS 客户端发起代理请求。 ## 9. 客户端联调 使用同版本参考客户端进行基础联调: ```bash ./anytls-client \ -l 127.0.0.1:1080 \ -s :8443 \ -p ``` 另开一个终端,通过本地 SOCKS5 代理验证出口: ```bash curl --proxy socks5h://127.0.0.1:1080 https://api.ipify.org ``` `v0.0.12` 及以上版本也支持 URI: ```text anytls://@:8443 ``` 使用 sing-box、mihomo、Shadowrocket 等第三方客户端时,至少需要填写服务器地址、端口和相同密码。由于参考服务端使用临时自签名证书,还需要按客户端文档配置对应的跳过证书校验选项;不要将这一配置套用到支持正式证书的其他服务端。 ## 10. 日常运维 常用命令: ```bash sudo systemctl restart anytls-go sudo systemctl stop anytls-go sudo systemctl start anytls-go sudo journalctl -u anytls-go -f ``` 修改端口或密码后执行: ```bash 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. 卸载 确认不再使用后执行: ```bash 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. 参考资料 - [AnyTLS-go 官方仓库](https://github.com/anytls/anytls-go) - [AnyTLS-go Releases](https://github.com/anytls/anytls-go/releases) - [AnyTLS 协议文档](https://github.com/anytls/anytls-go/blob/main/docs/protocol.md) - [sing-box AnyTLS 文档](https://sing-box.sagernet.org/configuration/inbound/anytls/)