v2ray/Xray高级应用 tls伪装

v2ray/Xray高级应用 tls伪装

之前已经讲过如何搭建一个最普通的代理,仅仅只有加密和混淆,没有伪装,现在就来讲讲伪装,加入tls后的tcp类型的协议将会变得和https类似,也就是伪装成https,伪装的方式有很多,比如vless/trojan的回落到web服务器(ProxySU的做法)、web服务器反代给v2ray如果报错返回正常的web响应,这是针对主动探测的伪装,另外防止被动探测,也就是抓包分析,可以用web服务器能反代的传输协议(ws/h2/grpc),然而伪装做得再好,在流量已经伪装完成的情况下,gfw的封锁方式目前看起来还是认流量连接时间之类,而且一般只会封单端口一段时间,被封端口之后切记不要随便换端口,尽量套cdn,有条件的话换个域名套。

我这里给出的配置是由caddy作为前置服务器,反代给v2ray,端口只开80、443就行,像一个正常的web服务器,3389和22端口在我部署完后我也禁掉了,不怕爆破,省心,服务器商应该都有vnc,要用22/3389的时候可以用vnc操作再次把端口打开,我本来是用nginx,不过我不是很喜欢,windows想装个模组编译环境装半天,caddy有很多好处,go语言的跨平台特性,性能很不错,自动ssl申请,不用另外安装acme来申请证书,而且只有一个二进制文件,只需要到下载页面选好操作系统、架构、插件,点Download,文件重命名为caddy.exe(linux是caddy),丢到C:\Windows\System32(linux是/usr/bin/),这样caddy就算是安装好了,常用插件都不用自己编译,由于没有其他的依赖文件,完全没有必要放到某个目录然后加系统变量的path。

然后是caddy配置文件,随便找个地方新建一个文本文件然后重命名为Caddyfile(没有后缀名),这就是配置文件,用什么文本编辑器都行,推荐notepad++,可以多行tab,强迫症就是要配置文件排得整整齐齐,当然记事本也可以,修改Caddyfile

Nginx{

servers :443 {

strict_sni_host insecure_off #允许sni和host不相同,我个人喜好,可以和上下一行一起删掉

}

key_type p384 #指定自动申请的ssl证书加密算法,建议用p384

}

xxx.xxx.com {

tls {

protocols tls1.2 tls1.2 #这段的意思是最低tls1.2,最高tls1.2

ciphers TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256

#ciphers TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 #RSA证书

dns cloudflare xxxxxxxx区域TOKENxxxxxxxxxxxxxx #需要插件,在caddy下载的时候可以加入,包括腾讯云阿里云的dns解析都有,如果希望用http验证,那就把dns解析到服务器上,然后这行全部删掉

}

header {

Strict-Transport-Security max-age=31536000; #HSTS,这也是我个人喜好,可以和上下一行一起删掉

}

@grpc {

protocol grpc

path /grpc/Tun #需要修改

}

handle @grpc {

reverse_proxy h2c://localhost:1111

}

@ws {

path /ws #需要修改

header Connection Upgrade

header Upgrade websocket

}

handle @ws {

reverse_proxy localhost:1112

}

handle {

basicauth * {

111 $2a$14$lnALnzd3QccaLAJiL9ZljOSCYRsyINDn5PGWK2mJtRSV6IEwd4DGS #http基本身份认证,这个是账号密码都是111的账户

}

}

handle_errors {

basicauth * {

111 $2a$14$lnALnzd3QccaLAJiL9ZljOSCYRsyINDn5PGWK2mJtRSV6IEwd4DGS

}

}

#root * C:\Users\Administrator\caddy\xxx #windows设置主目录,和nginx不同caddy的\不用转义

#root * /etc/caddy/xxx #linux设置主目录

#root xxx #windows目录和Caddyfile文件处于同一目录的文件夹

#file_server #提供文件

}

我的主动探测伪装就是http基本身份验证,我没有用网页,嫌麻烦,网页伪装只要把这个删掉然后把下面某一行root和file_server最左边的#注释删掉就好了。

我这里只用了ws和grpc,这两个协议可以被cloudflare转发,如果用cloudflare我推荐grpc,直连也可以用h2,和grpc配置基本一样,实在没办法才用ws,ws的性能不是很好,直连的话用被墙可以直接切换到cdn,大部分cdn不支持grpc,cloudflare支持h2回源但是我之前测试的时候h2协议不能套,也不知道是哪个地方出问题了,我记得是v2ray能看到日志但就是没有返回信息。

111后面那个是经过哈希处理的,不能用没经过哈希处理的直接放配置文件里,caddy自带哈希处理功能,在cmd里执行命令(linux一样是这个)caddy hash-password --plaintext 111

