@@ -14,18 +14,18 @@ import (
1414
1515 C "github.com/sagernet/sing-box/constant"
1616 mdns "github.com/sagernet/sing-box/dns"
17- "github.com/sagernet/sing-box/hiddify/ipinfo"
1817 "github.com/sagernet/sing-box/option"
1918 "github.com/sagernet/sing/common/json/badoption"
2019 "github.com/sagernet/wireguard-go/hiddify"
2120)
2221
2322const (
24- DNSRemoteTag = "dns-remote"
25- DNSLocalTag = "dns-local"
26- DNSStaticTag = "dns-static"
27- DNSDirectTag = "dns-direct"
28- DNSRemoteNoWarpTag = "dns-remote-no-warp"
23+ DNSRemoteTag = "dns-remote"
24+ DNSRemoteTagFallback = "dns-remote-fallback"
25+ DNSLocalTag = "dns-local"
26+ DNSStaticTag = "dns-static"
27+ DNSDirectTag = "dns-direct"
28+ DNSRemoteNoWarpTag = "dns-remote-no-warp"
2929 // DNSBlockTag = "dns-block"
3030 DNSFakeTag = "dns-fake"
3131 DNSTricksDirectTag = "dns-trick-direct"
@@ -35,7 +35,7 @@ const (
3535 // OutboundBlockTag = "block §hide§"
3636 OutboundSelectTag = "select"
3737 OutboundURLTestTag = "lowest"
38- OutboundRoundRobinTag = "parallel "
38+ OutboundRoundRobinTag = "balance "
3939 OutboundDNSTag = "dns-out §hide§"
4040 OutboundDirectFragmentTag = "direct-fragment §hide§"
4141
@@ -104,7 +104,11 @@ func getHostnameIfNotIP(inp string) (string, error) {
104104 return "" , fmt .Errorf ("empty hostname: %s" , inp )
105105 }
106106 if net .ParseIP (strings .Trim (inp , "[]" )) == nil {
107- return inp , nil
107+ u , err := url .Parse (inp )
108+ if err != nil {
109+ return inp , err
110+ }
111+ return u .Host , nil
108112 }
109113 return "" , fmt .Errorf ("not a hostname: %s" , inp )
110114}
@@ -516,69 +520,24 @@ func setRoutingOptions(options *option.Options, hopt *HiddifyOptions) error {
516520 // // )
517521 // }
518522
519- // dnsRules = append(dnsRules, option.DefaultDNSRule{
520- // RawDefaultDNSRule: option.RawDefaultDNSRule{},
521- // DNSRuleAction: option.DNSRuleAction{
522- // Action: C.RuleActionTypeRoute,
523- // RouteOptions: option.DNSRouteActionOptions{
524- // Server: DNSStaticTag,
525- // },
526- // },
527- // },
528- // )
529- forceDirectRules , err := addForceDirect (options , hopt )
530- if err != nil {
531- return err
532- }
533-
534- dnsRules = append (dnsRules , forceDirectRules ... )
535-
536- if len (hopt .ConnectionTestUrls ) > 0 { //To avoid dns bug when using urltest
537- domains := []string {}
538- for _ , url := range hopt .ConnectionTestUrls {
539- if host , err := getHostnameIfNotIP (url ); err == nil {
540- domains = append (domains , host )
541- }
542- }
543- if len (domains ) > 0 {
544- dnsRules = append (dnsRules , option.DefaultDNSRule {
545- RawDefaultDNSRule : option.RawDefaultDNSRule {
546- Domain : domains ,
547- },
548- DNSRuleAction : option.DNSRuleAction {
549- Action : C .RuleActionTypeRoute ,
550- RouteOptions : option.DNSRouteActionOptions {
551- Server : DNSDirectTag ,
552- },
553- },
554- })
555- }
556- }
557523 dnsRules = append (dnsRules , option.DefaultDNSRule {
558- RawDefaultDNSRule : option.RawDefaultDNSRule {
559- Domain : []string {"api.cloudflareclient.com" },
560- },
524+ RawDefaultDNSRule : option.RawDefaultDNSRule {},
561525 DNSRuleAction : option.DNSRuleAction {
562526 Action : C .RuleActionTypeRoute ,
563527 RouteOptions : option.DNSRouteActionOptions {
564- Server : DNSRemoteNoWarpTag ,
528+ Server : DNSStaticTag ,
529+ BypassIfFailed : true ,
565530 },
566531 },
567- })
568- if ipinfoDomains := ipinfo .GetAllIPCheckerDomainsDomains (); len (ipinfoDomains ) > 0 { //To avoid dns bug when using urltest
569- dnsRules = append (dnsRules , option.DefaultDNSRule {
570- RawDefaultDNSRule : option.RawDefaultDNSRule {
571- Domain : ipinfoDomains ,
572- },
573- DNSRuleAction : option.DNSRuleAction {
574- Action : C .RuleActionTypeRoute ,
575- RouteOptions : option.DNSRouteActionOptions {
576- Server : DNSDirectTag ,
577- },
578- },
579- })
532+ },
533+ )
534+ forceDirectRules , err := addForceDirect (options , hopt )
535+ if err != nil {
536+ return err
580537 }
581538
539+ dnsRules = append (dnsRules , forceDirectRules ... )
540+
582541 routeRules = append (routeRules , option.Rule {
583542 Type : C .RuleTypeDefault ,
584543 DefaultOptions : option.DefaultRule {
@@ -716,9 +675,10 @@ func setRoutingOptions(options *option.Options, hopt *HiddifyOptions) error {
716675 DNSRuleAction : option.DNSRuleAction {
717676 Action : C .RuleActionTypeRoute ,
718677 RouteOptions : option.DNSRouteActionOptions {
719- Server : DNSDirectTag ,
720- RewriteTTL : & dnsCPttl ,
721- DisableCache : false ,
678+ Server : DNSDirectTag ,
679+ RewriteTTL : & dnsCPttl ,
680+ DisableCache : false ,
681+ BypassIfFailed : true ,
722682 },
723683 },
724684 })
@@ -839,7 +799,8 @@ func setRoutingOptions(options *option.Options, hopt *HiddifyOptions) error {
839799 DNSRuleAction : option.DNSRuleAction {
840800 Action : C .RuleActionTypeRoute ,
841801 RouteOptions : option.DNSRouteActionOptions {
842- Server : DNSDirectTag ,
802+ Server : DNSDirectTag ,
803+ BypassIfFailed : true ,
843804 },
844805 },
845806 })
@@ -868,7 +829,8 @@ func setRoutingOptions(options *option.Options, hopt *HiddifyOptions) error {
868829 DNSRuleAction : option.DNSRuleAction {
869830 Action : C .RuleActionTypeRoute ,
870831 RouteOptions : option.DNSRouteActionOptions {
871- Server : DNSDirectTag ,
832+ Server : DNSDirectTag ,
833+ BypassIfFailed : true ,
872834 },
873835 },
874836 })
@@ -952,8 +914,9 @@ func setRoutingOptions(options *option.Options, hopt *HiddifyOptions) error {
952914 DNSRuleAction : option.DNSRuleAction {
953915 Action : C .RuleActionTypeRoute ,
954916 RouteOptions : option.DNSRouteActionOptions {
955- Server : DNSFakeTag ,
956- DisableCache : true ,
917+ Server : DNSFakeTag ,
918+ DisableCache : true ,
919+ BypassIfFailed : true ,
957920 },
958921 },
959922 })
@@ -965,28 +928,8 @@ func setRoutingOptions(options *option.Options, hopt *HiddifyOptions) error {
965928 DNSRuleAction : option.DNSRuleAction {
966929 Action : C .RuleActionTypeRoute ,
967930 RouteOptions : option.DNSRouteActionOptions {
968- Server : DNSRemoteTag ,
969- },
970- },
971- },
972- )
973- dnsRules = append (dnsRules , option.DefaultDNSRule {
974-
975- RawDefaultDNSRule : option.RawDefaultDNSRule {},
976- DNSRuleAction : option.DNSRuleAction {
977- Action : C .RuleActionTypeRoute ,
978- RouteOptions : option.DNSRouteActionOptions {
979- Server : DNSTricksDirectTag ,
980- },
981- },
982- },
983- )
984- dnsRules = append (dnsRules , option.DefaultDNSRule {
985- RawDefaultDNSRule : option.RawDefaultDNSRule {},
986- DNSRuleAction : option.DNSRuleAction {
987- Action : C .RuleActionTypeRoute ,
988- RouteOptions : option.DNSRouteActionOptions {
989- Server : DNSDirectTag ,
931+ Server : DNSRemoteTag ,
932+ BypassIfFailed : true ,
990933 },
991934 },
992935 },
@@ -996,11 +939,46 @@ func setRoutingOptions(options *option.Options, hopt *HiddifyOptions) error {
996939 DNSRuleAction : option.DNSRuleAction {
997940 Action : C .RuleActionTypeRoute ,
998941 RouteOptions : option.DNSRouteActionOptions {
999- Server : DNSLocalTag ,
942+ Server : DNSRemoteTagFallback ,
943+ BypassIfFailed : false ,
1000944 },
1001945 },
1002946 },
1003947 )
948+ // dnsRules = append(dnsRules, option.DefaultDNSRule{
949+
950+ // RawDefaultDNSRule: option.RawDefaultDNSRule{},
951+ // DNSRuleAction: option.DNSRuleAction{
952+ // Action: C.RuleActionTypeRoute,
953+ // RouteOptions: option.DNSRouteActionOptions{
954+ // Server: DNSTricksDirectTag,
955+ // BypassIfFailed: true,
956+ // },
957+ // },
958+ // },
959+ // )
960+ // dnsRules = append(dnsRules, option.DefaultDNSRule{
961+ // RawDefaultDNSRule: option.RawDefaultDNSRule{},
962+ // DNSRuleAction: option.DNSRuleAction{
963+ // Action: C.RuleActionTypeRoute,
964+ // RouteOptions: option.DNSRouteActionOptions{
965+ // Server: DNSDirectTag,
966+ // BypassIfFailed: true,
967+ // },
968+ // },
969+ // },
970+ // )
971+ // dnsRules = append(dnsRules, option.DefaultDNSRule{
972+ // RawDefaultDNSRule: option.RawDefaultDNSRule{},
973+ // DNSRuleAction: option.DNSRuleAction{
974+ // Action: C.RuleActionTypeRoute,
975+ // RouteOptions: option.DNSRouteActionOptions{
976+ // Server: DNSLocalTag,
977+ // // BypassIfFailed: true,
978+ // },
979+ // },
980+ // },
981+ // )
1004982
1005983 for _ , dnsRule := range dnsRules {
1006984 if dnsRule .IsValid () {
0 commit comments