1. 架构与原则
sing-box 主服务承载 Shadowsocks、Trojan、VLESS、VMess、Hysteria2、TUIC、AnyTLS、SOCKS5、HTTP CONNECT、ShadowTLS、Naive 等协议。
Xray 扩展服务单独承载 XHTTP、mKCP、gRPC 和 VLESS Vision 等需要当前 Xray 传输行为的测试节点。
Nginx 订阅入口通过 HTTPS 提供 Base64 URI 列表和可选客户端文件包,路径使用高强度随机令牌。
systemd 与 UFW分别管理自启、重启策略、日志、最小权限用户和精确端口规则。
不要直接覆盖已有服务。先审计、备份、分配空闲端口并执行配置检查;新服务通过验证后再启用。sing-box 与 Xray 分开运行,升级和回滚更可控。
2. 部署前检查
建议使用 Debian 或 Ubuntu VPS。先记录系统、内存、路由、监听端口、防火墙、Nginx、证书和失败服务,避免破坏现有业务。
cat /etc/os-release uname -a free -h ip -brief address ip route ss -lntup systemctl --failed systemctl list-unit-files --state=enabled ufw status verbose nginx -T 2>/dev/null certbot certificates 2>/dev/null
- 建议至少 512 MB 内存;更小机器应减少协议数量或添加交换空间。
- 修改防火墙前确保 SSH 端口已经放行,并保留一个已登录终端。
- 给 sing-box、Xray、Nginx 和证书钩子配置制作带时间戳备份。
- 先建立端口表,确保 TCP/UDP 套接字没有冲突。
3. 协议与端口规划
每个协议生成独立 UUID、密码或密钥,便于单独吊销。以下端口仅为示例。
| 核心 | 协议 / 传输 | 示例端口 | 部署说明 |
|---|---|---|---|
| sing-box | Shadowsocks | 8388/TCP+UDP | 选择 SpellVPN 支持的现代 AEAD 或 2022 加密方式。 |
| sing-box | VLESS + Reality | 8443/TCP | 没有域名时可用;目标必须真实可达,不能伪造证书。 |
| sing-box | Trojan / VMess + TLS | 9443–9444/TCP | 使用有效域名证书或合法 IP 证书。 |
| sing-box | Hysteria2 / TUIC | 9445–9446/UDP | 基于 QUIC;必须从外部网络验证 UDP 是否可达。 |
| sing-box | AnyTLS | 9447/TCP | 使用有效证书和独立强密码。 |
| sing-box | SOCKS5 / HTTPS CONNECT | 9450–9451/TCP | 必须启用认证,严禁公开匿名代理。 |
| Xray | VLESS / VMess + XHTTP + TLS | 9471–9473/TCP | 分别测试 stream-one、auto 和 VMess 兼容性。 |
| Xray | VLESS / VMess + mKCP + TLS | 9474–9475 | 以所用 Xray 版本实际监听结果为准配置防火墙。 |
| Xray | VLESS + gRPC / RAW Vision + TLS | 9476–9477/TCP | 测试阶段每种传输独占端口,便于定位问题。 |
WireGuard、OpenVPN、IKEv2 和 OpenConnect 可作为传统 VPN 对照组,但通常使用独立客户端文件,不应强行塞入 VLESS/VMess 风格的 URI 订阅。
4. 安装 sing-box 与 Xray
sing-box 官方 APT 仓库
install -d -m 0755 /etc/apt/keyrings curl -fsSL https://sing-box.app/gpg.key -o /etc/apt/keyrings/sagernet.asc chmod a+r /etc/apt/keyrings/sagernet.asc # 按官方文档添加 deb.sagernet.org 软件源 apt-get update apt-get install sing-box nginx ufw curl unzip
Xray 官方稳定版
- 从 XTLS/Xray-core 官方 Release 下载当前稳定版 Linux ZIP 及对应
.dgst。 - 安装前核对本地 SHA-256 与摘要文件中的
SHA2-256。 - 安装二进制和 geodata,创建不可登录的
xray系统用户,配置放在/etc/xray/。
sha256sum Xray-linux-64.zip sed -n '1,8p' Xray-linux-64.zip.dgst unzip Xray-linux-64.zip -d xray-release install -m 0755 xray-release/xray /usr/local/bin/xray /usr/local/bin/xray version
官方参考:sing-box 包管理器安装、Xray 下载与校验。
5. 正确选择 TLS 或 Reality
有域名将 DNS 指向服务器,申请可信证书,设置正确 SNI,并配置自动续期与服务重载。
没有域名对兼容的 VLESS 节点使用 Reality;如果证书机构和环境支持,也可申请合法 IP 地址证书。不要伪造公网 TLS 身份。
将证书复制到各服务专用目录并限制权限,不要给代理进程读取整个 ACME 目录的权限。Certbot deploy hook 只更新相关证书副本并重载对应服务。
6. 配置、systemd 与防火墙
在服务器本地生成凭据,并将协议、端口与凭据映射保存为仅 root 可读的清单。
/usr/local/bin/xray uuid /usr/local/bin/xray x25519 openssl rand -base64 32 openssl rand -hex 16 chmod 0640 /etc/sing-box/config.json /etc/xray/config.json chown root:sing-box /etc/sing-box/config.json chown root:xray /etc/xray/config.json
每个 inbound 使用独立 tag、端口和凭据;明确配置 direct 与 block outbound;除非实验需要,阻止代理访问私网目标;日志中不要输出完整订阅 URL 和密码。
sing-box check -c /etc/sing-box/config.json /usr/local/bin/xray run -test -c /etc/xray/config.json systemctl enable --now sing-box systemctl enable --now xray systemctl status sing-box xray --no-pager journalctl -u sing-box -u xray --since "10 minutes ago" --no-pager
精确放行端口
ufw allow OpenSSH ufw allow <tcp-port>/tcp ufw allow <udp-port>/udp ufw enable ufw status numbered
7. 生成 SpellVPN 订阅 URL
- 为已验证节点生成标准分享链接,例如
ss://、vless://、vmess://、trojan://、hysteria2://、tuic://、socks5://和带认证的https://代理链接。 - 每行一个链接;名称、路径与查询参数必须正确 URL 编码;将完整换行列表进行 Base64 编码。
- WireGuard、OpenVPN、IKEv2 和 OpenConnect 使用单独受保护的客户端文件包。
install -d -m 0755 /var/www/vpn-sub
base64 -w 0 share-links.txt > /var/www/vpn-sub/subscription.b64
chmod 0644 /var/www/vpn-sub/subscription.b64
# 放在 Nginx HTTPS server 块内
location = /sub/<long-random-token> {
alias /var/www/vpn-sub/subscription.b64;
default_type text/plain;
add_header Cache-Control "no-store";
}随机路径不等于强认证。订阅令牌应按密钥管理,泄露后立即轮换;需要更高安全性时增加 HTTP 认证、IP 限制或其他访问控制。
在 SpellVPN 中打开:首页 → + → 订阅 URL,粘贴 HTTPS 地址并导入,然后进入“节点”逐个测试。
8. 本机与远程验证
端口正在监听不代表代理可用。每种协议都要用匹配客户端建立本地 SOCKS 测试出口,再从另一条外部网络重复验证。
ss -lntup curl --socks5-hostname 127.0.0.1:<local-test-port> https://api.ipify.org curl -fsS https://<subscription-host>/sub/<token> | base64 -d systemctl is-active sing-box xray nginx systemctl is-enabled sing-box xray nginx
- 每个节点返回的公网出口 IP 都是服务器 IP。
- TCP 与 UDP 节点均完成 VPS 外部测试。
- 订阅使用可信 HTTPS,可被 SpellVPN 导入且没有静默跳过节点。
- 重启服务器后服务、证书权限和防火墙规则仍然有效。
- 错误密码、被吊销 UUID 和过期凭据会被拒绝。
9. 运维与安全加固
- 优先使用 SSH 密钥;确认密钥登录成功后关闭密码登录,并尽量禁止直接 root 登录。
- sing-box、Xray、Nginx 使用独立低权限用户和最小文件权限。
- 启用安全更新,监控失败服务、磁盘、内存和证书续期。
- SOCKS5 与 HTTP CONNECT 必须认证并限制速率,绝不运行开放代理。
- 分享或测试结束后轮换 UUID、密码、Reality 密钥和订阅令牌。
- 升级前执行配置检查,一次只升级一个核心,并保留可回滚备份。
维护建议:让 sing-box 保持为覆盖面广的主服务,Xray 只承担必要兼容扩展。只有服务器核心、SpellVPN 解析器和真实远程流量测试全部通过,才把节点加入正式订阅。