本文最后更新于 2024-04-05,文章原本内容可能已经过时,请查看是否有更新内容。

前言

surge的订阅功能 shadow-tls v3,不用是浪费(doge

CleanShot 2023-04-18 at 18.47.27@2x.png

感谢老刘又有东西让我们折腾了(doge

那么现在就来分享一下如何使用,以snell为例,ss同理

不过不建议ss+stls,udp没了点此查看iptables转发UDP流量,曲线救国

⚠️前排提醒:善用右边的大纲目录跳转


docker搭建shadow-tls

docker compose搭建shadow-tls

用同一份docker-compose.yml文件搭建shadow-tls有两种情况,请自行选择跳转

一种是如果你之前已经搭建了snell,现在想要搭建shadow-tls

一种是你之前什么都没搭建,现在想要搭建snell+shadow-tls

如果你是手搓,跳转

如果已搭建snell

如果你是按照我的这篇博客搭建的snell,那你接下来可以无痛搭建shadow-tls

Snell服务搭建 ft. Surge(4.0.1最新版)

⚠️如果你不是按照我这个教程来的话,那么在docker compose搭建下,你需要自行修改一下docker-compose.yml所在的文件夹名称!!

/root/snelldocker改成你自己的

⚠️:docker compose搭建shadow-tls不需要区分amd或者arm

查看snell配置

首先用cd命令,进入snell的docker-compose.yml所在文件夹

cd /root/snelldocker

接下来教程都将以这个路径作为例子,请将snelldocker换成自己的文件夹名

此时里面已经有你搭建的snell了,你需要在docker-compose.yml里加上shadow-tls的配置,但在此之前,得先知道你自己snell的节点端口

输入命令查看snell配置

cat /root/snelldocker/snell-conf/snell.conf

图例:

我们需要的是第二行的端口,记下来,如图我是28272

改docker-compose.yml第一种方法

可以用带sftp的ssh工具直接将下面的这一段复制到docker-compose.yml里去

  shadow-tls:
    image: ghcr.io/ihciah/shadow-tls:latest
    container_name: shadow-tls
    restart: always
    network_mode: "host"
    environment:
      - MODE=server
      - V3=1
      - LISTEN=0.0.0.0:8443   # ipv6的话改成[::]:8443 ,8443不用改动
      - SERVER=127.0.0.1:xxx  # ipv6的话改成[::1]:xxx ,xxx是你刚刚记下来的snell节点的端口
      - TLS=gateway.icloud.com:443 #这里可以自己选,下面放了作者推荐的链接
      - PASSWORD=Gm8UXm6aridZ  # 这里是密码,随便改

要改TLS的话,作者推荐V3 Protocol · ihciah/shadow-tls Wiki · GitHub

⚠️注意:里面的一些内容要自己改动,而且缩进一定一定要对齐!!

如图红线所示对齐

CleanShot 2023-04-18 at 18.47.27@2x.png图示例可能与你的配置不同,不需要管,根据提示该改的地方改,其他照着命令复制就行

改docker-compose.yml第二种方法

如果没有sftp的话,那也可以使用vim工具(⚠️注意,要用英文输入法)

输入以下命令

sudo apt-get install vim -y

sudo vim /root/snelldocker/docker-compose.yml

就会出现如图

CleanShot 2023-04-18 at 19.36.58@2x.png

i进入编辑模式,将光标移动到上图中灰色方块的地方,然后复制下面的代码到里面去

⚠️注意里面的参数一些需要更改

  shadow-tls:
    image: ghcr.io/ihciah/shadow-tls:latest
    container_name: shadow-tls
    restart: always
    network_mode: "host"
    environment:
      - MODE=server
      - V3=1
      - LISTEN=0.0.0.0:8443   # ipv6的话改成[::]:8443 ,8443不用改动
      - SERVER=127.0.0.1:xxx  # ipv6的话改成[::1]:xxx ,xxx是你刚刚记下来的snell节点的端口
      - TLS=gateway.icloud.com:443  #这里可以自己选
      - PASSWORD=Gm8UXm6aridZ  # 这里是密码,随便改

要改TLS的话,作者推荐V3 Protocol · ihciah/shadow-tls Wiki · GitHub

如图所示

⚠️红线提示 注意对齐!!

CleanShot 2023-04-18 at 19.39.47@2x.png图示例可能与你的配置不同,不需要管,根据提示该改的地方改,其他照着命令复制就行

然后按esc退出编辑模式,再按:加上wq保存退出即可

启动shadow-tls

输入以下命令即可

cd /root/snelldocker && docker compose pull && docker compose up -d

查看日志输入

docker logs -f shadow-tls

至此服务端已经完成
点击跳转在surge上应用

如果你没搭建snell

那就简单了,直接一条龙搭建snell+shadow-tls

创建文件夹

输入以下命令

mkdir -p /root/snelldocker/snell-conf

创建docker-compose.yml

然后按照下面的提示,自行选择

amd系统

cat > /root/snelldocker/docker-compose.yml << EOF
version: "3.8" 
services:
  snell:
    image: accors/snell:latest
    container_name: snell
    restart: always
    network_mode: host
    volumes:
      - ./snell-conf/snell.conf:/etc/snell-server.conf
    environment:
      - SNELL_URL=https://dl.nssurge.com/snell/snell-server-v4.0.1-linux-amd64.zip
  shadow-tls:
    image: ghcr.io/ihciah/shadow-tls:latest
    container_name: shadow-tls
    restart: always
    network_mode: "host"
    environment:
      - MODE=server
      - LISTEN= 0.0.0.0:8443
      - SERVER= 127.0.0.1:28272
      - TLS=gateway.icloud.com:443
      - PASSWORD=Gm8UXm6aridZ
EOF

ipv6的话

把LISTEN= 0.0.0.0:8443改成LISTEN= [::]:8443

把SERVER= 127.0.0.1:端口(端口示例为28272) 改成SERVER= [::1]:端口(端口示例为28272),端口可以改

要改TLS的话,作者推荐V3 Protocol · ihciah/shadow-tls Wiki · GitHub

arm系统

cat > /root/snelldocker/docker-compose.yml << EOF
version: "3.8" 
services:
  snell:
    image: accors/snell:latest
    container_name: snell
    restart: always
    network_mode: host
    volumes:
      - ./snell-conf/snell.conf:/etc/snell-server.conf
    environment:
      - SNELL_URL=https://dl.nssurge.com/snell/snell-server-v4.0.1-linux-aarch64.zip
  shadow-tls:
    image: ghcr.io/ihciah/shadow-tls:latest
    container_name: shadow-tls
    restart: always
    network_mode: "host"
    environment:
      - MODE=server
      - LISTEN= 0.0.0.0:8443
      - SERVER= 127.0.0.1:28272
      - TLS=gateway.icloud.com:443
      - PASSWORD=Gm8UXm6aridZ
EOF

ipv6的话

把LISTEN= 0.0.0.0:8443改成LISTEN= [::]:8443

把SERVER= 127.0.0.1:端口(端口示例为28272) 改成SERVER= [::1]:端口(端口示例为28272),端口可以改

要改TLS的话,作者推荐V3 Protocol · ihciah/shadow-tls Wiki · GitHub

创建snell配置

输入以下命令

cat > /root/snelldocker/snell-conf/snell.conf << EOF
[snell-server]
listen = 0.0.0.0:28272
psk = GLk1ff4wuQNCDSqr97WwsHwe8KBjy3S
ipv6 = false
EOF

如果要开ipv6的话,就把 listen 那一行的 0.0.0.0 改成 ::0 ,然后把下面的 ipv6=false 改成 ipv6=true 即可

启动snell+shadow-tls

cd /root/snelldocker

docker compose up -d

至此服务端已经完成

点击跳转在surge上应用


手搓搭建shadow-tls

⚠️注意:强烈建议docker compose搭完全程

如果你是按照我的这篇博客搭建的snell,那你接下来可以无痛搭建shadow-tls

Snell服务搭建 ft. Surge(4.0.1最新版)

查看snell配置

输入以下命令查看配置

cat /etc/snell-server.conf

图例:

我们需要的是第二行的端口,记下来

搭建shadow-tls

下载shadow-tls服务(2024年2月24日,此时的链接为最新)

amd

sudo wget https://github.com/ihciah/shadow-tls/releases/download/v0.2.25/shadow-tls-x86_64-unknown-linux-musl -O /usr/local/bin/shadow-tls

arm

sudo wget https://github.com/ihciah/shadow-tls/releases/download/v0.2.25/shadow-tls-aarch64-unknown-linux-musl -O /usr/local/bin/shadow-tls

之后的最新版在这里找Shadow-tls

赋予执行权限

sudo chmod +x /usr/local/bin/shadow-tls

最后输入以下命令

⚠️注意需要更改一些地方

cat > /etc/systemd/system/shadow-tls.service << EOF
[Unit]
Description=Shadow-TLS Proxy Service
After=network.target

[Service]
Type=simple
ExecStart=shadow-tls server --listen 0.0.0.0:8443 --server 127.0.0.1:端口 --tls gateway.icloud.com:443 --password Gm8UXm6aridZ
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=shadow-tls

[Install]
WantedBy=multi-user.target
EOF

ipv6的话

把--listen 0.0.0.0:8443改成--listen [::]:8443

把--server 127.0.0.1:端口 改成--server [::1]:端口

要改TLS的话,作者推荐V3 Protocol · ihciah/shadow-tls Wiki · GitHub

端口就填第一步记下的snell节点端口

启动shadow-tls

依次输入以下命令

systemctl start shadow-tls

systemctl enable shadow-tls

查看shadow-tls的状态

systemctl status shadow-tls

看到 active 就代表正常运行


在surge上应用

在确定服务端搭建完成之后,就可以将以下配置,复制到对应的snell节点上了

, shadow-tls-password=Gm8UXm6aridZ, shadow-tls-sni=gateway.icloud.com, shadow-tls-version=3

图中对应上面的配置

CleanShot 2023-04-18 at 19.51.03@2x.png图示例可能与你的配置不同,不需要管,根据提示该改的地方改,其他照着命令复制就行

然后再把原本的snell节点的端口改成8443!!!这一步很重要,一下午我都在排查问题,结果是因为这个一直ping不通

最终节点的配置应该是这样

Snell+TLS = snell, x.x.x.x(vps的ip), 8443, psk=GLk1ff4wuQNCDSqr97WwsHwe8KBjy3S(这是原来snell节点的密钥), version=4, shadow-tls-password=Gm8UXm6aridZ(这是shadow-tls的密码), shadow-tls-sni=gateway.icloud.com(TLS,服务端和这个要一样), shadow-tls-version=3

至此全部完成!!

鸣谢

感谢telegram surge pro群@lucaca和@kiya,可以关注一波大佬频道

Luca的自用VPS教程