很多小伙伴们担心某些“节日”的时候自己小鸡的IP被墙,这时候,手搓一个WS+TLS协议并套上CF可以有效保证和伙伴们沟通不失联。
以下演示基于半自动手搓,Sing-box可执行文件和配置都放置于/opt/sing-box目录下面,对Linux熟悉的小伙伴请自行下载安装Sing-box。以下演示均在Debian 12,root权限下进行。
安装最新稳定版Sing-box(目前是1.11.11)
cd /root
VERSION=$(curl -s https://api.github.com/repos/SagerNet/sing-box/releases/latest \
| grep tag_name \
| cut -d ":" -f2 \
| sed 's/\"//g;s/\,//g;s/\ //g;s/v//')
wget https://github.com/SagerNet/sing-box/releases/download/v$VERSION/sing-box-$VERSION-linux-amd64.tar.gz -O sing-box.tar.gz
tar xzvf sing-box.tar.gz --strip-components 1
mkdir /opt/sing-box
mv ./sing-box /opt/sing-box/sing-box
rm /root/LICENSE /root/sing-box.tar.gz
给Sing-box添加一个开机启动文件
nano /etc/systemd/system/sing-box.service
内容如下:
[Unit]
Description=sing-box service
Documentation=https://sing-box.sagernet.org
After=network.target nss-lookup.target
[Service]
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_SYS_PTRACE CAP_DAC_READ_SEARCH
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_SYS_PTRACE CAP_DAC_READ_SEARCH
ExecStart=/opt/sing-box/sing-box -C /opt/sing-box/ run
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=10s
LimitNOFILE=infinity
[Install]
WantedBy=multi-user.target
并设置成开机启动。
systemctl enable sing-box
至此Sing-box安装完毕。
给Sing-box添加一个出栈配置,不写也行,我写的目的是禁止回国流量,以及给Google服务分流一下,避免部分Google服务不能用的情况,譬如按键图标丢失,Google翻译不能用这类的情况。
nano /opt/sing-box/outbound.config.json
内容如下:
{
"outbounds": [
{
"type": "direct",
"tag": "direct"
}
],
"route": {
"rules": [
{
"rule_set": "geosite-google",
"outbound": "direct"
},
{
"rule_set": "geosite-cn",
"action": "reject"
},
{
"rule_set": "geoip-cn",
"action": "reject"
},
{
"outbound": "direct"
}
],
"rule_set": [
{
"tag": "geosite-cn",
"type": "remote",
"format": "binary",
"url": "https://github.com/lyc8503/sing-box-rules/raw/rule-set-geosite/geosite-cn.srs",
"download_detour": "direct"
},
{
"tag": "geoip-cn",
"type": "remote",
"format": "binary",
"url": "https://github.com/lyc8503/sing-box-rules/raw/rule-set-geoip/geoip-cn.srs",
"download_detour": "direct"
},
{
"tag": "geosite-google",
"type": "remote",
"format": "binary",
"url": "https://github.com/lyc8503/sing-box-rules/raw/rule-set-geosite/geosite-google.srs",
"download_detour": "direct"
}
]
},
"experimental": {
"cache_file": {
"enabled": true
}
}
}
什么DNS之类不懂别瞎搞,没啥意义。
因为WS+TLS需要用到证书,所以安装一个ACME.sh脚本用来申请/更新证书。
curl https://get.acme.sh | sh -s email=example@example.com
邮箱随便输,反正也不看。
接下去注册一个大善人Cloudflare账户,因为网上随处可见,此处不再复述。添加一个你想用的域名到Cloudflare,收费免费顶级二级域名都无所谓。添加一个A记录指向你小鸡的IPv4,或者添加一个AAAA记录指向你小鸡的IPv6。先关闭小云朵。

下面就是手搓一个VLESS+WS+TLS协议的步骤。
如果小鸡有IPv6,强烈建议用IPv6架设,套上CF提供双栈IPv4+IPv6入口美汁汁。
添加一个WS+TLS的配置文件。
nano /opt/sing-box/ws-tls.config.json
内容如下:其中,UUID可以在线生成一个https://www.uuidgenerator.net/,或者你用Sing-box/V2RayN之类的软件也可以生成。
{
"log": {
"disabled": false,
"level": "info",
"timestamp": true
},
"inbounds": [
{
"type": "vless",
"tag": "websocket-in",
"listen": "你的IPv4或者IPv6地址",
"listen_port": 443,
"users": [
{
"name": "1024",
"uuid": "你的UUID"
}
],
"transport": {
"type": "ws",
"path": "/",
"max_early_data": 2048,
"early_data_header_name": "Sec-WebSocket-Protocol"
},
"tls": {
"enabled": true,
"server_name": "你的域名",
"certificate_path": "/opt/sing-box/你的域名.fullchain.cer",
"key_path": "/opt/sing-box/你的域名.key"
}
}
]
}
给域名申请证书,如果域名指向的是IPv6,需要添加–listen-v6参数,如果默认的ZeroSSL服务器嗝屁了,可以加–server letsencrypt换成Let‘s Encrypt服务器
/root/.acme.sh/acme.sh --issue -d 你的域名 --standalone --listen-v6
把证书安装到Sing-box所在目录,证书到期前ACME.sh脚本会自动更新证书,同时重启Sing-box
/root/.acme.sh/acme.sh --install-cert -d 你的域名 --fullchain-file /opt/sing-box/你的域名.fullchain.cer --key-file /opt/sing-box/你的域名.key --reloadcmd "systemctl restart sing-box"
看看Sing-box是否正常启动了。
systemctl status sing-box
正常情况下,你的WS+TLS节点已经可以使用了,但流量还没有通过Cloudflare。这时可以打开小云朵,并设置Cloudflare的SSL。


并设置SSL模式为完全(严格)/Full(Strict)。VPS用普通客户端证书(就是我们用ACME.sh申请的证书)用完全(严格)模式,VPS用CF 15年免费源证书用完全模式,VPS不设置证书(仅WS)用灵活模式。

过几分钟等开启小云朵后的DNS解析生效,然后就可以正常使用套Cloudflare的WS+TLS的节点了。