请教两个问题

1.xPaddingQueryParam这个设置,按照我的理解,就是两端添加上就完事了
“streamSettings”: {
xxxxxxxxxxxxxxxx
“extra”: {“xPaddingQueryParam”: “gs_lcrp”}
},

可nginx记录显示并没有生效,还是x_padding

QQ20260710-194358

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

QQ20260712-060617

服务端sudo xray run -test -config检查没错误,客户端输出remote error: tls: unrecognized name

(这里先前编写的教程中,对于XHTTP传输方式的填充相关选项已经过时了。目前可以参考此讨论中的配置文件呀。

对于第2个问题,或许是rejectUnknownSni逻辑 仅匹配外部SNI与证书域名导致的。


折腾多日依旧失败,能不能出个ECH详细教程,这个功能的内容太少了,大家一窝蜂的用一键脚本。

(好吧,请参考先前的教程。另外,若使用的传输方式为XHTTP传输方式,服务器是否确保xhttpSettingshost字段为空,或者与客户端的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"
    }
  ],

客户端如图

(客户端的SNI与服务器中TLS证书的域名是相同的嘛?另外,若不指定serverNamerejectUnknownSNI呢?)

嗯…我设置为连接443端口,nginx转发给xray,这样可以尽量模拟正常网页和tls流量。

当改为直连xray监听的9056端口后就正常了,Wireshark抓包证明ech生效。

这说明是nginx在干扰或者转发不正常,

我找ai写了个许多个配置,一律输出为tls: server rejected ECH

改成caddy,又变为remote error: tls: internal error

您知道该怎么设置header吗?

或者…直连莽起来?

(若使用Nginx,则TLS便不由Xray-core处理,转发至Xray-core的流量是明文的(因为TLS层已经被Nginx解密)。在此情况下,关闭Xray-core的TLS便可。)

ech功能是放在"tlsSettings": {}下面的对吧?关了还怎么用ech?

(于Nginx配置ECH呀。1.29.4版本以上设置ssl_ech_file便可)

看官方文档会觉得哎呀真简单,等实战后就知道有多坑了,

首先要编译nginx和openssl,否则不支持这个功能,然后要添加https dns记录,然后要修改nginx配置添加监控,忙活大半天一看,嘿,日志显示ech:false,至于为什么没生效,不知道,也没更多信息可查。

caddy也是卧龙凤雏,官方文档写只需添加ech example.com 这一句话就行了,

等实战就会发现caddy就非要给这个域名申请个证书不可,编译并添加模块,换成真实域名,自动申请好证书,自动生成密钥对,自动添加记录,然后就没有然后了,反正就是不生效,去官方论坛问也说不出个所以然来。

1 Like

(客户端填写ECH配置 没有作用嘛?)

你是说nginx启用ech,xray客户端填写config list,让nginx把活干了吗?不太可能,nginx和xray生成的密钥对是相反的,格式也不一样。

(目前的情况 便是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)

我应该没搞错吧?可还是没生效

(没有见到日志的话,日志等级是否为info呢?)