如何使用ShadowTLS

1. 简介

ShadowTLS 的优点在于它的使用 TLS 混淆，但并不需要提供网站端的证书，可以使用任意网站证书进行混淆。同时在我使用时 Windows 是没有客户端的，当下也是没有正经具备 GUI 的客户端，如果想用，需要一定的门槛，因此当前还算比较小众。它的安装非常方便，二进制文件直接运行即可，参数也不复杂。正因为它是以混淆为目的的工具，因此在服务器上需要再单独开启加密程序，例如 Shadowsockes 或 snell 等软件。

流程则是 SS 监听端口 ->ShadowTLS 配置端口 ->ShadowTLS 监听端口 -> 客户端配置 ShadowTLS 监听端口

2. 安装加密代理程序

推荐使用 Teddysun 的 Docker 方式安装，具体可以参考：https://hub.docker.com/r/teddysun/shadowsocks-rust

访问不了的话我将主要配置写在下面

Copy
#创建配置文件
mkdir -p /etc/shadowsocks-rust
#写入配置文件，具体内容如密码自己修改，端口号可以不改，这样docker启动时可以不改很多指令
#如果需要修改端口号，则注意容器内外端口号映射，不了解可以搜索或参考我的docker笔记。
cat > /etc/shadowsocks-rust/config.json <<EOF
{
"server":"0.0.0.0",
"server_port":9000,
"password":"password0",
"timeout":300,
"method":"aes-256-gcm",
"nameserver":"8.8.8.8",
"mode":"tcp_and_udp"
}
EOF
#拉取镜像并开启容器
docker pull teddysun/shadowsocks-rust
docker run -d -p 9000:9000 -p 9000:9000/udp --name ss-rust --restart=always -v /etc/shadowsocks-rust:/etc/shadowsocks-rust teddysun/shadowsocks-rust

如果只使用 Surge 的话可以考虑使用 Snell，以下是 Surge 作者对两者的对比：

完全无特征：如 shadowsocks、VMess 和其他衍生协议，目前已发现此类加密后完全不具备任何特征的流量，反而容易被当成一个特征进行封锁。

随机特征：Snell 的设计方式，Snell 客户端会随机生成一些特征，且随机生成时依赖于当前 session（Surge 重载一次配置算一次新的 session）、PSK 哈希等输入，使得每个用户的流量特征都不尽相同。（请放心，特征很弱且算法不可逆，而且每次重启 Surge 后特征都会更新，绝不可能用于用户追踪）目前该方案表现良好。

同时 Snell 也足够小众，如果有需要可以去Surge 手册使用，也是二进制直接运行即可。但其实已经使用 ShadowTLS，底层使用什么加密已经不再重要。

3. 配置 ShadowTLS

参考官方 github:https://github.com/ihciah/shadow-tls/releases

有两种方式，一种是修改官方的提供的 docker-compose.yml 文件使用 Docker 运行，另一种是下载二进制文件运行。

我使用的是二进制方式：

Copy
#下载二进制文件到/usr/bin中,我下载的为当下最新版，如果之后有更新，需要自行去releases中寻找。
cd /usr/bin
wget https://github.com/ihciah/shadow-tls/releases/download/v0.2.23/shadow-tls-x86_64-unknown-linux-musl
#增加运行权限
chmod +x shadow-tls-x86_64-unknown-linux-musl
#修改开机自启动文件：
cat > /etc/systemd/system/shadow-tls.service <<EOF
[Unit]
Description=Shadow-TLS Custom Server Service
Documentation=man:sstls-server(1)
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
ExecStart=/usr/bin/shadow-tls-x86_64-unknown-linux-musl --v3 server --listen 0.0.0.0:45632 --password I6knDArfHW2TPhRdB7 --server 127.0.0.1:9000 --tls www.bing.com:443

[Install]
WantedBy=multi-user.target
EOF

#以上I6knDArfHW2TPhRdB7是密码文件，--v3是运行版本，--listen是监听再45632端口，即客户端配置的端口应是45632，--server对应的是加密代理的端口上面配置的是9000，--tls是混淆的网站证书，不要填写google这类网站。
#然后刷新并启动服务
systemctl daemon-reload
systemctl enable shadow-tls.service
systemctl start shadow-tls.service

4. 配置客户端

在配置客户端时注意，代理类型或方式应选择加密代理方式，如 ss 或 snell，端口填写 ShadowTLS 的监听端口，密码输入加密代理中的密码，在单独填写 Shadow-TLS 配置位置填写对应版本：v3 ，Shadow-TLS Password 对应 Shadow-TLS 启动时填写的密码，SNI 填写启动时 --tls 的对应网址。

在 Windows 中如果使用的话需要用到 sing-box，具体可以参考：https://sing-box.sagernet.org/zh/examples/shadowtls/

需要自行编写配置文档，我更推荐使用 NekoBox，它自带能够设置链式代理，在设置中选择核心为 sing-box，然后根据官方配置分别创建 ShadowTLS 和 ss 的配置，其中 ShadowTLS 需要使用自定义出站配置。详细可以参考官方手册：https://matsuridayo.github.io/n-configuration/#_13

这里我截取部分

示例： 在 NekoBox 中使用 ShadowTLS 服务器。

新建一个自定义出站（配置 1）

Copy
{
"type": "shadowtls",
"tag": "shadowtls-out",
"server": "服务器ip地址",
"server_port": 45632,
"tls": {
"enabled": true,
"server_name": "www.bing.com"
}
}

新建一个 Shadowsocks 出站（配置 2）可以通过可视化界面创建

按 配置 1 配置 2 顺序组成链式代理

同时使用 NekoBox 的链式代理，即使不使用 ShadowTLS，也可以通过机场将流量转发到自己服务器上，以免服务器被 ban 掉。如果有兴趣可以试试我用到机场 忍者云