@@ -2,6 +2,26 @@ import ClashMeta_Producer from './clashmeta';
22import $ from '@/core/app' ;
33import { 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+ } ;
525const 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} ;
376400const 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} ;
546574const 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} ;
567596const 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} ;
616646const 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} ;
649680const 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} ;
680712const 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