在 YouTube 观看完整视频 订阅 SKYBYTE YouTube 频道

无需购买域名|官方脚本安装|手动配置|开机自启动|小火箭导入

本文面向第一次在 VPS 上部署 sing-box 的读者,从安装程序、生成密钥、填写配置,到后台运行与手机连接,逐步完成部署。

版本说明:2026 年 9 月 30 日核对,本文固定使用官方正式版 1.14.2。 后续阅读时,请先查看 官方发布页。不要直接将测试版或其他大版本代入本文命令。

“无域名”指不需要购买自己的域名,也不需要申请和续期服务端证书;Reality 仍需要一个合适的目标网站域名作为握手目标和客户端 SNI。

上方视频可辅助理解操作流程;若视频中的版本、安装方式或路径与正文不同,以本文固定版本的命令为准。

本文命令适用于使用 systemd 的 Debian 12/13、Ubuntu 22.04/24.04 VPS,由官方脚本识别系统架构并安装。配置依据官方文档整理,未进行 VPS 与 iPhone 的端到端实测。

1. 准备 VPS 与 SSH 环境

准备一台有公网 IPv4 的 VPS、SSH 登录权限,以及支持 VLESS、Reality、Vision 的 Shadowrocket(小火箭)。本文以全新服务器为例;已有 sing-box 或占用 443 的网站时,先确认现有服务,勿直接覆盖配置。

从电脑终端连接,替换用户名和 IP:

1
ssh 用户名@你的VPS公网IP

进入 root shell。后文所有 Bash 命令均在 VPS 的这个 shell 中执行,不是在 Windows PowerShell 中执行。

1
sudo -i

已经使用 root 登录的读者跳过上一步。

安装基础工具,确认系统时间:

1
2
3
apt-get update
apt-get install -y ca-certificates curl openssl nano
timedatectl status

应确认系统时间准确,并有正在工作的时间同步服务。未同步时先检查发行版的 timesyncd 或 chrony,不要在错误时间下继续排查 TLS。

检查 443 是否被占用:

1
ss -lntp 'sport = :443'

如果已经有 Nginx、Caddy 或其他服务监听,可改用 8443。后文配置、云防火墙及客户端端口必须一起修改。

2. 使用官方安装脚本安装 sing-box

本文使用 sing-box 官方安装脚本,程序安装完成后,再手动填写服务端配置。在 Debian / Ubuntu 上,脚本会识别架构并安装官方 DEB 包,其中已包含 systemd 服务,无需手写服务文件。

先检查是否已有安装:

1
2
command -v sing-box || true
systemctl cat sing-box.service

新服务器提示找不到服务是正常的。已有安装时先备份并确认服务路径;以下步骤按首次安装编写。如果此前使用过手工压缩包安装,需先处理旧的 /usr/local/bin/sing-box 和 /etc/systemd/system/sing-box.service,否则旧程序或旧服务可能覆盖安装包提供的版本,不要直接混装。

本文推荐指定 1.14.2,便于与后续配置保持一致:

1
curl -fsSL https://sing-box.app/install.sh | sh -s -- --version 1.14.2

官方默认命令 curl -fsSL https://sing-box.app/install.sh | sh 会安装执行时的最新正式版,可能超出 1.14.x。跟随本文操作只需执行上面的指定版本命令,不必再运行一次默认命令,也无需添加 --beta。

安装成功后检查版本和服务:

1
2
3
/usr/bin/sing-box version
systemctl daemon-reload
systemctl cat sing-box.service

指定版本安装时,输出应显示 sing-box version 1.14.2。如果脚本下载或安装报错,先解决错误,不能只凭命令执行结束判断成功。

下文统一使用包内程序 /usr/bin/sing-box。1.14.2 官方服务的启动命令使用 -C /etc/sing-box,会读取该配置目录;确认其中没有其他不需要的 JSON 配置,并将备份保存在目录外。服务配置可参考 官方 1.14.2 服务文件。