我用111就是为了表明这是一个弱密码,需要自己修改,而且完全不需要去记住,生成个几十位的密码然后当场忘记最好了。

配置好后在Caddyfile同目录下用cmd运行caddy run,这是前台运行,关掉cmd就是关掉caddy,需要重新运行,或者caddy start后台运行,需要的关掉的时候就运行caddy stop,windows可以用nssm做成服务,用nssm需要注意启动程序是cmd(C:\Windows\System32\cmd.exe),起始路径是Caddyfile的目录,运行参数是/c caddy run,另外要在服务中把登录身份改成普通账户,不要用system,不然自动签的证书会不知道保存到哪里去,而且有可能不会续签。linux用systemd,caddy官方的安装脚本已经做好服务了。

接下来是v2ray的配置文件config.json,和v2ray在同一目录(linux在/usr/local/etc/v2ray/config.json),我只放服务器的配置文件,客户端的话用v2rayN图形界面操作出来。

JSON//grpc

{

"log": {

"access": "",

"error": "",

"loglevel": "warning"

},

"inbounds": [

{

"tag": "grpc",

"port": 1111,

"listen": "127.0.0.1", //防止被主动探测

"protocol": "vmess",

"settings": {

"udp": false,

"clients": [

{

"id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", //需要修改

"alterId": 0,

"email": "t@t.tt"

}

],

"allowTransparent": false

},

"streamSettings": {

"network": "grpc",

"grpcSettings": {

"serviceName": "grpc", //需要修改,和Caddyfile同步

"multiMode": false

}

}

},

{

"tag": "ws",

"port": 1112,

"listen": "127.0.0.1", //防止被主动探测

"protocol": "vmess",

"settings": {

"udp": false,

"clients": [

{

"id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", //需要修改

"alterId": 0,

"email": "t@t.tt"

}

],

"allowTransparent": false

},

"streamSettings": {

"network": "ws",

"wsSettings": {

"path": "/ws" //需要修改,和Caddyfile同步

}

}

}

],

],

"outbounds": [

{

"protocol": "freedom"

},

{

"tag": "block",

"protocol": "blackhole",

"settings": {}

}

],

"routing": {

"domainStrategy": "IPIfNonMatch",

"rules": []

}

}

自行根据注释修改,path是防止主动探测的关键,一定要修改成随机字符串,比如说100位随机字母数字特殊符号,加中文都可以,有特殊字符和中文的话最好先去URL Encode and Decode转换一下,由于path在tls中是加密的,要是照抄我这个那就意味着密码公开了,虽然path探测对了也没用,caddy对于v2ray给出错误回应一样能返回正常的验证,表面上看不出区别,这两个配置选一个就行,caddy也可以删掉一条。

配置完直接打开v2ray.exe(linux执行systemctl restart v2ray)

客户端配置

解释一下为什么这么配置

首先是grpc的host那为什么要写,这个地方完全没有任何用处,因为这个在分享链接经过subconverter转换成clash配置文件的时候会有问题,所以干脆就写了,反正也没坏处,可以不写。

然后地址为什么要用ip,手动指定sni和host,而不是直接用域名,这样做有很多好处,首先是dns可以根本不用做解析,这个是测试的时候很常见的做法,改host测试,通过这个不能判断在用v2ray,而且我用http基本身份验证做伪装谁知道我网站是做什么的,用得是dns申请ssl,也不需要dns解析,然后连接服务器是直接连接,如果写域名的话那就先要把域名解析出来再连接,多了一步操作,然后最重要的一点就是我的dns解析在cloudflare一直都是开着cdn的,所以在不能直连服务器的时候地址改成域名可以立刻切换到cdn中转,不用顶着高延迟到cloudflare仪表盘开橙云。

用了tls为什么vmess还要用auto加密,主要是为了防shor的,反正加密带来的性能损失其实很少,平时也就浏览网站最多看个视频,使用体验没有很明显的改变,不用对称加密用vless/trojan就好了。

另外我这些配置的目的实际上是“你知道我在翻墙但你不知道我具体在干什么”,vmess的强混淆足以消除大多数可能被识别出正在访问什么的特征。

分享到:

点击以分享到 X(在新窗口中打开)

X

点击以分享到 X(在新窗口中打开)

X

点击分享到 Facebook (在新窗口中打开)

Facebook

点击分享到Telegram(在新窗口中打开)

Telegram

点击分享到WhatsApp(在新窗口中打开)

WhatsApp

点击通过电子邮件将链接发送给朋友(在新窗口中打开)

电子邮件

赞过:赞 正在加载……

相关

相关推荐

深入探讨异步 API 的设计与实现
英雄萨姆2中文典藏版
钢铁侠(系列)
八字无礼之刑,恃势之刑,无恩之刑含义