AnyTLS 服务端搭建:用 sing-box 验证证书、用户与会话

AnyTLS 服务端搭建:用 sing-box 验证证书、用户与会话

Marcus Reid
2026年10月11日· 7 分钟阅读

AnyTLS 服务端搭建使用密码认证的 TLS 服务,客户端先验证证书,再传输应用流量。本文采用 两台获授权的 Ubuntu 24.04 LTS amd64 主机及 sing-box 1.14.3,设置回环客户端代理和独立服务端单元。内容依据官方文档,作者未进行完整端到端实测。[1]

关键要点

  • 证书验证与用户密码解决不同问题,不能互相替代。
  • 建立基线时保留默认填充和空闲会话行为。
  • 改凭证后检查新连接,编辑文件本身不是撤销证据。
  • 恢复仅涉及本练习的服务、防火墙、证书副本及客户端设置。

哪些情况适合 AnyTLS 服务端搭建?

你需要能管理自有端点的完整生命周期:证书签发、私钥访问、用户、日志、更新和停用。先按自建责任分配指南确定负责人。若只是需要日常公网出口,先确认托管 VPN 能否省去这些维护。

Trojan 协议介绍提供另一种 TLS 协议背景,不代表可导入 Trojan 配置。VPN 连接覆盖说明帮助区分单应用代理和整机路由。本文只讨论同一核心双端,不覆盖 GUI、面板、REALITY 组合或兼容性矩阵。

独立服务器预留 TCP 24444,客户端预留回环 1080。通过现有 CA 支持的签发和续期流程取得自有域名的有效证书链及匹配私钥。服务器实际本地地址可与外部映射地址不同;只使用有权管理的 NAT 映射。

安装前私下记录软件包版本、服务启用状态、APT 源、相关防火墙规则、地址及解析器设置。测试新的独立 SSH 或服务商控制台通道。下文名称和路径都须未占用;属于现有安装时先与负责人协调,不覆盖。

步骤 1:安装稳定核心并准备独立凭证

双端先安装 Ubuntu 的 curl、ca-certificates、openssl,再添加官方稳定 APT 源。选择列表中核心为 1.14.3 的准确 APT 软件包版本。占位值故意不是可安装版本;找不到目标发行版就停止,不默默换成测试版。[5]

sudo apt-get update
sudo apt-get install curl ca-certificates openssl
sudo install -d -m 755 /etc/apt/keyrings
sudo curl -fsSL https://sing-box.app/gpg.key -o /etc/apt/keyrings/sagernet.asc
sudo chmod 644 /etc/apt/keyrings/sagernet.asc
sudo tee /etc/apt/sources.list.d/sagernet.sources >/dev/null <<'REPO'
Types: deb
URIs: https://deb.sagernet.org/
Suites: *
Components: *
Enabled: yes
Signed-By: /etc/apt/keyrings/sagernet.asc
REPO
sudo apt-get update
apt-cache madison sing-box
sudo apt-get install sing-box='APT_VERSION_FOR_1.14.3' curl ca-certificates openssl
sing-box version

核对双端均报告 1.14.3。保留可恢复的软件包或发行文件,升级前查看发行和安全信息。检查软件包默认服务,不启动或挪用其他工作单元。

服务端创建独立账户,复制已签发的证书链和私钥,替换 /PRIVATE/SOURCE/ 为实际受保护位置。客户端不需要私钥。[4]

sudo useradd --system --user-group --no-create-home --shell /usr/sbin/nologin sbanytls
sudo install -d -o root -g sbanytls -m 750 /etc/sing-box-anytls
sudo install -o root -g sbanytls -m 640 /PRIVATE/SOURCE/fullchain.pem /etc/sing-box-anytls/fullchain.pem
sudo install -o root -g sbanytls -m 640 /PRIVATE/SOURCE/privkey.pem /etc/sing-box-anytls/privkey.pem

在私密终端执行 openssl rand -base64 32 生成独立密码,安全保存并通过授权安全通道传递。将密码粘贴到私密编辑器,不放入 shell 参数;不分享包含可复用凭证的配置、截图或日志。users.name 是用户标签,密码才是认证秘密。[2]

步骤 2:设置 sing-box AnyTLS 配置和服务

用提权私密编辑器创建 /etc/sing-box-anytls/config.json。SERVER_LOCAL_IPV4 换成实际分配给主机的 IPv4,双端替换相同密码。文件属主 root:sbanytls,权限 640。

{
  "log": {
    "level": "info"
  },
  "dns": {
    "servers": [
      {
        "type": "local",
        "tag": "system-dns"
      }
    ]
  },
  "inbounds": [
    {
      "type": "anytls",
      "tag": "anytls-in",
      "listen": "SERVER_LOCAL_IPV4",
      "listen_port": 24444,
      "users": [
        {
          "name": "reader-test",
          "password": "REPLACE_WITH_PRIVATE_PASSWORD"
        }
      ],
      "tls": {
        "enabled": true,
        "certificate_path": "/etc/sing-box-anytls/fullchain.pem",
        "key_path": "/etc/sing-box-anytls/privkey.pem"
      }
    }
  ],
  "outbounds": [
    {
      "type": "direct",
      "tag": "direct"
    }
  ],
  "route": {
    "final": "direct",
    "default_domain_resolver": "system-dns"
  }
}