3. 生成 UUID、Reality 密钥与 Short ID

分别执行一次,保存输出:

1
2
3
/usr/bin/sing-box generate uuid
/usr/bin/sing-box generate reality-keypair
openssl rand -hex 8
参数 用途
UUID 服务端与客户端使用同一个 UUID
PrivateKey 只填写在服务端 private_key 中
PublicKey 填写在小火箭公钥栏及链接的 pbk 中
Short ID 最后一条命令生成的 16 位十六进制字符串,两端保持一致

不要使用博客示例密钥,也不要将私钥放进导入链接。重新生成密钥对后,需要同步更新客户端公钥。字段与生成命令见 1.14.2 官方 TLS 文档。

4. 选择并检查 Reality 握手目标

以下以 addons.mozilla.org 作为待测试示例,不能保证它对所有 VPS、所有时间都适用。应从 VPS 测试目标是否可达、支持 TLS 1.3 与 H2,并检查证书与域名匹配;目标选择原则见 REALITY 项目说明。

1
2
3
4
5
6
openssl s_client \
-connect addons.mozilla.org:443 \
-servername addons.mozilla.org \
-verify_hostname addons.mozilla.org \
-verify_return_error \
-tls1_3 -alpn h2 </dev/null

检查输出中包含 TLS 1.3、ALPN protocol: h2,且证书验证成功。此检查只是基础筛选,通过不代表 Reality 端到端必定成功。如果目标不可达或不合适,换一个目标并重新验证。

本教程将以下三处统一填写为同一个经过验证的域名:服务端 tls.server_name、reality.handshake.server、客户端 SNI。小火箭“服务器地址”仍填写 VPS 公网 IP,不填写目标域名。

5. 写入完整服务端配置

官方安装包会创建服务使用的 sing-box 用户。先确认用户存在,再准备配置目录;如果用户不存在,先检查安装是否成功:

1
2
id sing-box && install -d -m 0750 -o root -g sing-box /etc/sing-box
nano /etc/sing-box/config.json

如果文件已有安装包提供的示例配置,将原内容整体替换为下面这一份 JSON,不要追加在文件末尾;已有自定义配置时先按第 10 节备份。将 替换为UUID、替换为PrivateKey、替换为ShortID 换成刚才生成的实际值。如果更换目标域名,修改两处 addons.mozilla.org。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
{
"log": {
"level": "info",
"timestamp": true
},
"inbounds": [
{
"type": "vless",
"tag": "vless-in",
"listen": "0.0.0.0",
"listen_port": 443,
"users": [
{
"name": "iphone",
"uuid": "替换为UUID",
"flow": "xtls-rprx-vision"
}
],
"tls": {
"enabled": true,
"server_name": "addons.mozilla.org",
"reality": {
"enabled": true,
"handshake": {
"server": "addons.mozilla.org",
"server_port": 443
},
"private_key": "替换为PrivateKey",
"short_id": ["替换为ShortID"]
}
}
}
],
"outbounds": [
{
"type": "direct",
"tag": "direct"
}
],
"route": {
"final": "direct"
}
}

按 Ctrl+O、回车保存,再按 Ctrl+X 退出 nano。设置文件权限:

1
2
chown root:sing-box /etc/sing-box/config.json
chmod 0640 /etc/sing-box/config.json

JSON 示例请保持标准语法,不要混入中文引号或多余逗号;下一节统一检查配置后启动。

这里的 Vision 对应 users[].flow 中的 xtls-rprx-vision,使用普通 TCP 承载,不需要添加 WebSocket、gRPC 或其他 transport 配置。官方字段说明见 VLESS 入站文档。

本配置仅监听 IPv4。无需配置网站、证书路径、ACME 或客户端 uTLS 到服务端 JSON 中。

6. 使用自带 systemd 服务并设置开机自启动

官方安装包已提供 sing-box.service,直接使用它即可。先校验整个配置目录,再启用并重启服务,让新配置生效:

