1.xPaddingQueryParam这个设置,按照我的理解,就是两端添加上就完事了
“streamSettings”: {
xxxxxxxxxxxxxxxx
“extra”: {“xPaddingQueryParam”: “gs_lcrp”}
},
可nginx记录显示并没有生效,还是x_padding

2.ech功能,xray tls ech --serverName 随便一个域名,得到ECH server keys和ECH config list,两端分别添加

服务端sudo xray run -test -config检查没错误,客户端输出remote error: tls: unrecognized name
qsry
(青衫入雨)
2
(这里先前编写的教程中,对于XHTTP传输方式的填充相关选项已经过时了。目前可以参考此讨论中的配置文件呀。
对于第2个问题,或许是rejectUnknownSni逻辑 仅匹配外部SNI与证书域名导致的。
)
折腾多日依旧失败,能不能出个ECH详细教程,这个功能的内容太少了,大家一窝蜂的用一键脚本。
qsry
(青衫入雨)
5
(好吧,请参考先前的教程。另外,若使用的传输方式为XHTTP传输方式,服务器是否确保xhttpSettings的host字段为空,或者与客户端的host字段相同呢?)
嗯…我分别尝试了host为空和填写域名,并保持两边相同,还是输出remote error: tls: unrecognized name
服务端config.json中inbounds和outbounds如下
"inbounds": [
{
"tag": "vless_xhttp_tls",
"port": 9056,
"listen": "0.0.0.0",
"protocol": "vless",
"settings": {
"clients": [
{
"id": "d0712d5f-40bb-4748-############"
}
],
"decryption": "none"
},
"streamSettings": {
"network": "xhttp",
"xhttpSettings": {
"host": "",
"path": "/portal/v2/#####",
"mode": "packet-up",
"extra": {
"xPaddingObfsMode": true,
"xPaddingMethod": "tokenish",
"xPaddingPlacement": "queryInHeader",
"xPaddingHeader": "X-Cache",
"xPaddingKey": "vd_source"
}
},
"security": "tls",
"tlsSettings": {
"serverName": "我的域名",
"certificates": [
{
"certificateFile": "/etc/nginx/ssl/###.crt",
"keyFile": "/etc/nginx/ssl/###.key"
}
],
"echServerKeys": "ACBqdgPec6uu5DDMBrgjjTOxiAf7RXTxSxcwGE3aZ9pp5ABn/g0AYwAAIAAgbpaz4EUD2QT+F4NwH3Q6pu5VkePMSCyGhXSjemHHCwAAJAABAAEAAQACAAEAAwACAAEAAgACAAIAAwADAAEAAwACAAMAAwAUdHdpdGNoLmZhY2VwdW5jaC5jb20AAA==",
"maxVersion": "1.3",
"minVersion": "1.3",
"rejectUnknownSni": true
},
"sockopt": {
"tcpMptcp": true,
"tcpcongestion": "bbr"
}
}
}
],
"outbounds": [
{
"tag": "freedom",
"protocol": "freedom"
},
{
"tag": "blackhole",
"protocol": "blackhole"
}
],
客户端如图
qsry
(青衫入雨)
7
(客户端的SNI与服务器中TLS证书的域名是相同的嘛?另外,若不指定serverName与rejectUnknownSNI呢?)
嗯…我设置为连接443端口,nginx转发给xray,这样可以尽量模拟正常网页和tls流量。
当改为直连xray监听的9056端口后就正常了,Wireshark抓包证明ech生效。
这说明是nginx在干扰或者转发不正常,
我找ai写了个许多个配置,一律输出为tls: server rejected ECH
改成caddy,又变为remote error: tls: internal error
您知道该怎么设置header吗?
或者…直连莽起来?
qsry
(青衫入雨)
9
(若使用Nginx,则TLS便不由Xray-core处理,转发至Xray-core的流量是明文的(因为TLS层已经被Nginx解密)。在此情况下,关闭Xray-core的TLS便可。)
ech功能是放在"tlsSettings": {}下面的对吧?关了还怎么用ech?
qsry
(青衫入雨)
11
(于Nginx配置ECH呀。1.29.4版本以上设置ssl_ech_file便可)
看官方文档会觉得哎呀真简单,等实战后就知道有多坑了,
首先要编译nginx和openssl,否则不支持这个功能,然后要添加https dns记录,然后要修改nginx配置添加监控,忙活大半天一看,嘿,日志显示ech:false,至于为什么没生效,不知道,也没更多信息可查。
caddy也是卧龙凤雏,官方文档写只需添加ech example.com 这一句话就行了,
等实战就会发现caddy就非要给这个域名申请个证书不可,编译并添加模块,换成真实域名,自动申请好证书,自动生成密钥对,自动添加记录,然后就没有然后了,反正就是不生效,去官方论坛问也说不出个所以然来。
1 Like
你是说nginx启用ech,xray客户端填写config list,让nginx把活干了吗?不太可能,nginx和xray生成的密钥对是相反的,格式也不一样。
qsry
(青衫入雨)
15
(目前的情况 便是Nginx处理TLS呀,所以ECH亦仅能由Nginx处理。除非去除Nginx,Xray-core直接处理TLS流量。)
成功了。
haproxy做大门服务员,负责解密tls和ech,共用443端口,如果是xhttp就送去xray那边,如果是web流量就送去nginx那边。
不得不说AI是真好用,进步真快,一年前还傻傻的算不清三分之二+四分之三等于多少。
另外,我在服务端设置了
"geodata": {
"cron": "0 2 * * *",
"outbound": "proxy",
"assets": [
{
"url": "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat",
"file": "geoip.dat"
},
{
"url": "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat",
"file": "geosite.dat"
}
]
}
这个没起作用,哪里有问题?
bash -c “$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)” @ install --beta
xray version
Xray 26.7.28 (Xray, Penetrates Everything.) 5ca6f4b (go1.26.5 linux/amd64)
我应该没搞错吧?可还是没生效