视频教程
youtube播放地址:https://youtu.be/wK7pR0Sbtdo
GIA高速VPS推荐: https://d.m123.org
家宽住宅VPS推荐: https://v.m123.org
自用专线机场推荐: https://b.m123.org
使用xray演示传输组合
官方一键安装脚本:bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install
xray服务端配置
{
"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配置
{
"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搭建"AnyReality"节点
官方一键安装脚本: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客户端参考配置
{
"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
}
}
视频文稿(忽略)
之前视频介绍过的anytls协议,可以个性化设置字节填充的大小,以解决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
anytls和trojan一样本身不对数据进行加密,也是通过传输安全tls加密,我们可以将传输安全改成reality,使其变成anyreality,由于xray不支持anytls,接下来就教大家通过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,可谓美哉,从抓包来看我们就是在正常访问雅虎,但里面传输的是对内层数据进行个性化字节填充的anytls