视频教程
youtube播放地址:https://youtu.be/GB_SHmqotzQ
XHTTP文档:https://github.com/XTLS/Xray-core/discussions/4113
GIA高速VPS推荐: https://d.m123.org
家宽住宅VPS推荐: https://v.m123.org
自用专线机场推荐: https://b.m123.org
教程代码
安装3x-uibash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)
安装v2rayN
https://github.com/2dust/v2rayN/releases
上下行分离 (xhttp+tls+cdn)
{
"downloadSettings": {
"address": "a.abc.com",
"port": 443,
"network": "xhttp",
"security": "tls",
"tlsSettings": {
"serverName": "a.abc.com",
"allowInsecure": false
},
"xhttpSettings": {
"path": "/b5fa9725",
"mode": "auto"
}
}
}
上下行分离 (xhttp+reality)
{
"downloadSettings": {
"address": "1.1.1.1",
"port": 443,
"network": "xhttp",
"xhttpSettings": {
"path": "/b5fa9725",
"mode": "auto"
},
"security": "reality",
"realitySettings": {
"serverName": "yahoo.com",
"fingerprint": "chrome",
"show": false,
"publicKey": "Vhl8jHMxoC-ycZ-TfUKa4xqlQnAyWVYZ2GxrYYC6fgY",
"shortId": "3f",
"spiderX": "/"
}
}
}
视频文稿(忽略)
2023年5月份,v2ray添加了一个叫meek的传输协议,其最大优势在于可以将我们的代理数据封装在正常的http流量里进行传输,看上去就好像在访问普通的网站,由于其属于正常的http流量,自然就能通过cdn传输,这也是meek主要的应用方式,配合某些支持域前置的cdn,可以实现几乎不可能被墙的代理方式,当时我也出了一期视频介绍,感兴趣的朋友可以回看,但meek的传输效率太低导致网速很慢,无法当主力使用,属于是防失联的备用方案
在同一天,有人希望能将meek添加到xray中实现更通用的过cdn方式,但对比meek分包上行+分包下行的传输方式,xray作者rprx表示可以通过更好的分包上行+流式下行的传输方式提升网速,同样能过cdn,所以并没有添加对meek的支持,此事不了了之,时间来到一年后的2024年6月份,另一位开发者根据当时提出的分包上行、流式下行开发了新的传输协议splithttp,同样是为了过cdn,对比meek下行传输效率有了质的提升
举个例子,假设电脑想要访问谷歌,浏览器的请求来到代理工具,如果是使用普通的tcp传输,会直接通过tcp连接将字节流发送到节点服务器,也就是流式上行,节点服务器收到数据后会帮我们访问谷歌,谷歌返回的内容来到节点服务器,节点再通过tcp连接将字节流返回给代理工具,也就是流式下行,代理工具再将数据交给浏览器,这是常见的代理传输流程,此处我们省略了上层ss协议对数据进行加解密的过程
假设使用meek进行传输,浏览器访问谷歌的请求来到代理工具,meek会将请求分成一个个小的http数据包,发送到meek节点,也就是分包上行,节点会将数据重新拼装成完整的http请求,然后帮我们访问谷歌,谷歌返回的内容来到节点服务器,节点将内容分成一个个小的http数据包,代理工具通过不停的找节点要数据获取到所有数据包,也就是分包下行,接着将数据重新拼装成完整的http响应,交给浏览器,这样就通过meek传输完成了一次代理访问
再假设使用splithttp进行传输,浏览器访问谷歌的请求来到代理工具,上行和meek一样,splithttp会将请求分成一个个小的http数据包,发送到节点服务器,也就是packet-up分包上行,节点将数据重新拼装成完整的http请求,然后帮我们访问谷歌,谷歌返回的内容来到节点服务器,节点将数据封装成支持流式传输的不定长chunk响应返回给代理工具,不需要和meek一样不停找节点要数据,接着将数据交给浏览器,这样就通过splithttp传输完成了一次代理访问,这就是三者在传输上的主要区别,可以看出流式传输要比分包传输效率高得多,至于分包的目的是为了兼容cdn,而splithttp在2024年下半年通过不断更新迭代,目前已经实现了stream-up流式上行过cdn,还支持字节填充、多路复用、上下行分离等特性,并将该协议更名为xhttp,这些特性都有什么作用请大家自行查阅作者发布的文档,有非常详细的解释,这里就不花时间介绍了,直接进入喜闻乐见的搭建环节,演示搭建xhttp+reality,以及xhttp+tls套用cdn,并且实现上下行分离,另外这个新的传输协议功能很多,相应的配置参数也非常多,好在大部分参数都有默认值不需要配置,所以搭建起来也比较简单,本期教程的目的在于让大家先用起来,尽量使用默认参数,你要自己调的话请参考作者发的文档,网址我会放在视频下方的说明栏
虽然官方不推荐3xui,但为了大家能尽快上手,我这里还是使用大家最容易接受的web面板进行搭建,首先使用这条指令一键安装3xui,相关指令我会放在视频下方的说明栏,同样你能看到我的视频就说明你已经处于翻墙状态,web面板明文的问题我就不再强调了,访问这个网址进入xui后台地址,登陆之后来到入站列表,添加一个入站,先以xhttp+reality为例,端口建议使用443,安全设置为reality,点击这里设置密钥,最后在这里设置一个适合你vps的网站域名,这些都是以前讲过的搭建reality节点步骤,没有什么区别,如果此时点击添加,就创建了一个普通的reality节点,现在我们要使用xhttp传输协议,则还需要进一步设置,将传输改成xhttp,在这里随便设置一个路径,比如把用户id前面一小段复制过来,其他都按默认值不需要改动,最后点击添加,这样一个vless+xhttp+reality节点就搭建好了,非常简单,对比普通的reality节点,这个节点还能有xhttp的传输特性,比如字节填充,多路复用,上下行分离等,点击这里可以扫码二维码导入代理工具,或者直接点击二维码复制节点链接,由于xhttp是新协议,很多代理工具都还不支持,电脑端可以使用v2rayN,安卓端可以使用v2rayNG,现在v2rayN也支持mac系统了,在这里下载适合你系统的版本,这就是v2rayN在mac端的界面,还是熟悉的配方,第一次打开可能是英文版,在这里切换为中文,mac版不包含内核,需要点击这里更新,勾选xray和geo数据库,最后点击更新即可,如果无法在线更新,也可以在设置中找到存储位置,手动下载内核到这个目录里,复制刚才搭建的节点链接,粘贴到v2rayN中即可导入,测试真链接,有延迟说明节点可以正常使用,接着就可以和windows端一样,配置好系统代理之后就能使用这个xhttp+reality节点进行科学上网了,可以看到访问ip是节点的ip,通过直连使用xhttp就完成了,另外目前普通的reality节点就很稳了,如果你用不到xhttp的那些特性,也可以使用普通的reality节点,并不一定要追新
和meek一样,xhttp最初的目的主要是为了过cdn,所以再来演示一下使用xhttp过cdn,配置方式和我们以前讲过的ws过cdn是一样的,添加一个入站,先来搭建一个裸vless+xhttp,类似以前搭建的vmess+ws,端口建议设置为80,如果80端口有其他用途的话就随便设置一个,比如6666,传输改成xhttp,随便设置一个路径,最后点击添加,这样一个vless+xhttp就搭建好了,非常简单
接着套cdn,以cf为例,我有两个域名,先使用第一个121343,来到dns设置,添加一条解析记录,名称随便设置,比如a,填入节点的ip地址,代理状态要勾选,点击保存,接着将tls加密模式设置为灵活,也就是浏览器到cf进行tls加密,cf到vps不进行加密,可以点击这里进行修改,选择自定义tls,改成灵活后保存即可,接着来到网络页面,启用grpc即可实现流式上行,最后来到规则下的origin rules,如果你刚才搭建的裸xhttp节点用的是80端口就可以省略这一步操作,点击创建规则,随便给个名称,跟着视频操作,在这里填入刚才设置的dns解析域名,目标端口设置为重写,在这里填入裸xhttp节点所使用的端口6666,此时就算是配置好了,复制这个裸xhttp节点链接,导入代理工具,将地址改成刚才设置dns的域名,端口改成443,传输层安全设置为tls,如果你要优选ip的话,就把域名填入sni,然后在地址这里输入你优选后的ip即可,都是以前讲过的内容这里就不浪费时间演示了,最后点击确定,测试真链接,有延迟说明可以正常使用,这样就算是套上cdn了,和以前ws套cdn几乎是一样的
接下来讲点不一样的,使用xhttp实现上下行分离,其作用在文档中也有说明,主要是给gfw上强度,可能需要一段时间才能体现其价值,我们刚才搭建的这个cdn节点上下行都是使用a.121343.xyz,也就是代理工具会和a.121343.xyz建立上下行两个连接,浏览器访问谷歌的请求会通过上行连接来到cdn,cdn将其转交给a.121343.xyz这个域名绑定的ip,也就是我们的节点,节点再帮我们访问谷歌,谷歌返回的数据来到节点,节点通过刚才建立的下行连接将数据返回给代理工具,从而实现代理访问谷歌
而如果我将下行配置为b.888005.xyz,代理工具会和a.121343.xyz建立上行连接,和b.888005.xyz建立下行连接,由于ab两个域名都是绑定的节点ip,所以最终都是指向我们的节点,浏览器访问谷歌的请求会通过上行连接来到cdn,cdn将其转交节点,节点再帮我们访问谷歌,谷歌返回的数据来到节点,节点通过刚才建立的下行连接将数据返回给代理工具,从而实现上下行分离代理访问谷歌
接下来进行搭建操作,计划使用a.121343.xyz上行,使用b.888005.xyz下行,如果你只有一个域名的话,也可以使用a.121343.xyz上行,使用b.121343.xyz下行进行验证,或者即使是同一个域名,也可以配置不同的优选ip进行上下行分离,上行的121343域名刚才已经配置好了,接下来为下行配置888005的域名,先添加一条解析记录,名称设置为b,ip地址同样填入vps的ip,代理状态要启用,其他设置都一样,就不再重复说明了,设置好之后先复制一个节点出来进行测试,将地址改成刚才设置的域名b.888005.xyz,将sni删掉,测试真链接,有延迟说明已经生效了
接下来实现a.121343.xyz上行,b.888005.xyz下行,需要用到这段下行配置,代码我会放在视频下方的说明栏,在这里填入优选后的ip,如果不需要优选的话就直接填入域名,端口和节点保持一样是443,servername就是下行要用到的域名,把xhttp中的path路径改成和节点一样的即可,这样就算是配置好了,将其全选复制,双击编辑上行域名为121343的节点,点击这里添加额外参数,将配置粘贴上去,意思是下行使用888005的域名,点击确定,注意节点修改后配置会跑到列表最下面,测试真链接,有延迟说明没有问题,这样我们就实现了在套用cdn的情况下实现上下行分离,你可以用wireshark抓个包看看分离效果
最后演示上行使用cdn,下行使用reality直连,这种配置场景适合下行直连速度比较快的vps,比如gia线路,套cdn的话太浪费了,但又害怕直连会导致ip被墙,就可以用这个方式,先把刚才添加的xhttp+reality节点删掉,跟着视频操作搭建一个vless+vision+reality节点,传输是普通的tcp不是xhttp,最后点击添加,这就是一个普通的reality节点,没有什么特别的,将其导入代理工具,可以正常链接,接着给这个reality节点设置回落,重新编辑该节点,3xui有个问题是开了reality之后就看不到fallback回落的设置项,所以先把安全改成无,就会出现回落设置项,添加一个回落,将目标设置为6666,也就是裸xhttp节点所使用的端口,接着将安全改回reality,fallback配置项又看不见了,但是我们刚才的设置已经生效了,只是界面上不显示,最后点击修改,添加回落之后这个reality节点就能当下行了,同样将a.121343.xyz当上行,将刚才的下行配置删掉,使用这段reality下行配置,这里填入vps的ip地址,以及reality使用的端口443,这里填入裸xhttp的path路径,这里改成你的reality节点配置,如果不会手动改的话,可以借助v2rayN,右键刚才添加的reality节点,将客户端的配置复制到剪贴板,粘贴到文本编辑器,往上找到reality的配置,复制大括号这整段,将这里的替换掉,接着全选复制,粘贴到cdn节点的下行配置,最后点击确定,这样就实现了通过cdn进行tls上行,通过直连使用reality下行了,有延迟说明可以正常使用
现在的效果相当于,代理工具会和cdn建立上行连接,cdn会将数据转交给节点,和reality节点建立下行连接,从防火墙的角度来看我们在访问yahoo,也就是我们在节点中设置的sni,当reality节点收到建立连接的请求时,发现自己看不懂这些数据,因为解开reality之后,里面是裸xhttp数据,而这个是vless+vision+reality节点,根本就无法处理xhttp数据,我们之前讲过,当vless不认识这个数据的时候,而我们又设置了回落,就会将其转交给回落中设置的端口6666,于是这个搭建在6666端口的裸xhttp节点将会收到该数据,而这个节点能看懂数据,因为本来就是发给他的,于是成功建立了连接,所以表面看我们是和reality建立下行,但实际上是和裸xhttp建立下行,上下行连接建立之后,浏览器访问谷歌的请求会通过上行连接来到cdn,cdn将其转交给节点,节点再帮我们访问谷歌,谷歌返回的数据来到节点,节点通过下行连接将数据返回给代理工具,从而实现上行cdn,下行直连reality访问谷歌