🚀 2026 年 sing-box 1.14.x 手动搭建 VLESS + Reality + Vision:无域名完整教程
无需购买域名|官方脚本安装|手动配置|开机自启动|小火箭导入
本文面向第一次在 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 | apt-get update |
应确认系统时间准确,并有正在工作的时间同步服务。未同步时先检查发行版的 timesyncd 或 chrony,不要在错误时间下继续排查 TLS。
检查 443 是否被占用:
1 | ss -lntp 'sport = :443' |
如果已经有 Nginx、Caddy 或其他服务监听,可改用 8443。后文配置、云防火墙及客户端端口必须一起修改。
2. 使用官方安装脚本安装 sing-box
本文使用 sing-box 官方安装脚本,程序安装完成后,再手动填写服务端配置。在 Debian / Ubuntu 上,脚本会识别架构并安装官方 DEB 包,其中已包含 systemd 服务,无需手写服务文件。
先检查是否已有安装:
1 | command -v sing-box || true |
新服务器提示找不到服务是正常的。已有安装时先备份并确认服务路径;以下步骤按首次安装编写。如果此前使用过手工压缩包安装,需先处理旧的 /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 | /usr/bin/sing-box version |
指定版本安装时,输出应显示 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 | /usr/bin/sing-box generate uuid |
| 参数 | 用途 |
|---|---|
| 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 | openssl s_client \ |
检查输出中包含 TLS 1.3、ALPN protocol: h2,且证书验证成功。此检查只是基础筛选,通过不代表 Reality 端到端必定成功。如果目标不可达或不合适,换一个目标并重新验证。
本教程将以下三处统一填写为同一个经过验证的域名:服务端 tls.server_name、reality.handshake.server、客户端 SNI。小火箭“服务器地址”仍填写 VPS 公网 IP,不填写目标域名。
5. 写入完整服务端配置
官方安装包会创建服务使用的 sing-box 用户。先确认用户存在,再准备配置目录;如果用户不存在,先检查安装是否成功:
1 | id sing-box && install -d -m 0750 -o root -g sing-box /etc/sing-box |
如果文件已有安装包提供的示例配置,将原内容整体替换为下面这一份 JSON,不要追加在文件末尾;已有自定义配置时先按第 10 节备份。将 替换为UUID、替换为PrivateKey、替换为ShortID 换成刚才生成的实际值。如果更换目标域名,修改两处 addons.mozilla.org。
1 | { |
按 Ctrl+O、回车保存,再按 Ctrl+X 退出 nano。设置文件权限:
1 | chown root:sing-box /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 | systemctl enable sing-box |
enable 设置开机自启动,restart 立即启动或重启服务。退出 SSH 不会关闭它;VPS 重启后也会由 systemd 自动启动。
检查运行状态和端口:
1 | systemctl is-enabled sing-box |
应分别看到 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 | ufw allow 443/tcp |
若没有 UFW 或状态为 inactive,继续检查实际使用的 nftables/iptables 与云安全组。不要为了照抄教程直接启用新防火墙,以免未放行自定义 SSH 端口而失联。
8. 生成小火箭导入链接
在 VPS 执行下面命令,替换 IP、UUID、公钥和 Short ID 四个占位值;PORT 与 SNI 按实际端口和握手目标填写。PUBLIC_KEY 填公钥,不是私钥;SNI 填刚才验证过的目标域名。
1 | SERVER_IP='替换为VPS公网IPv4' |
输出应为一整行 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 | systemctl is-enabled sing-box |
再次用手机访问网站,才能验证“重启后自动恢复”这条完整链路。
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 | install -d -m 0700 /root/sing-box-backups |
修改后先检查,仅检查成功才重启:
1 | /usr/bin/sing-box check -C /etc/sing-box && systemctl restart sing-box |
只改 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 节点验证方式。
