diff --git a/backend/package.json b/backend/package.json index e712bc0..e759acc 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,6 +1,6 @@ { "name": "sub-store", - "version": "2.14.397", + "version": "2.14.398", "description": "Advanced Subscription Manager for QX, Loon, Surge, Stash and ShadowRocket.", "main": "src/main.js", "scripts": { diff --git a/backend/src/core/proxy-utils/index.js b/backend/src/core/proxy-utils/index.js index 97405c5..fe9f520 100644 --- a/backend/src/core/proxy-utils/index.js +++ b/backend/src/core/proxy-utils/index.js @@ -408,20 +408,7 @@ function lastParse(proxy) { proxy['h2-opts'].path = path[0]; } } - if (proxy.tls && !proxy.sni) { - if (proxy.network) { - let transportHost = proxy[`${proxy.network}-opts`]?.headers?.Host; - transportHost = Array.isArray(transportHost) - ? transportHost[0] - : transportHost; - if (transportHost) { - proxy.sni = transportHost; - } - } - if (!proxy.sni && !isIP(proxy.server)) { - proxy.sni = proxy.server; - } - } + // 非 tls, 有 ws/http 传输层, 使用域名的节点, 将设置传输层 Host 防止之后域名解析后丢失域名(不覆盖现有的 Host) if ( !proxy.tls && @@ -448,6 +435,20 @@ function lastParse(proxy) { proxy[`${proxy.network}-opts`].path = [transportPath]; } } + if (proxy.tls && !proxy.sni) { + if (!isIP(proxy.server)) { + proxy.sni = proxy.server; + } + if (!proxy.sni && proxy.network) { + let transportHost = proxy[`${proxy.network}-opts`]?.headers?.Host; + transportHost = Array.isArray(transportHost) + ? transportHost[0] + : transportHost; + if (transportHost) { + proxy.sni = transportHost; + } + } + } // if (['hysteria', 'hysteria2', 'tuic'].includes(proxy.type)) { if (proxy.ports) { proxy.ports = String(proxy.ports).replace(/\//g, ','); diff --git a/backend/src/core/proxy-utils/parsers/index.js b/backend/src/core/proxy-utils/parsers/index.js index 45b2390..740bdb8 100644 --- a/backend/src/core/proxy-utils/parsers/index.js +++ b/backend/src/core/proxy-utils/parsers/index.js @@ -391,12 +391,6 @@ function URI_VMess() { } else { delete proxy.network; } - - // https://github.com/MetaCubeX/Clash.Meta/blob/Alpha/docs/config.yaml#L413 - // sni 优先级应高于 host - if (proxy.tls && !proxy.sni && transportHost) { - proxy.sni = transportHost; - } } return proxy; } @@ -539,15 +533,6 @@ function URI_VLESS() { } } - if (proxy.tls && !proxy.sni) { - if (proxy.network === 'ws') { - proxy.sni = proxy['ws-opts']?.headers?.Host; - } else if (proxy.network === 'http') { - let httpHost = proxy['http-opts']?.headers?.Host; - proxy.sni = Array.isArray(httpHost) ? httpHost[0] : httpHost; - } - } - return proxy; }; return { name, test, parse }; @@ -894,22 +879,6 @@ function Clash_All() { ); } - // handle vmess sni - if (['vmess', 'vless'].includes(proxy.type)) { - proxy.sni = proxy.servername; - delete proxy.servername; - if (proxy.tls && !proxy.sni) { - if (proxy.network === 'ws') { - proxy.sni = proxy['ws-opts']?.headers?.Host; - } else if (proxy.network === 'http') { - let httpHost = proxy['http-opts']?.headers?.Host; - proxy.sni = Array.isArray(httpHost) - ? httpHost[0] - : httpHost; - } - } - } - if (proxy['server-cert-fingerprint']) { proxy['tls-fingerprint'] = proxy['server-cert-fingerprint']; }