一个试图缓解嵌套的TLS握手指纹(TLS in TLS) 问题的代理协议。anytls-go 是该协议的参考实现。
- 灵活的分包和填充策略
- 连接复用,降低代理延迟
- 简洁的配置
快速食用方法
服务器
./anytls-server -l 0.0.0.0:8443 -p 密码
0.0.0.0:8443 为服务器监听的地址和端口。
客户端
./anytls-client -l 127.0.0.1:1080 -s 服务器ip:端口 -p 密码
127.0.0.1:1080 为本机 Socks5 代理监听地址,理论上支持 TCP 和 UDP(通过 udp over tcp 传输)。
sing-box
https://github.com/SagerNet/sing-box
已合并至 dev-next 分支。它包含了 anytls 协议的服务器和客户端。
from https://github.com/anytls/anytls-go
--------------------------------------------------------
科学上网最新AnyTLS协议快速上手,收集了两年的各代理协议反馈分享,reality依旧稳如老狗
项目地址:https://github.com/anytls/anytls-go
一个试图缓解嵌套的TLS握手指纹(TLS in TLS) 问题的代理协议。anytls-go 是该协议的参考实现。
灵活的分包和填充策略
连接复用,降低代理延迟
简洁的配置
支持AnyTLS协议的代理工具
sing-box:
https://github.com/SagerNet/sing-box
包含 anytls 协议的服务器和客户端
mihomo:
https://github.com/MetaCubeX/mihomo
包含 anytls 协议的服务器和客户端
Shadowrocket:
https://apps.apple.com/app/shadowrocket/id932747118
Shadowrocket 2.2.65+ 实现了 anytls 协议的客户端
NekoBox For Android:
https://github.com/MatsuriDayo/NekoBoxForAndroid/releases
NekoBox For Android 1.3.8+ 实现了 anytls 协议的客户端
搭建方式
通过anytls-go
服务端:
./anytls-server -l 0.0.0.0:8443 -p 密码
#后台运行
nohup ./anytls-server -l 0.0.0.0:8443 -p 密码 > /dev/null 2>&1 &
#结束进程
pkill -f anytls-server
客户端:
./anytls-client -l 127.0.0.1:1080 -s 服务器ip:端口 -p 密码
生成自签证书:
openssl req -x509 -newkey ec:<(openssl ecparam -name prime256v1) -keyout "./server.key" -out "./server.crt" -days 36500 -nodes -subj "/CN=bing.com"
配置文件:
cat > config.yaml << 'EOF'
listeners:
- name: anytls-in-1
type: anytls
port: 8443
listen: 0.0.0.0
users:
username1: 密码1
username2: 密码2
certificate: ./server.crt
private-key: ./server.key
padding-scheme: |
stop=8
0=30-30
1=100-400
2=400-500,c,500-1000,c,500-1000,c,500-1000,c,500-1000
3=9-9,500-1000
4=500-1000
5=500-1000
6=500-1000
7=500-1000
EOF
启动指令
./mihomo -d ./
#后台运行
nohup ./mihomo -d ./ > /dev/null 2>&1 &
#结束进程
pkill -f mihomo
对稳定要求比较高的用户建议自己搭建,我的频道也做了很多搭建教程,对于零基础的朋友建议参考23年这期视频搭建第三种reality节点,都是图形化操作非常简单,很多朋友担心自己搭建的节点会被墙,但只要跟着教程一步步操作就没问题,根据我多年被墙经验,以及这两年收到的反馈,我可以很负责的告诉大家
在使用视频中同款vps的情况下,搭建使用ss节点,第二天大概率会被封ip,反馈ip被封的用户无一例外都是搭建并使用了ss节点
搭建视频中介绍的第一种vmess+ws节点,第二天大概率被封端口,但不会直接封ip,换个端口能继续使用,但第二天又会被封端口,这是在2024年3月4号之后陆续收到大家的反馈,也就是一年前的事了,所以现在不推荐使用vmess+ws
搭建视频中介绍的第二种vless+vision节点,从今年的5月4号开始,也就是十天前,也陆续收到了部分用户反馈节点用不了,但是端口没有被封,经排查,是因为教程中用到的证书域名是nip.io,这个域名会被防火墙阻断,导致节点无法使用,和协议本身没关系
搭建视频中介绍的第三种vless+vision+reality节点,这两年一例被封的反馈都没有,真的是一例都没有,偶尔有白名单地区的用户反馈用不了,让他改成大厂域名之后就能用了,另外上面反馈vmess+ws被封端口的用户,我让他们在同一台vps上搭建reality节点,也都正常使用没有再收到反馈,可以说目前reality是稳如老狗,所以如果你要搭建的话,就回看那期视频的第三种方式搭建reality节点
以上情况仅供大家参考,不代表所有人都是一样的效果
回到今天的主题,tls in tls,也就是在tls里传输tls,这个已经能被防火墙识别应该是有共识了,当年vision流控的出现主要就是解决这个问题,通过填充指定长度的随机数据来消除tls in tls的流量特征,在这个月收到vless+vision节点被封的反馈时,我的第一反应是vision流控被防火墙识别了?经过测试发现只是对证书域名nip.io做了阻断,换个域名就行了,所以并不是vision流控本身被识别
本期介绍的anytls和vision类似,也是为了解决tls in tls特征,区别在于vision是固定的对开头的几个短包做指定长度的填充,我们无法进行自定义,而anytls可以通过参数指定我们要填充几个数据包,以及填充长度是多少,可以进行更加灵活个性化的设定,以此来增加防火墙识别的难度
目前除了官方的anytls-go,singbox和mihomo以及苹果端的小火箭和安卓端的nekobox也添加了对anytls的支持,至于xray的话还不支持而且大概率不会支持,因为有个还没发布的vision seed也能自定义,详情可以看这个讨论
接下来就来搭建anytls节点,我将演示两种搭建方式,一种是使用官方项目anytls-go搭建,另一种使用mihomo搭建
首先演示anytls-go,进入项目地址,这些用到的信息我会放在视频下方的说明栏,目前最新版本是008,复制这条链接地址,在你的vps上使用wget指令将其下载,由于是zip压缩文件,需要使用unzip进行解压,会得到三个文件,作为节点的服务端我们只需要运行这个anytls-server,运行的方式非常简单,一行代码搞定,你可以修改节点使用的端口,以及密码,视频演示我就简单一点,你的密码应该尽量复杂,将其复制到vps上执行,此时节点就运行在这台vps上的8443端口了,接着我们就可以连上这个节点进行科学上网了,首先还是演示官方程序,如果你是windows系统就下载这个,我是mac系统就下载这个, 下载完成将其解压出来,和vps一样解压后有三个文件,客户端我们只要使用anytls-client即可,在这个路径下打开命令行终端,windows系统的话可以在文件夹的地址栏输入cmd,回车进入命令行终端,接着执行这条指令,需要把端口改成服务器的8443,服务器ip就填入你vps的ip地址,密码要和服务端设置的一样,将修改后的指令粘贴到终端上执行,此时就会在我电脑的1080端口上开启一个socks代理,这个端口收到的数据都会交给vps上监听了8443端口的anytls处理,现在我就可以给系统或者浏览器设置一个socks代理使用了,但是由于官方程序比较简单,无法做分流,所以我们可以借助其他代理工具做分流,比如v2rayN,在这里添加一个socks代理,随便给个名称,地址和端口就填写anytls客户端监听的1080,点击确定,接着我们在v2rayN中使用这个socks节点,同样会将数据交给anytls处理,还能使用v2rayN的分流配置,测一下真链接,有延迟说明没问题,苹果用户也可以使用小火箭,新版支持anytls协议,如果你在这里没有看到anytls,需要进入app store更新小火箭,填入vps的ip,端口8443,以及密码abc,随便给个名称,点击保存,就算是添加好了,非常简单,安卓用户可以使用nekobox,同样如果在这里没有看到anytls的选项,建议更新到最新版,配置方式和小火箭是一样的,填入ip端口和密码即可,但还需要多一个步骤,anytls-go默认用的是自签证书,需要将这里的允许不安全启用,点击保存,接着就可以使用这个节点进行科学上网了,有延迟说明没问题,当确认节点没问题之后,我们就可以使用这条指令让anytls在vps后台运行,按ctrl+c结束进程,然后粘贴刚才的后台指令,回车执行,这样我们关闭终端也不会退出代理了,有延迟说明没问题,如果你想退出后台进程,可以使用这条指令关闭,关闭代理之后节点就没用了
这就是anytls的快速上手,你还可以使用其他基于singbox或者mihomo内核的代理工具使用anytls节点,这里就不演示了
可以看到基于tls的节点搭建居然这么简单,那是因为anytls-go只是为了验证anytls协议的一个demo,默认使用自签证书并且没法自己配置证书,所以如果你要使用自己域名证书的话,建议使用singbox或者mihomo搭建anytls节点
就以mihomo为例,当然为了简单一点我就使用自签证书了,复制这条指令到vps上执行,执行之后会生成证书和私钥文件,如果你有自己的域名可以找ca机构申请正规证书,然后同样会得到这两个文件,至于证书是啥怎么申请可以回看经典老番节点搭建系列教程之trojan篇,这段是mihomo使用的配置文件,你可以修改anytls的监听端口8443,以及密码,你可以设置多个密码,这里填入我们刚才生成的证书和私钥文件路径,最后就是anytls最关键的padding部分,可以灵活的设置填充几个数据包?每个数据包填充的字节范围,比如这里的意思是处理前8个数据包,给第0个数据包填充30字节,给第一个数据包填充100-400之间的随机字节大小,将第二个数据包进行策略拆分,先发送400-500字节,然后check检查该数据包是否还有数据,如果还有就继续发送500-1000字节,以此类推,你可以做独一无二的配置,比如只填充3个,就可以把后面的填充规则删掉,或者模仿vision填充,更详细的规则可以查看官方文档,如果你不配置padding话anytls也有默认配置,就是刚才的8个填充方案,将其全选复制,粘贴到vps上执行,会生成config.yaml的配置文件,接着进入这里下载mihomo,选择适合自己操作系统的版本,使用wget指令下载,使用gzip指令解压并且将名称重命名为mihomo,然后使用这条指令赋予文件可执行权限,接着就可以使用这条指令运行mihomo了,不出意外的话就可以看到日志输出anytls监听了8443端口,节点就算是搭建好了,再次测试连接,由于只是换了个搭建工具,节点的密码和端口都没变,所以不需要修改节点参数即可恢复使用,并且mihomo可以看到访问日志,这就是通过mihomo搭建anytls节点,也挺简单的,确定没问题之后,也可以使用这条指令放入后台运行,关闭命令行终端节点也能正常使用
另外如果你使用的是正规ca机构颁发的证书,建议取消启用允许不安全,然后在sni这里填入你的证书域名,最后点击保存即可,小火箭也需要重新配置,在tls设置下的sni中填入证书的域名,并且取消启用允许不安全,最后保存即可
-----------------------------------------------------------
搭建最强伪装“Any Reality”节点,各代理协议抓包分析,实现任意协议搭配任意传输,ss+ws、ss+grpc+reality、无tls裸奔的trojan
使用xray演示传输组合
官方一键安装脚本:bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install
xray服务端配置:
https://shadowsocks.org/doc/what-is-shadowsocks.html
{
"inbounds": [
//无加密ss
{
"protocol": "shadowsocks",
"listen": "::",
"port": 10000,
"settings": {
"network": "tcp,udp",
"method": "none",
"password": "123456"
}
},
//常规aes加密ss
{
"protocol": "shadowsocks",
"listen": "::",
"port": 10001,
"settings": {
"network": "tcp,udp",
"method": "aes-128-gcm",
"password": "123456"
}
},
//常规aes加密ss+ws传输
{
"protocol": "shadowsocks",
"listen": "::",
"port": 10002,
"settings": {
"network": "tcp,udp",
"method": "aes-128-gcm",
"password": "123456"
},
"streamSettings": {
"network": "ws",
"wsSettings": {
"path": "/aa",
"host": "baidu.com"
}
}
},
//无加密ss+reality传输安全
{
"protocol": "shadowsocks",
"listen": "::",
"port": 10003,
"settings": {
"network": "tcp,udp",
"method": "none",
"password": "123456"
},
"streamSettings": {
"security": "reality",
"realitySettings": {
"target": "yahoo.com:443",
"serverNames": [
"yahoo.com"
],
"privateKey": "eO3B3EMGXrYfGOe87NkUVusaeUxtLB4vxiqjVXqb9GU",
"shortIds": [
"0123456789abcdef"
]
}
}
},
//裸奔的trojan
{
"protocol": "trojan",
"listen": "::",
"port": 10004,
"settings": {
"clients": [
{
"password": "123456"
}
]
}
}
],
"outbounds": [
{
"protocol": "Freedom"
}
]
}
xray客户端ss+reality配置:
{
"inbounds": [
{
"listen": "::",
"port": 11111,
"protocol": "socks",
"settings": {
"auth": "noauth",
"udp": true
}
}
],
"outbounds": [
{
"protocol": "shadowsocks",
"settings": {
"servers": [
{
"address": "45.32.118.200",
"port": 10003,
"method": "none",
"password": "123456"
}
]
},
"streamSettings": {
"network": "tcp",
"security": "reality",
"realitySettings": {
"serverName": "yahoo.com",
"publicKey": "u4v3a_-uhIXPE2RoGaNy9_W5EK5UYV_hVN4Vpei75lM",
"shortId": "0123456789abcdef"
}
}
}
]
}
测试UDP发包:
import socks, socket
socks.set_default_proxy(socks.SOCKS5, "127.0.0.1", 11111)
socket.socket = socks.socksocket
udp_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp_sock.sendto(b"udp data", ("45.32.118.200", 12345))
xray客户端裸奔trojan配置:
https://trojan-gfw.github.io/trojan/protocol
{
"inbounds": [
{
"listen": "::",
"port": 11111,
"protocol": "socks",
"settings": {
"auth": "noauth",
"udp": true
}
}
],
"outbounds": [
{
"protocol": "trojan",
"settings": {
"servers": [
{
"address": "45.32.118.200",
"port": 10004,
"password": "123456"
}
]
}
}
]
}
使用sing-box搭建"Any Reality"节点:
官方一键安装脚本:curl -fsSL https://sing-box.app/install.sh | sh -s -- --version 1.12.0-beta.30
1.12暂无正式版
Sing-box服务端参考配置:
{
"inbounds": [
{
"type": "anytls",
"listen": "::",
"listen_port": 443,
"users": [
{
"name": "user",
"password": "123456"
}
],
"padding_scheme": [
"stop=8",
"0=30-30",
"1=100-400",
"2=400-500,c,500-1000,c,500-1000,c,500-1000,c,500-1000",
"3=9-9,500-1000",
"4=500-1000",
"5=500-1000",
"6=500-1000",
"7=500-1000"
],
"tls": {
"enabled": true,
"server_name": "yahoo.com",
"reality": {
"enabled": true,
"handshake": {
"server": "yahoo.com",
"server_port": 443
},
"private_key": "eO3B3EMGXrYfGOe87NkUVusaeUxtLB4vxiqjVXqb9GU",
"short_id": "0123456789abcdef"
}
}
}
]
}
Sing-box客户端参考配置:
https://github.com/SagerNet/sing-box/releases
{
"dns": {
"servers": [
{
"tag": "google",
"type": "tls",
"server": "8.8.8.8"
},
{
"tag": "local",
"type": "udp",
"server": "223.5.5.5"
}
],
"strategy": "ipv4_only"
},
"inbounds": [
{
"type": "tun",
"address": "172.19.0.1/30",
"auto_route": true,
"strict_route": true
}
],
"outbounds": [
{
"type": "anytls",
"tag": "anytls-out",
"server": "45.32.118.200",
"server_port": 443,
"password": "123456",
"idle_session_check_interval": "30s",
"idle_session_timeout": "30s",
"min_idle_session": 5,
"tls": {
"enabled": true,
"disable_sni": false,
"server_name": "yahoo.com",
"insecure": false,
"utls": {
"enabled": true,
"fingerprint": "chrome"
},
"reality": {
"enabled": true,
"public_key": "u4v3a_-uhIXPE2RoGaNy9_W5EK5UYV_hVN4Vpei75lM",
"short_id": "0123456789abcdef"
}
}
},
{
"type": "direct",
"tag": "direct"
}
],
"route": {
"rules": [
{
"action": "sniff"
},
{
"protocol": "dns",
"action": "hijack-dns"
},
{
"ip_is_private": true,
"outbound": "direct"
}
],
"default_domain_resolver": "local",
"auto_detect_interface": true
}
}
any tls协议,可以个性化设置字节填充的大小,以解决tls in tls的问题,由于其和trojan一样是基于tls的,所以需要配置域名证书,众所周知魔改tls的reality是可以直接使用其他网站的证书,如果能将anytls套上reality,那既解决了tit的问题,又不需要自己配置证书,岂不美哉?上期视频中就有朋友提到过这个组合,但多数朋友并不知道能这样操作
其实我们可以把处理需要代理的数据分成三个部分,最上层的第一个部分就是我们熟知的各种代理协议,比如ss、vmess、vless、trojan、socks、anytls等等,第二部分是传输方式,也就是上层经过代理协议处理的数据用什么方式传输,比如raw原始状态、ws、kcp、grpc、xhttp、httpupgrade、meek等等,我们熟悉的vmess+ws,就是将上层vmess处理后的数据通过ws传输,这层一般不对数据进行加密,要么是在第一层就通过代理协议加密了,要么是交给第三层的传输安全来处理,也就是我们熟知的tls以及reality,通过这个图我们就可以实现任意协议组合任意传输,比如我可以搭建普通的vmess节点,也可以搭建ss+ws的节点,或者ss+grpc+reality,还可以将原本的协议组合打乱,比如trojan协议默认情况下就是套了tls,我们可以给她换成reality或者直接脱掉tls让她裸奔,anytls也是类似,协议默认设计成了套tls,但我们可以给他套上reality,也就变成了anyreality了,纸上得来终觉浅,为了加深大家印象,我将通过网络抓包演示这一过程,你可以跟着我一起操作,但要提醒大家的是以下实验操作可能会导致你的ip被墙,如果对此不感兴趣,可以点击时间线跳到搭建anyreality节点部分
首先使用这条指令在vps上安装xray,这些用到的信息我会放在视频下方的说明栏,这是xray配置文件的位置,使用vim进行编辑,这是我用来演示的配置文件,其中包含了未加密的ss、aes加密的ss、通过ws传输aes加密的ss,通过reality加密传输的未加密ss,以及裸奔的trojan,将其全选复制粘贴到vps上,保存退出,然后使用这条指令重启xray,此时服务端就算是配置好了,先来演示未加密的ss,监听在vps的10000端口,加密方式为none,也就是不加密,虽然不加密,但xray内核要求password参数一定要有,即使没作用,在v2rayN中添加这个ss节点,密码可以随便填,加密方式选择none,点击确定,按回车将该节点设为活动,可以检测一下节点延迟,由于数据没有经过加密,大概率会被防火墙拦截导致测不出延迟,但我的网络环境是没有防火墙的,所以正常有延迟,接着打开wireshark抓包工具,使用这条指令进行捕获过滤,防止抓取到无关数据包,记住v2rayN监听的10808端口,接着在命令行使用curl访问google,并将其通过v2rayN进行代理,正常返回了网页内容,回到抓包工具,这就是一个标准未加密ss的tcp通信过程, 首先是经典的tcp三次握手建立和vps的连接,然后第四个数据包就是经过ss协议处理后,发给vps的数据,高亮部分就是数据部分,大小为87个字节,由于我们没有设置加密,可以清晰看到整个ss协议的结构,根据ss协议的实现细节我们可以分析出,第一个字节的03表示访问的是一个域名,这里都是以十六进制表示,0a表示域名长度为10个字节,后面接上访问目标google.com对应的ascii码,右侧还帮我们解析成了对应的ascii字符,长度确实是10个字节,再以两个字节代表访问的端口,0050转换成十进制就是80端口,我们没有指定谷歌的端口,所以使用http默认的80端口。ss协议的头部就是这些数据,后面的就是curl要传输的数据内容了,vps在10000端口收到数据后会用ss协议进行解析,并帮我们访问谷歌,然后将谷歌的数据返回给我们,由于没有加密,wireshark甚至将其解析成了http协议,但其实这些http数据是在ss协议里传输的,最后通过finish断开tcp连接,接着我们再执行一次curl访问谷歌,记住我们发送请求的数据大小是87字节,清空抓包数据,接着使用第二个经过aes加密的ss节点,填入对应的信息,重新使用curl访问谷歌,此时就能看到抓包数据和刚才有区别了,首先还是三次握手建立连接,然后传输数据,可以看到这些数据都是经过了加密的乱码,无法解析出对应的协议数据,服务器收到数据后会用aes进行解密获取到协议内容,并且在访问相同内容的情况下,数据大小从87字节膨胀到了171字节,所以加密大部分情况下会让数据变大,接着使用ss+ws的节点,host设置的baidu.com,路径设置为aa,修改节点对应的参数,重新进行抓包,这次抓到的数据包又不一样,三次握手之后发起了一个http请求,发给baidu.com的aa路径,请求将连接从http升级到websocket,也就是ws,接着服务器返回一个101响应码表示接受升级,接下来就是在这条ws连接里传输ss数据了,由于ss设置了aes加密,所以看到的都是乱码,对于ws而言,他不需要管里面传输的内容,只负责将数据转交给通信双方就行了,里面具体怎么处理就交给上层对应的代理协议即可,接着再来试试ss+reality,由于这不是常规组合,大部份代理工具都不支持,比如v2rayN就没有给ss节点添加reality的配置项,所以需要手搓配置文件直接使用内核启动,在本地使用xray运行这段ss+reality的配置,监听的socks端口是11111,编辑配置文件,接着运行xray,通过11111端口代理访问谷歌的数据,来到抓包工具,可以看到这次的抓包结果又不一样,经过传输安全reality,看上去我们就像在通过https访问yahoo,但实际上里面的内容是没有加密的ss数据,由于通过传输安全进行加密,所以里面的ss就不需要重复加密,可以看到同样的ss协议,使用不同的方式传输就会产生不同的流量特征,只要内核支持配置对应的参数,你就可以随意搭配组合
需要注意的是我们刚才演示的都是传输tcp数据的情况,而ss的udp并不走底层传输,也就是说通过ss代理udp数据是不会经过这段reality处理的,只会通过这段没加密的ss协议处理,为了验证这一情况,我在vps上通过nc监听了udp的12345端口,接着在本地通过ss+reality的代理,给ip为45.32.118.200的vps发送udp数据,vps收到了udp的数据,查看抓包结果,不像tcp的三次握手,udp是直接发送不需要先建立连接,也不管对方有没有收到,可以在数据部分看到我们发送的udpdata内容,01表示发给ipv4地址,后面跟上的就是对应的ip,转换成十进制就是45.32.118.200,再后面就是端口12345,接着就是对应的udp数据,可以看到这个udp数据包并没有通过reality进行加密,也就是没走底层传输,对延迟敏感的游戏党而言或许是个好事,原生udp数据发送快速直接延迟低,不过前提是得使用线路不错的vps,线路太烂的vps直接用原生udp可能还不如使用uot,同时游戏数据没有敏感内容也可以不用加密udp,但如果通过udp访问一些被墙的网站则可能会被阻断,要加密不走底层传输的udp,需要给ss协议设置加密方式,将本地的ss协议的加密方式改成aes或者其他,接着重新运行xray,由于udp可以直接发送不需要建立连接,所以服务端我就懒得改了,只是给大家验证一下加密效果,执行发送udp指令,可以看到这个udp数据就被aes加密了,看不到里面的内容,如果你要让服务端能正常代理,需要将服务端的加密方式也改成相同的aes
接着再试试裸奔的trojan,平时我们用的trojan都是套了tls的,她的正确使用方式也必须套tls,所以v2rayN小火箭等代理工具不允许你关闭传输安全,但我们直接跑内核的话就能随性所欲脱了她的tls,使用这段配置,密码设置为123456,没有设置任何传输方式,也就是这样的传输组合,重新运行xray,重新通过代理访问谷歌,就能抓到裸奔的trojan数据包了,参考trojan协议的实现细节,可以分析出,前面这段长度为56个字节,是经过sha224哈希计算的密码123456,接上0D0A的回车换行符,01表示建立tcp连接,这个01表示连接的是ipv4地址,后面4字节就是对应的ip地址,接下来的两字节是端口80,再接上一个0D0A回车换行,再后面就是curl实际发送的数据了,数据没有被加密,trojan协议本身也没法加密,只能依靠传输安全加密,也就是想要加密的话就必须套上tls或者reality,那才是trojan的正确使用方式,再看下trojan是怎么传输udp数据的,vps收到了我们发出的udp数据,和ss不同的是,trojan是通过udp over tcp的方式传输udp数据,也就是在tcp里传输udp,所以需要先经过三次握手建立tcp连接,然后才开始传输udp数据,大家可以根据torjan的协议实现细节来分析数据包内容,跟刚才讲的tcp差不多,这就是裸奔后的trojan
any tls和trojan一样本身不对数据进行加密,也是通过传输安全tls加密,我们可以将传输安全改成reality,使其变成any reality,由于xray不支持any tls,接下来就教大家通过singbox搭建:
首先使用这条指令在vps上安装singbox,我录制视频的时候singbox还没有提供1.12正式版,所以这里先用beta版,接着编辑这个目录下的配置文件,将里面的内容清空,这是anyreality的参考配置,上面是协议本身的配置,监听443端口,用户密码123456,以及该协议的灵魂,自定义填充字节,下面是传输安全reality配置,singbox的配置方式和xray不太一样,效果是一样的,你应该将这个参考配置的各项参数改成你的,不要直接拿去使用,全选复制粘贴到vps上,接着使用这条指令重启singbox,此时服务端就算是配置好了,接着配置客户端,小火箭虽然也支持anytls,但他没法把tls改成reality,所以目前只能使用singbox,sfm就是mac版的singbox,sfa就是安卓版的singbox,由于1.12还没发布正式版,如果你是iphone用户,需要等待正式版发布,或者捐助成为TestFlight用户,安装后添加一个配置文件,将这段参考配置粘贴上去,点击保存,接着就可以启用anyreality了,无需申请域名证书,同时解决tls in tls,可谓美哉,从抓包来看我们就是在正常访问雅虎,但里面传输的是对内层数据进行个性化字节填充的any tls
---------------------------------------------------------------
related post:
https://briteming.blogspot.com/2023/12/restls-tls.html
No comments:
Post a Comment