Skip to content

Commit 210282b

Browse files
authored
Merge pull request cmliu#922 from cmliu/beta2.0
Beta2.0
2 parents 436293e + 6294a1d commit 210282b

1 file changed

Lines changed: 18 additions & 17 deletions

File tree

_worker.js

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -787,13 +787,10 @@ async function httpConnect(targetHost, targetPort, initialData) {
787787
}
788788
//////////////////////////////////////////////////功能性函数///////////////////////////////////////////////
789789
function Clash订阅配置文件热补丁(Clash_原始订阅内容, uuid = null, ECH启用 = false, HOSTS = []) {
790-
if (!ECH启用 || HOSTS.length === 0) return Clash_原始订阅内容;
790+
let clash_yaml = Clash_原始订阅内容.replace(/mode:\s*Rule\b/g, 'mode: rule');
791791

792-
// 生成 HOSTS 的 nameserver-policy 条目
793-
const hostsEntries = HOSTS.map(host => ` "${host}":\n - tls://8.8.8.8\n - https://doh.cmliussss.com/CMLiussss\n - ${ECH_DOH}`).join('\n');
794-
795-
// 完整的 DNS 配置块(用于没有 dns: 字段时添加)
796-
const fullDnsBlock = `dns:
792+
// 基础 DNS 配置块(不含 nameserver-policy)
793+
const baseDnsBlock = `dns:
797794
enable: true
798795
default-nameserver:
799796
- 223.5.5.5
@@ -814,17 +811,22 @@ function Clash订阅配置文件热补丁(Clash_原始订阅内容, uuid = null,
814811
- 240.0.0.0/4
815812
- 0.0.0.0/32
816813
geoip-code: CN
817-
nameserver-policy:
818-
${hostsEntries}
819814
`;
820815

821-
let clash_yaml = Clash_原始订阅内容;
822-
823816
// 检查是否存在 dns: 字段(可能在任意行,行首无缩进)
824817
const hasDns = /^dns:\s*(?:\n|$)/m.test(clash_yaml);
825818

826-
if (hasDns) {
827-
// 存在 dns: 字段,检查是否存在 nameserver-policy:
819+
// 无论 ECH 是否启用,都确保存在 dns: 配置块
820+
if (!hasDns) {
821+
clash_yaml = baseDnsBlock + clash_yaml;
822+
}
823+
824+
// 如果 ECH 启用且 HOSTS 有效,添加 nameserver-policy
825+
if (ECH启用 && HOSTS.length > 0) {
826+
// 生成 HOSTS 的 nameserver-policy 条目
827+
const hostsEntries = HOSTS.map(host => ` "${host}":\n - tls://8.8.8.8\n - https://doh.cmliussss.com/CMLiussss\n - ${ECH_DOH}`).join('\n');
828+
829+
// 检查是否存在 nameserver-policy:
828830
const hasNameserverPolicy = /^\s{2}nameserver-policy:\s*(?:\n|$)/m.test(clash_yaml);
829831

830832
if (hasNameserverPolicy) {
@@ -835,7 +837,6 @@ ${hostsEntries}
835837
);
836838
} else {
837839
// 不存在 nameserver-policy:,需要在 dns: 块内添加整个 nameserver-policy
838-
// 找到 dns: 块的结束位置(下一个顶级字段之前)
839840
const lines = clash_yaml.split('\n');
840841
let dnsBlockEndIndex = -1;
841842
let inDnsBlock = false;
@@ -865,12 +866,12 @@ ${hostsEntries}
865866
}
866867
clash_yaml = lines.join('\n');
867868
}
868-
} else {
869-
// 不存在 dns: 字段,在文件开头添加完整的 DNS 配置块
870-
clash_yaml = fullDnsBlock + clash_yaml;
871869
}
872870

873-
if (!uuid) return clash_yaml;
871+
// 如果没有 uuid 或 ECH 未启用,直接返回
872+
if (!uuid || !ECH启用) return clash_yaml;
873+
874+
// ECH 启用时,处理代理节点添加 ech-opts
874875
const lines = clash_yaml.split('\n');
875876
const processedLines = [];
876877
let i = 0;

0 commit comments

Comments
 (0)