1
/usr/bin/sing-box check -C /etc/sing-box

确认没有报错后,再执行:

1
2
systemctl enable sing-box
systemctl restart sing-box

enable 设置开机自启动,restart 立即启动或重启服务。退出 SSH 不会关闭它;VPS 重启后也会由 systemd 自动启动。

检查运行状态和端口:

1
2
3
4
systemctl is-enabled sing-box
systemctl is-active sing-box
systemctl status sing-box --no-pager -l
ss -lntp 'sport = :443'

应分别看到 enabled、active,并确认 443 的监听进程为 sing-box。仅有 enabled 并不代表启动成功。

如果提示 Unit sing-box.service could not be found,先检查安装脚本是否成功安装软件包,并执行 systemctl daemon-reload,不要直接复制另一套服务文件。

7. 放行云防火墙和系统防火墙

在 VPS 控制台的安全组或云防火墙中,允许客户端访问 VPS 的 TCP 443;改用 8443 时就开放 TCP 8443。保留 SSH 实际端口的访问规则。

这套 Reality 入口使用 TCP,不需要为了本教程额外开放 UDP 443。应用的 UDP 流量能否代理还取决于客户端封装支持与设置。

如果使用 UFW,先查看状态:

1
ufw status verbose

仅在已启用 UFW 时添加规则:

1
2
ufw allow 443/tcp
ufw status verbose

若没有 UFW 或状态为 inactive,继续检查实际使用的 nftables/iptables 与云安全组。不要为了照抄教程直接启用新防火墙,以免未放行自定义 SSH 端口而失联。

8. 生成小火箭导入链接

在 VPS 执行下面命令,替换 IP、UUID、公钥和 Short ID 四个占位值;PORT 与 SNI 按实际端口和握手目标填写。PUBLIC_KEY 填公钥,不是私钥;SNI 填刚才验证过的目标域名。

1
2
3
4
5
6
7
8
9
SERVER_IP='替换为VPS公网IPv4'
PORT='443'
UUID='替换为UUID'
PUBLIC_KEY='替换为PublicKey'
SHORT_ID='替换为ShortID'
SNI='addons.mozilla.org'

printf 'vless://%s@%s:%s?encryption=none&security=reality&sni=%s&fp=chrome&pbk=%s&sid=%s&type=tcp&flow=xtls-rprx-vision#VPS-Reality\n' \
"$UUID" "$SERVER_IP" "$PORT" "$SNI" "$PUBLIC_KEY" "$SHORT_ID"

输出应为一整行 vless:// 链接。终端视觉换行不影响内容,但复制时不要引入空格或实际换行。该命令针对本文 IPv4 场景。

导入链接包含连接凭据,不要公开发布。 encryption=none 是 VLESS 的参数,不表示这条 Reality 连接没有 TLS 保护。

在 iPhone 上复制完整链接,打开 Shadowrocket;若出现剪贴板导入提示,确认添加。没有提示时,使用当前版本提供的剪贴板或 URL 导入入口。不同版本按钮名称可能变化,导入后务必打开节点详情核对以下参数。

小火箭字段或含义 应填写的内容
类型 VLESS
地址 / Server VPS 公网 IPv4
端口 443,或自定义端口
UUID 服务端 users 中的 UUID
传输 / Transport TCP,部分界面显示 none
TLS / 安全方式 启用 TLS,并配置 Reality
SNI / Server Name / Peer 握手目标域名
Reality Public Key PublicKey
Reality Short ID Short ID
Flow / XTLS xtls-rprx-vision / Vision
指纹 / Fingerprint chrome,若当前版本提供该项
跳过证书验证 / Allow Insecure 关闭
多路复用 / Mux 关闭

若链接导入没有带入 Reality 或 Vision 参数,使用上述对应关系手动补齐。找不到相关字段时,先确认安装的是 Shadowrocket 正版应用 并更新,再根据该版本界面核对;不能只看到 VLESS 就认为配置已经完整。

