Skip to content

Commit 45f6606

Browse files
committed
feat: 给节点添加 shadow-tls 不再支持 shadow-tls-password/shadow-tls-sni/shadow-tls-version . 请使用 plugin: 'shadow-tls'plugin-opts: { password, host, version }
1 parent 977806b commit 45f6606

12 files changed

Lines changed: 149 additions & 370 deletions

File tree

backend/src/core/proxy-utils/index.js

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1027,20 +1027,6 @@ function lastParse(proxy) {
10271027
if (!proxy['tls-fingerprint'] && caStr) {
10281028
proxy['tls-fingerprint'] = rs.generateFingerprint(caStr);
10291029
}
1030-
if (
1031-
['ss'].includes(proxy.type) &&
1032-
isPresent(proxy, 'shadow-tls-password')
1033-
) {
1034-
proxy.plugin = 'shadow-tls';
1035-
proxy['plugin-opts'] = {
1036-
host: proxy['shadow-tls-sni'],
1037-
password: proxy['shadow-tls-password'],
1038-
version: proxy['shadow-tls-version'],
1039-
};
1040-
delete proxy['shadow-tls-sni'];
1041-
delete proxy['shadow-tls-password'];
1042-
delete proxy['shadow-tls-version'];
1043-
}
10441030
if (['tuic'].includes(proxy.type)) {
10451031
proxy.alpn = Array.isArray(proxy.alpn)
10461032
? proxy.alpn

backend/src/core/proxy-utils/parsers/peggy/loon.js

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ const grammars = String.raw`
1919
const proxy = {};
2020
const obfs = {};
2121
const transport = {};
22+
const shadowTLS = {};
2223
const $ = {};
2324
2425
function handleTransport() {
@@ -34,6 +35,17 @@ const grammars = String.raw`
3435
}
3536
}
3637
38+
function handleShadowTLS() {
39+
if (shadowTLS.password) {
40+
proxy.plugin = "shadow-tls";
41+
proxy["plugin-opts"] = {
42+
host: shadowTLS.host,
43+
password: shadowTLS.password,
44+
version: shadowTLS.version,
45+
};
46+
}
47+
}
48+
3749
function normalizeVmessSecurity(security) {
3850
const normalized = String(security || "").trim().toLowerCase();
3951
const supported = ["none", "auto", "aes-128-gcm", "chacha20-ietf-poly1305"];
@@ -60,6 +72,7 @@ shadowsocksr = tag equals "shadowsocksr"i address method password (ssr_protocol/
6072
proxy.type = "ssr";
6173
// handle ssr obfs
6274
proxy.obfs = obfs.type;
75+
handleShadowTLS();
6376
}
6477
shadowsocks = tag equals "shadowsocks"i address method password (obfs_typev obfs_hostv)? (obfs_ss/obfs_host/obfs_uri/fast_open/udp_relay/udp_port/shadow_tls_version/shadow_tls_sni/shadow_tls_password/ip_mode/block_quic/udp_over_tcp/others)* {
6578
proxy.type = "ss";
@@ -70,6 +83,7 @@ shadowsocks = tag equals "shadowsocks"i address method password (obfs_typev obfs
7083
$set(proxy, "plugin-opts.host", obfs.host);
7184
$set(proxy, "plugin-opts.path", obfs.path);
7285
}
86+
handleShadowTLS();
7387
}
7488
vmess = tag equals "vmess"i address vmess_method uuid (transport/transport_host/transport_path/over_tls/tls_name/sni/tls_verification/tls_cert_sha256/tls_pubkey_sha256/tls_profile/alpn/vmess_alterId/fast_open/udp_relay/ip_mode/public_key/short_id/block_quic/others)* {
7589
proxy.type = "vmess";
@@ -194,9 +208,9 @@ ssr_protocol_param = comma "protocol-param" equals param:$[^=,]+ { proxy["protoc
194208
vmess_alterId = comma "alterId" equals alterId:$[0-9]+ { proxy.alterId = parseInt(alterId); }
195209
196210
udp_port = comma "udp-port" equals match:$[0-9]+ { proxy["udp-port"] = parseInt(match.trim()); }
197-
shadow_tls_version = comma "shadow-tls-version" equals match:$[0-9]+ { proxy["shadow-tls-version"] = parseInt(match.trim()); }
198-
shadow_tls_sni = comma "shadow-tls-sni" equals match:[^,]+ { proxy["shadow-tls-sni"] = match.join(""); }
199-
shadow_tls_password = comma "shadow-tls-password" equals match:[^,]+ { proxy["shadow-tls-password"] = match.join("").replace(/^"(.*?)"$/, '$1').replace(/^'(.*?)'$/, '$1'); }
211+
shadow_tls_version = comma "shadow-tls-version" equals match:$[0-9]+ { shadowTLS.version = parseInt(match.trim()); }
212+
shadow_tls_sni = comma "shadow-tls-sni" equals match:[^,]+ { shadowTLS.host = match.join(""); }
213+
shadow_tls_password = comma "shadow-tls-password" equals match:[^,]+ { shadowTLS.password = match.join("").replace(/^"(.*?)"$/, '$1').replace(/^'(.*?)'$/, '$1'); }
200214
201215
over_tls = comma "over-tls" equals flag:bool { proxy.tls = flag; }
202216
tls_name = comma sni:("tls-name") equals match:[^,]+ { proxy.sni = match.join("").replace(/^"(.*)"$/, '$1'); }

backend/src/core/proxy-utils/parsers/peggy/surge.js

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ const grammars = String.raw`
1818
{
1919
const proxy = {};
2020
const obfs = {};
21+
const shadowTLS = {};
2122
const $ = {};
2223
2324
function handleWebsocket() {
@@ -31,8 +32,16 @@ const grammars = String.raw`
3132
}
3233
}
3334
function handleShadowTLS() {
34-
if (proxy['shadow-tls-password'] && !proxy['shadow-tls-version']) {
35-
proxy['shadow-tls-version'] = 2;
35+
if (shadowTLS.password && !shadowTLS.version) {
36+
shadowTLS.version = 2;
37+
}
38+
if (shadowTLS.password) {
39+
proxy.plugin = "shadow-tls";
40+
proxy["plugin-opts"] = {
41+
host: shadowTLS.host,
42+
password: shadowTLS.password,
43+
version: shadowTLS.version,
44+
};
3645
}
3746
}
3847
function stripQuotes(value) {
@@ -594,9 +603,9 @@ private_key = comma "private-key" equals match:[^,]+ { proxy["keystore-private-k
594603
server_fingerprint = comma "server-fingerprint" equals match:[^,]+ { proxy["server-fingerprint"] = match.join("").replace(/^"(.*)"$/, '$1'); }
595604
block_quic = comma "block-quic" equals match:[^,]+ { proxy["block-quic"] = match.join(""); }
596605
udp_port = comma "udp-port" equals match:$[0-9]+ { proxy["udp-port"] = parseInt(match.trim()); }
597-
shadow_tls_version = comma "shadow-tls-version" equals match:$[0-9]+ { proxy["shadow-tls-version"] = parseInt(match.trim()); }
598-
shadow_tls_sni = comma "shadow-tls-sni" equals match:[^,]+ { proxy["shadow-tls-sni"] = match.join(""); }
599-
shadow_tls_password = comma "shadow-tls-password" equals match:[^,]+ { proxy["shadow-tls-password"] = match.join("").replace(/^"(.*?)"$/, '$1').replace(/^'(.*?)'$/, '$1'); }
606+
shadow_tls_version = comma "shadow-tls-version" equals match:$[0-9]+ { shadowTLS.version = parseInt(match.trim()); }
607+
shadow_tls_sni = comma "shadow-tls-sni" equals match:[^,]+ { shadowTLS.host = match.join(""); }
608+
shadow_tls_password = comma "shadow-tls-password" equals match:[^,]+ { shadowTLS.password = match.join("").replace(/^"(.*?)"$/, '$1').replace(/^'(.*?)'$/, '$1'); }
600609
token = comma "token" equals match:[^,]+ { proxy.token = match.join(""); }
601610
alpn = comma "alpn" equals match:quoted_value {
602611
const values = parseAlpn(match);

backend/src/core/proxy-utils/producers/clashmeta.js

Lines changed: 4 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -247,21 +247,6 @@ export default function ClashMeta_Producer() {
247247
ds['reality-opts'] = { 'public-key': '' };
248248
}
249249
}
250-
} else if (proxy.type === 'ss') {
251-
if (
252-
isPresent(proxy, 'shadow-tls-password') &&
253-
!isPresent(proxy, 'plugin')
254-
) {
255-
proxy.plugin = 'shadow-tls';
256-
proxy['plugin-opts'] = {
257-
host: proxy['shadow-tls-sni'],
258-
password: proxy['shadow-tls-password'],
259-
version: proxy['shadow-tls-version'],
260-
};
261-
delete proxy['shadow-tls-password'];
262-
delete proxy['shadow-tls-sni'];
263-
delete proxy['shadow-tls-version'];
264-
}
265250
}
266251

267252
if (isPresent(proxy, 'plugin-opts.mux')) {
@@ -428,22 +413,11 @@ function isSupportedMihomoVersion(version, supportedVersions) {
428413
}
429414

430415
function hasMihomoShadowTls(proxy) {
431-
return (
432-
proxy?.plugin === 'shadow-tls' ||
433-
isPresent(proxy, 'shadow-tls-password') ||
434-
isPresent(proxy, 'shadow-tls-sni') ||
435-
isPresent(proxy, 'shadow-tls-version')
436-
);
416+
return proxy?.plugin === 'shadow-tls';
437417
}
438418

439419
function getMihomoShadowTlsVersion(proxy) {
440-
if (isPresent(proxy, 'shadow-tls-version')) {
441-
return proxy['shadow-tls-version'];
442-
}
443-
444-
if (proxy?.plugin === 'shadow-tls') {
445-
return proxy?.['plugin-opts']?.version;
446-
}
447-
448-
return undefined;
420+
return proxy?.plugin === 'shadow-tls'
421+
? proxy?.['plugin-opts']?.version
422+
: undefined;
449423
}

backend/src/core/proxy-utils/producers/egern.js

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -554,16 +554,7 @@ export default function Egern_Producer() {
554554
'ssh',
555555
].includes(original.type)
556556
) {
557-
if (isPresent(original, 'shadow-tls-password')) {
558-
if (original['shadow-tls-version'] != 3)
559-
throw new Error(
560-
`shadow-tls version ${original['shadow-tls-version']} is not supported`,
561-
);
562-
proxy.shadow_tls = {
563-
password: original['shadow-tls-password'],
564-
sni: original['shadow-tls-sni'],
565-
};
566-
} else if (
557+
if (
567558
['shadow-tls'].includes(original.plugin) &&
568559
original['plugin-opts']
569560
) {
@@ -693,12 +684,7 @@ function getUdpRelay(proxy) {
693684
}
694685

695686
function hasShadowTls(proxy) {
696-
return (
697-
proxy.plugin === 'shadow-tls' ||
698-
isPresent(proxy, 'shadow-tls-password') ||
699-
isPresent(proxy, 'shadow-tls-sni') ||
700-
isPresent(proxy, 'shadow-tls-version')
701-
);
687+
return proxy.plugin === 'shadow-tls';
702688
}
703689

704690
function getNonEmptyValue(value) {

backend/src/core/proxy-utils/producers/loon.js

Lines changed: 21 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,25 @@ function appendAlpn(result, proxy) {
6969
if (alpn) result.append(`,alpn="${alpn}"`);
7070
}
7171

72+
function appendShadowTLS(result, proxy) {
73+
if (proxy.plugin !== 'shadow-tls' || !proxy['plugin-opts']) return;
74+
75+
const password = proxy['plugin-opts'].password;
76+
const host = proxy['plugin-opts'].host;
77+
const version = proxy['plugin-opts'].version;
78+
if (!password) return;
79+
80+
result.append(`,shadow-tls-password=${password}`);
81+
if (host) result.append(`,shadow-tls-sni=${host}`);
82+
if (version) {
83+
if (version < 2) {
84+
throw new Error(`shadow-tls version ${version} is not supported`);
85+
}
86+
result.append(`,shadow-tls-version=${version}`);
87+
}
88+
result.appendIfPresent(`,udp-port=${proxy['udp-port']}`, 'udp-port');
89+
}
90+
7291
function appendReality(result, proxy) {
7392
result.appendIfPresent(`,sni=${proxy.sni}`, 'sni');
7493
result.appendIfPresent(
@@ -156,44 +175,7 @@ function shadowsocks(proxy) {
156175
}
157176
}
158177

159-
// shadow-tls
160-
if (isPresent(proxy, 'shadow-tls-password')) {
161-
result.append(`,shadow-tls-password=${proxy['shadow-tls-password']}`);
162-
163-
result.appendIfPresent(
164-
`,shadow-tls-version=${proxy['shadow-tls-version']}`,
165-
'shadow-tls-version',
166-
);
167-
result.appendIfPresent(
168-
`,shadow-tls-sni=${proxy['shadow-tls-sni']}`,
169-
'shadow-tls-sni',
170-
);
171-
// udp-port
172-
result.appendIfPresent(`,udp-port=${proxy['udp-port']}`, 'udp-port');
173-
} else if (['shadow-tls'].includes(proxy.plugin) && proxy['plugin-opts']) {
174-
const password = proxy['plugin-opts'].password;
175-
const host = proxy['plugin-opts'].host;
176-
const version = proxy['plugin-opts'].version;
177-
if (password) {
178-
result.append(`,shadow-tls-password=${password}`);
179-
if (host) {
180-
result.append(`,shadow-tls-sni=${host}`);
181-
}
182-
if (version) {
183-
if (version < 2) {
184-
throw new Error(
185-
`shadow-tls version ${version} is not supported`,
186-
);
187-
}
188-
result.append(`,shadow-tls-version=${version}`);
189-
}
190-
// udp-port
191-
result.appendIfPresent(
192-
`,udp-port=${proxy['udp-port']}`,
193-
'udp-port',
194-
);
195-
}
196-
}
178+
appendShadowTLS(result, proxy);
197179

198180
// udp over tcp
199181
if (proxy['udp-over-tcp']) {
@@ -250,44 +232,7 @@ function shadowsocksr(proxy) {
250232
result.appendIfPresent(`,obfs=${proxy.obfs}`, 'obfs');
251233
result.appendIfPresent(`,obfs-param=${proxy['obfs-param']}`, 'obfs-param');
252234

253-
// shadow-tls
254-
if (isPresent(proxy, 'shadow-tls-password')) {
255-
result.append(`,shadow-tls-password=${proxy['shadow-tls-password']}`);
256-
257-
result.appendIfPresent(
258-
`,shadow-tls-version=${proxy['shadow-tls-version']}`,
259-
'shadow-tls-version',
260-
);
261-
result.appendIfPresent(
262-
`,shadow-tls-sni=${proxy['shadow-tls-sni']}`,
263-
'shadow-tls-sni',
264-
);
265-
// udp-port
266-
result.appendIfPresent(`,udp-port=${proxy['udp-port']}`, 'udp-port');
267-
} else if (['shadow-tls'].includes(proxy.plugin) && proxy['plugin-opts']) {
268-
const password = proxy['plugin-opts'].password;
269-
const host = proxy['plugin-opts'].host;
270-
const version = proxy['plugin-opts'].version;
271-
if (password) {
272-
result.append(`,shadow-tls-password=${password}`);
273-
if (host) {
274-
result.append(`,shadow-tls-sni=${host}`);
275-
}
276-
if (version) {
277-
if (version < 2) {
278-
throw new Error(
279-
`shadow-tls version ${version} is not supported`,
280-
);
281-
}
282-
result.append(`,shadow-tls-version=${version}`);
283-
}
284-
// udp-port
285-
result.appendIfPresent(
286-
`,udp-port=${proxy['udp-port']}`,
287-
'udp-port',
288-
);
289-
}
290-
}
235+
appendShadowTLS(result, proxy);
291236

292237
// tfo
293238
result.appendIfPresent(`,fast-open=${proxy.tfo}`, 'tfo');

backend/src/core/proxy-utils/producers/shadowrocket.js

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -142,20 +142,6 @@ export default function Shadowrocket_Producer() {
142142
delete proxy.sni;
143143
}
144144
} else if (proxy.type === 'ss') {
145-
if (
146-
isPresent(proxy, 'shadow-tls-password') &&
147-
!isPresent(proxy, 'plugin')
148-
) {
149-
proxy.plugin = 'shadow-tls';
150-
proxy['plugin-opts'] = {
151-
host: proxy['shadow-tls-sni'],
152-
password: proxy['shadow-tls-password'],
153-
version: proxy['shadow-tls-version'],
154-
};
155-
delete proxy['shadow-tls-password'];
156-
delete proxy['shadow-tls-sni'];
157-
delete proxy['shadow-tls-version'];
158-
}
159145
if (isShadowsocksOverTls(proxy)) {
160146
if (isPresent(proxy, 'sni')) {
161147
proxy.servername = proxy.sni;

backend/src/core/proxy-utils/producers/sing-box.js

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -529,17 +529,6 @@ const getShadowTLSPluginOpts = (proxy = {}) => {
529529
if (proxy.plugin === 'shadow-tls' && proxy['plugin-opts']) {
530530
return proxy['plugin-opts'];
531531
}
532-
if (
533-
proxy['shadow-tls-password'] != null ||
534-
proxy['shadow-tls-sni'] != null ||
535-
proxy['shadow-tls-version'] != null
536-
) {
537-
return {
538-
host: proxy['shadow-tls-sni'],
539-
password: proxy['shadow-tls-password'],
540-
version: proxy['shadow-tls-version'],
541-
};
542-
}
543532
return undefined;
544533
};
545534

0 commit comments

Comments
 (0)