Skip to content

Commit 17b1271

Browse files
committed
fix: 修复 sing-box 和 mihomo 的 ip-version
1 parent c266635 commit 17b1271

3 files changed

Lines changed: 48 additions & 1 deletion

File tree

backend/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "sub-store",
3-
"version": "2.19.71",
3+
"version": "2.19.73",
44
"description": "Advanced Subscription Manager for QX, Loon, Surge, Stash and Shadowrocket.",
55
"main": "src/main.js",
66
"scripts": {

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
import { isPresent } from '@/core/proxy-utils/producers/utils';
22

3+
const ipVersions = {
4+
dual: 'dual',
5+
'v4-only': 'ipv4',
6+
'v6-only': 'ipv6',
7+
'prefer-v4': 'ipv4-prefer',
8+
'prefer-v6': 'ipv6-prefer',
9+
};
10+
311
export default function ClashMeta_Producer() {
412
const type = 'ALL';
513
const produce = (proxies, type, opts = {}) => {
@@ -242,6 +250,11 @@ export default function ClashMeta_Producer() {
242250
delete proxy[`${proxy.network}-opts`]['_grpc-type'];
243251
delete proxy[`${proxy.network}-opts`]['_grpc-authority'];
244252
}
253+
254+
if (proxy['ip-version']) {
255+
proxy['ip-version'] =
256+
ipVersions[proxy['ip-version']] || proxy['ip-version'];
257+
}
245258
return proxy;
246259
});
247260

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

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,26 @@ import ClashMeta_Producer from './clashmeta';
22
import $ from '@/core/app';
33
import { isIPv4, isIPv6 } from '@/utils';
44

5+
const ipVersions = {
6+
ipv4: 'ipv4_only',
7+
ipv6: 'ipv6_only',
8+
'v4-only': 'ipv4_only',
9+
'v6-only': 'ipv6_only',
10+
'ipv4-prefer': 'prefer_ipv4',
11+
'ipv6-prefer': 'prefer_ipv6',
12+
'prefer-v4': 'prefer_ipv4',
13+
'prefer-v6': 'prefer_ipv6',
14+
};
15+
16+
const ipVersionParser = (proxy, parsedProxy) => {
17+
const strategy = ipVersions[proxy['ip-version']];
18+
if (proxy._dns_server && strategy) {
19+
parsedProxy.domain_resolver = {
20+
server: proxy._dns_server,
21+
strategy,
22+
};
23+
}
24+
};
525
const detourParser = (proxy, parsedProxy) => {
626
parsedProxy.detour = proxy['dialer-proxy'] || proxy.detour;
727
};
@@ -278,6 +298,7 @@ const sshParser = (proxy = {}) => {
278298
if (proxy['fast-open']) parsedProxy.udp_fragment = true;
279299
tfoParser(proxy, parsedProxy);
280300
detourParser(proxy, parsedProxy);
301+
ipVersionParser(proxy, parsedProxy);
281302
return parsedProxy;
282303
};
283304

@@ -305,6 +326,7 @@ const httpParser = (proxy = {}) => {
305326
tfoParser(proxy, parsedProxy);
306327
detourParser(proxy, parsedProxy);
307328
tlsParser(proxy, parsedProxy);
329+
ipVersionParser(proxy, parsedProxy);
308330
return parsedProxy;
309331
};
310332

@@ -327,6 +349,7 @@ const socks5Parser = (proxy = {}) => {
327349
networkParser(proxy, parsedProxy);
328350
tfoParser(proxy, parsedProxy);
329351
detourParser(proxy, parsedProxy);
352+
ipVersionParser(proxy, parsedProxy);
330353
return parsedProxy;
331354
};
332355

@@ -371,6 +394,7 @@ const shadowTLSParser = (proxy = {}) => {
371394
tfoParser(proxy, stPart);
372395
detourParser(proxy, stPart);
373396
smuxParser(proxy.smux, ssPart);
397+
ipVersionParser(proxy, stPart);
374398
return { type: 'ss-with-st', ssPart, stPart };
375399
};
376400
const ssParser = (proxy = {}) => {
@@ -400,6 +424,7 @@ const ssParser = (proxy = {}) => {
400424
tfoParser(proxy, parsedProxy);
401425
detourParser(proxy, parsedProxy);
402426
smuxParser(proxy.smux, parsedProxy);
427+
ipVersionParser(proxy, parsedProxy);
403428
if (proxy.plugin) {
404429
const optArr = [];
405430
if (proxy.plugin === 'obfs') {
@@ -478,6 +503,7 @@ const ssrParser = (proxy = {}) => {
478503
tfoParser(proxy, parsedProxy);
479504
detourParser(proxy, parsedProxy);
480505
smuxParser(proxy.smux, parsedProxy);
506+
ipVersionParser(proxy, parsedProxy);
481507
return parsedProxy;
482508
};
483509

@@ -516,6 +542,7 @@ const vmessParser = (proxy = {}) => {
516542
detourParser(proxy, parsedProxy);
517543
tlsParser(proxy, parsedProxy);
518544
smuxParser(proxy.smux, parsedProxy);
545+
ipVersionParser(proxy, parsedProxy);
519546
return parsedProxy;
520547
};
521548

@@ -541,6 +568,7 @@ const vlessParser = (proxy = {}) => {
541568
detourParser(proxy, parsedProxy);
542569
smuxParser(proxy.smux, parsedProxy);
543570
tlsParser(proxy, parsedProxy);
571+
ipVersionParser(proxy, parsedProxy);
544572
return parsedProxy;
545573
};
546574
const trojanParser = (proxy = {}) => {
@@ -562,6 +590,7 @@ const trojanParser = (proxy = {}) => {
562590
detourParser(proxy, parsedProxy);
563591
tlsParser(proxy, parsedProxy);
564592
smuxParser(proxy.smux, parsedProxy);
593+
ipVersionParser(proxy, parsedProxy);
565594
return parsedProxy;
566595
};
567596
const hysteriaParser = (proxy = {}) => {
@@ -611,6 +640,7 @@ const hysteriaParser = (proxy = {}) => {
611640
detourParser(proxy, parsedProxy);
612641
tfoParser(proxy, parsedProxy);
613642
smuxParser(proxy.smux, parsedProxy);
643+
ipVersionParser(proxy, parsedProxy);
614644
return parsedProxy;
615645
};
616646
const hysteria2Parser = (proxy = {}) => {
@@ -644,6 +674,7 @@ const hysteria2Parser = (proxy = {}) => {
644674
tfoParser(proxy, parsedProxy);
645675
detourParser(proxy, parsedProxy);
646676
smuxParser(proxy.smux, parsedProxy);
677+
ipVersionParser(proxy, parsedProxy);
647678
return parsedProxy;
648679
};
649680
const tuic5Parser = (proxy = {}) => {
@@ -675,6 +706,7 @@ const tuic5Parser = (proxy = {}) => {
675706
detourParser(proxy, parsedProxy);
676707
tlsParser(proxy, parsedProxy);
677708
smuxParser(proxy.smux, parsedProxy);
709+
ipVersionParser(proxy, parsedProxy);
678710
return parsedProxy;
679711
};
680712
const anytlsParser = (proxy = {}) => {
@@ -697,6 +729,7 @@ const anytlsParser = (proxy = {}) => {
697729
);
698730
detourParser(proxy, parsedProxy);
699731
tlsParser(proxy, parsedProxy);
732+
ipVersionParser(proxy, parsedProxy);
700733
return parsedProxy;
701734
};
702735

@@ -754,6 +787,7 @@ const wireguardParser = (proxy = {}) => {
754787
tfoParser(proxy, parsedProxy);
755788
detourParser(proxy, parsedProxy);
756789
smuxParser(proxy.smux, parsedProxy);
790+
ipVersionParser(proxy, parsedProxy);
757791
return parsedProxy;
758792
};
759793

0 commit comments

Comments
 (0)