一、 项目简介与准备
1.1 AnyTLS-Go 简介
anytls-go 是一个极简的 AnyTLS 协议实现,服务端仅需一个密码即可工作。它通过对称密钥在 TLS 层完成身份验证与数据混淆,无需申请或配置任何证书。相比依赖 ACME 的 Mihomo 方案,anytls-go 在轻量和开箱即用上更有优势,特别适合仅需简单隧道、不希望维护证书的场景。
1.2 环境准备
首先确保你的 Linux VPS 装有 curl 与 unzip,Debian/Ubuntu 下执行:
sudo apt install -y curl unzip
CentOS 可使用 yum install -y curl unzip。
二、 安装 AnyTLS-Go 服务端
2.1 自动获取最新版本与架构
用下面这段命令可自动从 GitHub API 抓取最新版本号,并识别当前 CPU 架构(x86_64 → amd64,aarch64 → arm64):
VERSION=$(curl -s https://api.github.com/repos/anytls/anytls-go/releases/latest | sed -n 's/.*"tag_name": *"v\([^"]*\)".*/\1/p')
ARCH=$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/')
echo "版本: $VERSION, 架构: $ARCH"
2.2 下载并解压
根据上一步获取的 VERSION 和 ARCH 变量下载对应的 zip 包并解压:
cd /tmp
curl -LO "https://github.com/anytls/anytls-go/releases/download/v${VERSION}/anytls_${VERSION}_linux_${ARCH}.zip"
unzip -o "anytls_${VERSION}_linux_${ARCH}.zip"
2.3 安装二进制文件
解压后会得到 anytls-server、anytls-client 和 readme.md。我们只需要服务端程序:
sudo mv anytls-server /usr/local/bin/ && sudo rm anytls-client readme.md
三、 配置 systemd 服务
3.1 创建专用系统用户
出于安全考虑,我们创建一个没有登录权限的系统用户来运行服务:
sudo useradd -r -s /usr/sbin/nologin anytls
3.2 编写服务单元文件
用 sudo nano /etc/systemd/system/anytls.service 创建服务文件,粘贴以下内容:
[Unit]
Description=AnyTLS Service
After=network.target
[Service]
Type=simple
User=anytls
Group=anytls
ExecStart=/usr/local/bin/anytls-server -l [::]:10443 -p password
Restart=always
RestartSec=5
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
ProtectKernelTunables=true
ProtectKernelModules=true
ProtectControlGroups=true
AmbientCapabilities=CAP_NET_BIND_SERVICE
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
LimitNOFILE=1048576
[Install]
WantedBy=multi-user.target
重要提示:请将 -p password 中的 password 替换为你自己的强密码。-l [::]:10443 表示同时监听 IPv4 与 IPv6 的 10443 端口,你也可以换成其他端口。
安全加固说明:
ProtectSystem=strict等指令将服务的文件系统访问限制到最小,NoNewPrivileges=true禁止提权,只授予绑定端口所必需的CAP_NET_BIND_SERVICE能力。
3.3 启动并启用服务
依次执行:
sudo systemctl daemon-reload
sudo systemctl start anytls
sudo systemctl status anytls
sudo systemctl enable anytls
如果 status 显示 active (running),服务端已正常运行。修改配置后重启服务sudo systemctl restart anytls。
四、 防火墙与客户端连接
4.1 防火墙放行端口
若开启了 ufw,请放行对应的端口:
sudo ufw allow 10443/tcp
同时务必在云服务商的安全组/防火墙中放行该端口,否则客户端无法连接。
4.2 客户端连接字符串
支持 AnyTLS 协议的客户端(如 v2rayN、Clash Meta 等)可使用如下格式:
anytls://password@服务器IP或域名:10443/?insecure=1#节点名
password:与服务端-p参数设置的密码一致。服务器IP或域名:VPS 公网地址。10443:监听端口。insecure=1:因为 anytls-go 不使用证书,客户端必须跳过证书验证(即设置skip-cert-verify为 true)。
4.3 小优化(可选 BBR)
与任何需要跨国 TCP 连接的服务一样,开启 BBR 能明显提升吞吐量:
# 添加参数配置文件并指定开启 BBR
sudo nano /etc/sysctl.d/99-bbr.conf
# 把下面的内容添加进去
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
# 读取配置,使 BBR 设置生效
sudo sysctl --system
# 确认BBR开启,此时应该返回这样的结果:net.ipv4.tcp_congestion_control = bbr
sysctl net.ipv4.tcp_congestion_control
# 如果你在疑惑这个 ipv4,无需在意,只是历史命名遗留,实际上对 ipv6 也是生效的。
# 如果你想确认 fq 算法是否正确开启,可以使用下面的命令,此时应该返回这样的结果:net.core.default_qdisc = fq
sysctl net.core.default_qdisc
五、 服务卸载与清理
如果将来不再使用,可以干净地移除所有相关组件。
5.1 停止并禁用服务
sudo systemctl stop anytls
sudo systemctl disable anytls
5.2 删除服务文件与二进制
sudo rm -f /etc/systemd/system/anytls.service
sudo rm -f /usr/local/bin/anytls-server
sudo systemctl daemon-reload
5.3 删除专用用户
sudo userdel -r anytls 2>/dev/null || true
该命令会同时删除用户的家目录(如果存在)。2>/dev/null || true 是为了防止用户已不存在时报错中断。
完成以上步骤后,anytls-go 服务就已彻底从服务器移除。
希望这篇博文能帮助你在任何 VPS 上快速跑起一个轻量隧道。欢迎小伙伴们在评论区留言交流。
喜欢的话,留下你的评论吧~