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

311 lines
8.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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. 部署参数
安装前确认以下参数:
| 参数 | 示例 | 说明 |
| --- | --- | --- |
| 服务器公网地址 | `<SERVER_IP_OR_DOMAIN>` | 客户端连接地址 |
| 服务端口 | `8443` | 必须为未占用的 TCP 端口 |
| 密码 | `<RANDOM_HEX_PASSWORD>` | 建议使用至少 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=<RANDOM_HEX_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 <SERVER_IP_OR_DOMAIN> 8443
```
端口连通只说明 TCP 链路正常,完整验收仍需通过 AnyTLS 客户端发起代理请求。
## 9. 客户端联调
使用同版本参考客户端进行基础联调:
```bash
./anytls-client \
-l 127.0.0.1:1080 \
-s <SERVER_IP_OR_DOMAIN>:8443 \
-p <RANDOM_HEX_PASSWORD>
```
另开一个终端,通过本地 SOCKS5 代理验证出口:
```bash
curl --proxy socks5h://127.0.0.1:1080 https://api.ipify.org
```
`v0.0.12` 及以上版本也支持 URI
```text
anytls://<RANDOM_HEX_PASSWORD>@<SERVER_IP_OR_DOMAIN>: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/)