1.简介
ShadowTLS的优点在于它的使用TLS混淆,但并不需要提供网站端的证书,可以使用任意网站证书进行混淆。同时在我使用时Windows是没有客户端的,当下也是没有正经具备GUI的客户端,如果想用,需要一定的门槛,因此当前还算比较小众。它的安装非常方便,二进制文件直接运行即可,参数也不复杂。正因为它是以混淆为目的的工具,因此在服务器上需要再单独开启加密程序,例如Shadowsockes或snell等软件。
流程则是 SS监听端口->ShadowTLS配置端口->ShadowTLS监听端口->客户端配置ShadowTLS监听端口
2.安装加密代理程序
推荐使用Teddysun的Docker方式安装,具体可以参考:https://hub.docker.com/r/teddysun/shadowsocks-rust
访问不了的话我将主要配置写在下面
#创建配置文件
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运行,另一种是下载二进制文件运行。
我使用的是二进制方式:
#下载二进制文件到/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)
{
"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掉。如果有兴趣可以试试我用到机场 忍者云
5.安装后cpu占用100%
在某次更新内核后发现cpu占用100%,在监控查询后发现是io等待占用了很高的使用量,并且测试磁盘io速度没问题,机器正常运行服务也不卡,很奇怪,甚至找了厂商怀疑是宿主机io有问题,但反馈说看不出什么问题。就搁置了,偶然在github的issues发现有人询问这个问题,按照回复的方法把cpu占用问题解决了。
需要修改我们上方的/etc/systemd/system/shadow-tls.service文件,在Service模块下增加一行,然后 systemctl daemon-reload
刷新服务后重启即可解决。
[Service]
Environment=MONOIO_FORCE_LEGACY_DRIVER=1