AnyTLS 部署指南(sing-box)

AnyTLS 占用 TCP 443。证书用 ACME(推荐,要域名)或自签名。ACME 使用 certificate_providers,需要 sing-box 1.14.0 及以上。不要改回已废弃的 tls.acme,它会在 1.16.0 移除。入站占着 443,不能用 TLS-ALPN,只用 HTTP-01(TCP 80)或 DNS-01。域名为 IP 时,Let's Encrypt 会自动使用 shortlived profile,所以推荐域名。字段见 AnyTLS inbound。

准备

  • 带 systemd 的 Linux VPS,有 root 或 sudo;官方安装脚本覆盖 deb、rpm、Arch、OpenWrt。
  • 一个解析到该 VPS 的域名,以及可收信的邮箱。
  • 安全组和本机防火墙放行 TCP 443;HTTP-01 还要放行 TCP 80。443 不能被 Nginx 或 Caddy 占用。
  • 一个足够长的随机密码。

安装

bash
curl -fsSL https://sing-box.app/install.sh | sh
sing-box version

版本必须 ≥ 1.14.0,否则不认识 certificate_providers。

证书

ACME 按下一节配置,sing-box 会申请并续期。自签名则不要长期开 insecure:

bash
sudo openssl ecparam -name prime256v1 -genkey -noout \
  -out /etc/sing-box/server.key

sudo openssl req -x509 -nodes \
  -key /etc/sing-box/server.key \
  -out /etc/sing-box/server.crt \
  -subj "/CN=bing.com" \
  -addext "subjectAltName=DNS:bing.com" \
  -days 825

sudo chmod 600 /etc/sing-box/server.key
sudo chmod 644 /etc/sing-box/server.crt

CN=bing.com 只是示例名。导入客户端并严格校验时,SAN 必须与 server_name 一致。密钥用 P-256,不要改成 Ed25519。自签名时删掉 certificate_providers,把 tls 换成:

json
"tls": {
  "enabled": true,
  "certificate_path": "/etc/sing-box/server.crt",
  "key_path": "/etc/sing-box/server.key"
}

服务端

写入 /etc/sing-box/config.json:

json
{
  "log": {
    "level": "info",
    "timestamp": true
  },
  "certificate_providers": [
    {
      "type": "acme",
      "tag": "acme_cert",
      "domain": [
        "YOUR_DOMAIN"
      ],
      "email": "YOUR_EMAIL@example.com",
      "data_directory": "/var/lib/sing-box/certmagic"
    }
  ],
  "inbounds": [
    {
      "type": "anytls",
      "listen": "::",
      "listen_port": 443,
      "users": [
        {
          "password": "CHANGE_THIS_TO_A_STRONG_PASSWORD"
        }
      ],
      "tls": {
        "enabled": true,
        "server_name": "YOUR_DOMAIN",
        "certificate_provider": "acme_cert"
      }
    }
  ],
  "outbounds": [
    {
      "type": "direct"
    }
  ]
}

data_directory 必须在官方服务的 StateDirectory(/var/lib/sing-box)下。省略时数据跟着 sing-box 用户的 HOME 走,重启后可能写不进去。YOUR_DOMAIN 在 domain[0] 和 tls.server_name 两处必须一致,并且已经解析到这台 VPS。

配置项 修改为
certificate_providers[0].domain[0] 解析到该 VPS 的域名
certificate_providers[0].email 邮箱
users[0].password 长随机密码
tls.server_name 与证书域名相同
listen 禁用 IPv6 时改为 0.0.0.0

padding_scheme 留空即用内置默认值,客户端不用配。users[].name 只用于日志。不要设置 client_metadata:1.13.16 起默认留空,加回去没有协议用途。

bash
sudo chmod 600 /etc/sing-box/config.json
sudo sing-box check -c /etc/sing-box/config.json
sudo systemctl enable sing-box
sudo systemctl restart sing-box

日志:sudo journalctl -u sing-box -e。

客户端

本机代理是 127.0.0.1:1080。ACME 证书不要加 insecure。自签名应导入证书,而不是打开 insecure。

json
{
  "log": {
    "level": "info",
    "timestamp": true
  },
  "inbounds": [
    {
      "type": "mixed",
      "listen": "127.0.0.1",
      "listen_port": 1080
    }
  ],
  "outbounds": [
    {
      "type": "anytls",
      "tag": "anytls-out",
      "server": "YOUR_SERVER_IP",
      "server_port": 443,
      "password": "CHANGE_THIS_TO_A_STRONG_PASSWORD",
      "tls": {
        "enabled": true,
        "server_name": "YOUR_DOMAIN"
      }
    }
  ]
}

排查

  • 443 被占用时看 sudo ss -lntp | grep ':443',停掉冲突服务或改 listen_port。禁用 IPv6 时不要听 ::。
  • ACME 失败时核对解析、domain[0] 与 server_name、TCP 80,以及 data_directory 是否为 /var/lib/sing-box/certmagic。不要用 TLS-ALPN。
  • 客户端密码与 users[0].password 一致,安全组放行 TCP 443。日志里不应有认证失败或证书错误。

安全

密码用长随机值。config.json 和 server.key 权限 600。优先 ACME。不要自定义 client_metadata。升级后重新执行 sing-box check。