省略 padding_scheme,使用实现默认值。自定义填充不在本文范围,也不能证明在某个网络中隐形或可靠。服务端 type: local 的 DNS 服务器和 default_domain_resolver 明确目的域名解析路径,不修改客户端系统解析器。[2][6]

保存独立单元 /etc/systemd/system/sing-box-anytls.service,root 所有,权限 644。该服务不需要低端口绑定,也不访问用户家目录。

[Unit]
Description=Isolated sing-box anytls reader exercise
After=network-online.target
Wants=network-online.target

[Service]
User=sbanytls
Group=sbanytls
ExecStart=/usr/bin/sing-box run -c /etc/sing-box-anytls/config.json
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
PrivateTmp=true
Restart=on-failure
RestartSec=3

[Install]
WantedBy=multi-user.target
sudo -u sbanytls /usr/bin/sing-box check -c /etc/sing-box-anytls/config.json
sudo systemctl daemon-reload
sudo systemctl start sing-box-anytls.service
sudo systemctl status sing-box-anytls.service --no-pager
sudo ss -lntp

配置检查成功或服务 active 不证明 TLS、密码接受或转发成功。用 sudo journalctl -u sing-box-anytls.service -n 30 --no-pager 查看有限近期日志,分享前移除地址及秘密。私密文件访问失败时修正属主权限,不放宽私钥读取范围。

步骤 3:限制 TCP 访问并连接回环客户端

沿用当前防火墙管理者。仅当 UFW 已启用且负责策略时,允许测试客户端可见公网地址到服务器本地地址 TCP 24444,注释 anytls-test;需要服务商许可时也采用相同窄范围。保存确切规则以便移除,保留管理通道,不重置共享防火墙。

仅在上述 UFW 条件下,替换两个地址占位值后执行:

sudo ufw allow proto tcp from CLIENT_PUBLIC_IP to SERVER_LOCAL_IPV4 port 24444 comment 'anytls-test'

私下创建 anytls-client.json。SERVER_PUBLIC_IPV4 使用可达数字地址,anytls.example.com 使用证书真实域名。客户端连接所选 IP,同时验证证书域名;保持 insecure: false。[4]

{
  "log": {
    "level": "info"
  },
  "inbounds": [
    {
      "type": "mixed",
      "tag": "local-in",
      "listen": "127.0.0.1",
      "listen_port": 1080
    }
  ],
  "outbounds": [
    {
      "type": "anytls",
      "tag": "anytls-out",
      "server": "SERVER_PUBLIC_IPV4",
      "server_port": 24444,
      "password": "REPLACE_WITH_PRIVATE_PASSWORD",
      "tls": {
        "enabled": true,
        "server_name": "anytls.example.com",
        "insecure": false
      }
    }
  ],
  "route": {
    "final": "anytls-out"
  }
}

本例省略空闲会话选项。出站文档给出的检查间隔和空闲超时默认均为 30 秒,最少空闲会话默认是零;结构示例中的五不是默认值。超时由周期检查处理,不是精确的应用断开时刻。[3]

chmod 600 anytls-client.json
sing-box check -c anytls-client.json
sing-box run -c anytls-client.json

保持前台客户端运行。mixed 监听只在回环接受明确配置的 HTTP 或 SOCKS 客户端,不是整机捕获机制。保留现有网络控制,不改其他代理应用。

步骤 4:检查 AnyTLS TLS 证书和失败条件

另一终端通过 SOCKS 远端解析名称,发送限时请求:

curl --noproxy "" --proxy socks5h://127.0.0.1:1080 --connect-timeout 5 --max-time 20 https://example.com/

完成请求只证明该应用所测路径。若验证浏览器出口,使用明确配置回环 HTTP 代理的独立浏览器配置,查看该浏览器请求可见的地址,之后恢复原代理。两者都不能证明其他应用、DNS、IPv6 或 UDP 的覆盖。

准备私密配置副本。每次只 Ctrl-C 停止自己的前台客户端,使用选定副本重新启动,再发出新请求,避免已认证连接池掩盖错误密码或名称。

读者检查预期现象解释或恢复
密码与证书名称正确新请求完成私下记录请求及时间,不据此声称吞吐量
只更改密码新连接无法认证确认有效客户端文件,没有旧监听进程
只改证书名称为无关域名TLS 验证失败检查链和名称,保留证书验证
只停止本服务单元新请求失败表面成功时追查实际提供服务的进程
客户端闲置后再次请求服务健康时可创建新会话空闲池清理本身不等于故障
移除用户、检查文件并重启本单元旧凭证的新连接失败重启也会中断本单元既有连接
保留授权用户或配置新用户后重启新请求恢复失败时恢复安全文件,不恢复泄露凭证