选择节点,开启连接,并允许 iOS 添加 VPN 配置。首次测试可临时选择让测试流量经过代理的全局模式;验证后再切回自己的分流规则。

9. 验证真正连通和开机自启动

在 VPS 打开实时日志:

1
journalctl -u sing-box -f

然后在手机访问一个 HTTPS 网站,确认页面实际加载,并通过可信的 IP 查询页面检查出口是否为 VPS 的公网出口。仅有小火箭“已连接”、VPN 图标或延迟数值,都不足以证明代理请求成功。

日志窗口按 Ctrl+C 退出,只会停止看日志,不会停止服务。

确认可以正常使用后,可在方便短暂中断时重启 VPS:

1
reboot

SSH 会断开。稍后重新连接并检查:

1
2
3
systemctl is-enabled sing-box
systemctl is-active sing-box
journalctl -u sing-box -b -n 50 --no-pager

再次用手机访问网站,才能验证“重启后自动恢复”这条完整链路。

10. 日常管理、修改与备份

操作 命令
查看状态 systemctl status sing-box --no-pager -l
重启 systemctl restart sing-box
停止 systemctl stop sing-box
启动 systemctl start sing-box
取消自启动并停止 systemctl disable --now sing-box
恢复自启动并启动 systemctl enable --now sing-box
查看最近日志 journalctl -u sing-box -n 100 --no-pager
查看本次开机日志 journalctl -u sing-box -b --no-pager

修改前备份:

1
2
3
install -d -m 0700 /root/sing-box-backups
cp -p /etc/sing-box/config.json "/root/sing-box-backups/config.json.$(date +%Y%m%d-%H%M%S).bak"
nano /etc/sing-box/config.json

修改后先检查,仅检查成功才重启:

1
2
/usr/bin/sing-box check -C /etc/sing-box && systemctl restart sing-box
systemctl status sing-box --no-pager -l

只改 JSON 不需要 daemon-reload;修改 systemd 单元文件或其 drop-in 覆盖文件后才需要执行它。本文统一使用检查后 restart 的方式应用配置。备份保存在 /root/sing-box-backups,不要放回 /etc/sing-box 配置目录。

升级前备份配置,记录当前版本,并查看目标版本的变更记录。需要升级时,使用同一个官方脚本,将 --version 1.14.2 改为已经确认兼容的目标版本;默认不带版本参数的命令会安装当时的最新正式版,可能跨版本。升级后执行 systemctl daemon-reload,再依次进行版本检查、整个配置目录检查、服务重启和手机实际连接测试;失败时用官方脚本重新安装原版本并恢复配套配置。

11. 常见故障排查

现象 优先检查
address already in use 443 被其他程序占用;查 ss -lntp,或统一改用其他端口
JSON / unknown field 报错 检查逗号、引号、实际程序版本,勿混入 Xray 配置字段
permission denied 检查配置属组、0640 权限及服务的低端口能力设置
服务反复重启 查看 journal;修复后执行 systemctl reset-failed sing-box 再启动
连接超时且无请求日志 检查 IP、端口、安全组、主机防火墙和实际监听地址
Reality 握手失败 核对密钥配对、Short ID、SNI、系统时间和目标网站可达性
已连接但网页打不开 核对 Vision、代理分流、DNS、VPS 出站网络,并查看具体日志
部分应用能用、部分不能用 检查分流与 UDP 支持,不能只凭单个应用判断整体正常

需要更详细日志时,可临时将 log.level 改为 debug,检查配置并重启;排查完恢复 info。向他人提供日志前隐藏 IP、UUID 及其他连接信息,不要分享私钥。

没有请求日志只是排查线索,不能单独证明请求未到达。必要时结合外部端口连通性测试与服务日志判断。直接在浏览器打开 https://VPS_IP 也不是有效的 VLESS 节点验证方式。