sing-box 是一个高性能、支持多协议(如 VLESS、VMess、Shadowsocks、Trojan、SOCKS 等)的网络代理工具,常用于科学上网、代理分流等场景,兼容多种前端、支持多平台
sing-box 不分客户端与服务端,其部署方式与 shadowsocks 类似,根据需要选择合适的配置文件进行部署
下面实践如何快速地在 debian12 服务器上部署一个 vless 协议的 sing-box 代理服务
sing-box 下载地址
- https://github.com/SagerNet/sing-box/releases/tag/v1.11.14
选择合适版本,这里我选择二进制的 amd64 版本,如下:
mkdir -p /opt/sing-box
cd /opt/sing-box
wget https://github.com/SagerNet/sing-box/releases/download/v1.11.14/sing-box-1.11.14-linux-amd64.tar.gz
tar -xvf sing-box-1.11.14-linux-amd64.tar.gz
cd sing-box-1.11.14-linux-amd64
接下来创建一个配置文件 config.json,内容如下:
{
"log": {
"level": "info"
},
"inbounds": [
{
"type": "vless",
"listen": "::",
"listen_port": 443,
"users": [
{
"uuid": "621d1745-382d-40e4-87cf-23e1b17a7b57",
"flow": "xtls-rprx-vision"
}
],
"tls": {
"enabled": true,
"server_name": "www.microsoft.com",
"reality": {
"enabled": true,
"handshake": {
"server": "www.microsoft.com",
"server_port": 443
},
"private_key": "",
"short_id": ["12345678","23456789","34567890"]
}
}
}
],
"outbounds": [
{
"type": "direct"
}
]
}
以上配置需要修改:
uuid:替换为你自己的 UUID,使用./sing-box generate uuid命令生成private_key:替换为你自己的 private_key,可以使用./sing-box generate reality-keypair命令生成(公钥也要记住,在客户端需要填写)short_id:替换为你自己的 short_id,8 位数即可,可以多放几个,用于伪装握手时识别正确的流量
以上参数说明:
type:协议类型,这里使用 vlesslisten:监听地址,::表示监听所有地址listen_port:监听端口,这里使用 443users:用户列表,这里只配置了一个用户,使用 UUID 进行身份验证tls:TLS 配置,启用 TLS 并配置相关参数,server_name为域名,要避免使用 cloudflare 的域名(敏感),建议使用微软的域名或者其他在国内比较正常的域名reality:启用 Reality 协议,配置握手服务器、私钥和 short_idoutbounds:出站配置,这里使用 direct 直连
Xray Reality Vision 伪装原理如下:
- 利用 TLS(HTTPS)握手过程,模仿真实网站(如 www.microsoft.com)进行 TLS 指纹伪装,不需要目标站证书,客户端和服务端通过私钥/short_id 验证身份,防 DPI
server_name等同于目标网站,外部行为与访问目标站一致,达到不可区分效果
通过伪造与真实网站一致的 TLS 参数和握手,做到高度伪装流量,提升代理隐匿性和防检测能力
运行方法:
./sing-box run -c config.json
后台运行可以采用 systemd 管理,创建一个服务文件 /etc/systemd/system/sing-box.service,内容如下:
[Unit]
Description=Sing-box Proxy Service
Documentation=https://sing-box.sagernet.org
# 确保网络完全连通后再启动,避免 Bind 错误
After=network-online.target
Wants=network-online.target
[Service]
# --- 服务类型 ---
Type=simple
User=root
# --- 工作目录 ---
WorkingDirectory=/opt/sing-box/sing-box-1.11.14-linux-amd64
ExecStart=/opt/sing-box/sing-box-1.11.14-linux-amd64/sing-box run -c /opt/sing-box/sing-box-1.11.14-linux-amd64/config.json
# --- 重启策略 ---
Restart=on-failure
RestartSec=5s
# --- 日志设置 ---
StandardOutput=journal
StandardError=journal
# --- 安全性设置 ---
ProtectHome=yes
NoNewPrivileges=yes
PrivateTmp=yes
# --- 资源限制 (高并发核心) ---
LimitNOFILE=infinity
LimitNPROC=infinity
TasksMax=infinity
[Install]
WantedBy=multi-user.target
如果对速度有要求,那么还需要打开 /etc/sysctl.conf 文件,添加以下内容:
# --- 拥塞控制 (核心性能) ---
# 使用 FQ 队列算法配合 BBR
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
# --- 缓冲区与吞吐量优化 (基于万兆网卡标准) ---
# 允许更大的接收/发送窗口,适应高延迟高带宽网络
net.core.rmem_max = 33554432
net.core.wmem_max = 33554432
net.ipv4.tcp_rmem = 4096 87380 33554432
net.ipv4.tcp_wmem = 4096 16384 33554432
# 增加网络设备积压队列,防止突发流量丢包
net.core.netdev_max_backlog = 16384
# 增加监听队列上限
net.core.somaxconn = 32768
# --- 连接管理与并发 (核心稳定性) ---
# 开启 TCP 连接复用 (仅对出站连接有效,代理服务器必备)
net.ipv4.tcp_tw_reuse = 1
# 扩大本地端口范围,防止端口耗尽
net.ipv4.ip_local_port_range = 10000 65000
# 增加连接跟踪表上限 (需确保 nf_conntrack 模块已加载)
net.nf_conntrack_max = 2097152
net.netfilter.nf_conntrack_max = 2097152
# 缩短已建立连接的超时时间,加快跟踪表条目回收
net.netfilter.nf_conntrack_tcp_timeout_established = 7200
# --- 延迟与保活优化 ---
# 禁止空闲后的慢启动,保持全速发送
net.ipv4.tcp_slow_start_after_idle = 0
# 缩短 Keepalive 探测周期,防止 NAT 掐断连接
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_keepalive_intvl = 75
net.ipv4.tcp_keepalive_probes = 9
# --- 内存管理 ---
# 防止在内存压力下过度杀死 TCP 连接
net.ipv4.tcp_max_orphans = 32768
以上参数中,以下几个是最重要的(从高到低):
net.ipv4.tcp_congestion_control=bbrBBR (Bottleneck Bandwidth and RTT) 是 Google 开发的拥塞控制算法,旨在最大限度地利用带宽并最小化延迟net.core.default_qdisc=fq与 BBR 配合使用效果更佳。Fair Queue (FQ) 作为默认排队规则,能够为每个数据流提供更公平的带宽分配,有助于减少单个连接对整体性能的影响,并降低延迟net.core.somaxconn=32768增加监听套接字队列长度,允许更多的并发连接请求net.ipv4.tcp_tw_reuse=1允许 TIME-WAIT 状态的套接字被重用,减少端口耗尽问题