表格是读者检查标准,不是测量结果。空闲检查至少跨过一次检查间隔,结合有限客户端和服务端日志,不从单个时间戳推断精确寿命。应用持续持有的长请求应单独观察,不能当成空闲池会话。[3]

文件修改不保证实时撤销用户。此独立单元故意没有 ExecReload,先验证配置再 systemctl restart,建立明确中断点。不要把通用 reload 命令描述成立即撤销会话。

步骤 5:续期证书、撤销访问和恢复

沿用现有证书流程续期,按原受限权限安装匹配证书链和私钥。以 sbanytls 检查配置,仅重启本单元,通过新连接验证实际身份和有效期。TLS 文档描述文件重载,但本文采用显式重启和验证,不把替换文件当作完成。[4]

密码泄露后更换受影响凭证并重启,打断本单元旧连接。确认新凭证可用、旧凭证失败,再考虑 sudo systemctl enable sing-box-anytls.service,随后在授权维护窗口重启主机并检查新请求。

停用时停止并禁用本单元,停止前台客户端,仅移除记录中的本练习防火墙和服务商许可,恢复浏览器代理。保留必要私密诊断,删除本练习单元、证书及配置副本,运行 sudo systemctl daemon-reload。检查监听、原管理和 DNS 路径。只有基线证明无人依赖且由本次新增时才删除软件包或 APT 源。恢复未核实就停止变更,使用独立管理通道。

用 sudo openssl x509 -in /etc/sing-box-anytls/fullchain.pem -noout -subject -issuer -dates 查看部署文件的身份和有效期。这只是本地文件信息,必须结合新的 TLS 验证请求;读取文件本身不能证明远端进程实际提供哪张证书。

删除练习文件后,只有确认没有剩余进程、服务单元或文件依赖其 UID 或组时,才移除本练习新建的 sbanytls 账号。使用 sudo userdel sbanytls,不强制删除,也不连带删除家目录;专用组若仍存在且没有其他成员或依赖,再用 sudo groupdel sbanytls 移除。保留原有身份,所有权不明时停止。无需保留时删除自己的 anytls-client.json 和反例副本;必要备份仍须私密保存,不重新启用已撤销凭证。[7][8]

总结

  • 先验证 TLS 身份,再解释密码与应用失败。
  • 区分空闲会话回收、新认证和既有会话中断。
  • 仅清理自己拥有的变更,恢复原服务与客户端状态。

常见问题(FAQ)

为什么排障时也不关闭证书验证?

关闭会移除正在建立的身份检查。应修正服务器名、信任链、时间或证书部署,保持验证开启。[4]

能复用 Trojan 配置吗?

不能。应采用本实现匹配的 AnyTLS 字段,共同使用 TLS 不代表不同协议的配置可以互换。

删除用户会立即断开已有流量吗?

文件编辑本身没有这种证明。本文重启独立服务,再用被移除凭证检查新连接。

空闲会话等于失败连接吗?

不是。未使用的池会话可以正常回收,应先检查之后的新请求能否建立健康会话,再判断是否故障。[3]

应照抄最少空闲会话数五吗?

本基线不需要。文档默认是零,保持省略,只有具备独立理由和验证时才调优。[3]

浏览器成功能证明所有流量吗?

不能。它只验证所测浏览器路径,其他应用、DNS、IPv6 和 UDP 需要各自受支持的配置及检查。

续期后新证书失败怎么办?

停止练习,或恢复仍有效的匹配证书及安全配置;验证新的 TLS 和应用请求后再恢复服务,不能恢复泄露私钥。

免责声明:只管理获授权的主机和网络,遵守适用法律及政策。预期现象是读者验证标准,不是作者测试记录或网络可用性保证。

来源:

  1. sing-box 1.14.3 release — https://github.com/SagerNet/sing-box/releases/tag/v1.14.3
  2. sing-box AnyTLS inbound — https://sing-box.sagernet.org/configuration/inbound/anytls/
  3. sing-box AnyTLS outbound — https://sing-box.sagernet.org/configuration/outbound/anytls/
  4. sing-box TLS configuration — https://sing-box.sagernet.org/configuration/shared/tls/
  5. sing-box package installation and service management — https://sing-box.sagernet.org/installation/package-manager/
  6. sing-box local DNS server and route — https://sing-box.sagernet.org/configuration/dns/server/local/
  7. Ubuntu Noble userdel manual — https://manpages.ubuntu.com/manpages/noble/man8/userdel.8.html
  8. Ubuntu Noble groupdel manual — https://manpages.ubuntu.com/manpages/noble/man8/groupdel.8.html

Sources checked 2026 年 10 月 11 日。

延伸阅读:

开启 3 天免费试用

注册即可免费体验全部高级功能。

*仅限新用户;每位用户只能获得一次试用。

AnyTLS 服务端搭建:用 sing-box 验证证书、用户与会话 | AethoVPN