From 82dddf932a6cf31aa0fdb00ad99badb478aefbc8 Mon Sep 17 00:00:00 2001 From: Skyxim Date: Wed, 29 Mar 2023 16:28:26 +0800 Subject: [PATCH] chore: add classical provider for `nameserver-policy`, and rename `domain-set` to `rule-set` --- component/trie/sskv.go | 6 +++--- config/config.go | 19 ++++++++++++------- docs/config.yaml | 2 +- go.mod | 5 +++++ go.sum | 7 ++++++- hub/executor/executor.go | 2 +- transport/hysteria/conns/faketcp/tcp_linux.go | 2 +- transport/hysteria/conns/faketcp/tcp_stub.go | 2 +- 8 files changed, 30 insertions(+), 15 deletions(-) diff --git a/component/trie/sskv.go b/component/trie/sskv.go index a65e3d66..f86cac00 100644 --- a/component/trie/sskv.go +++ b/component/trie/sskv.go @@ -20,7 +20,7 @@ type Set struct { leaves, labelBitmap []uint64 labels []byte ranks, selects []int32 - isEmpty bool + isEmpty bool } // NewSet creates a new *Set struct, from a slice of sorted strings. @@ -48,7 +48,7 @@ func NewDomainTrieSet(keys []string) *Set { keys = reserveDomains ss := &Set{} if len(keys) == 0 { - ss.isEmpty=true + ss.isEmpty = true return ss } lIdx := 0 @@ -84,7 +84,7 @@ func NewDomainTrieSet(keys []string) *Set { // Has query for a key and return whether it presents in the Set. func (ss *Set) Has(key string) bool { - if ss.isEmpty{ + if ss.isEmpty { return false } key = utils.Reverse(key) diff --git a/config/config.go b/config/config.go index b6ad5145..0e0023dd 100644 --- a/config/config.go +++ b/config/config.go @@ -997,12 +997,12 @@ func parseNameServerPolicy(nsPolicy map[string]any, ruleProviders map[string]pro newKey := "geosite:" + subkey updatedPolicy[newKey] = v } - } else if strings.Contains(k, "domain-set:") { + } else if strings.Contains(k, "rule-set:") { subkeys := strings.Split(k, ":") subkeys = subkeys[1:] subkeys = strings.Split(subkeys[0], ",") for _, subkey := range subkeys { - newKey := "domain-set:" + subkey + newKey := "rule-set:" + subkey updatedPolicy[newKey] = v } } else if re.MatchString(k) { @@ -1028,12 +1028,17 @@ func parseNameServerPolicy(nsPolicy map[string]any, ruleProviders map[string]pro if _, valid := trie.ValidAndSplitDomain(domain); !valid { return nil, fmt.Errorf("DNS ResoverRule invalid domain: %s", domain) } - if strings.HasPrefix(domain, "domain-set:") { - domainSetName := domain[11:] + if strings.HasPrefix(domain, "rule-set:") { + domainSetName := domain[9:] if provider, ok := ruleProviders[domainSetName]; !ok { - return nil, fmt.Errorf("not found domain-set: %s", domainSetName) - } else if provider.Behavior() != providerTypes.Domain { - return nil, fmt.Errorf("rule provider type error, except domain,actual %s", provider.Behavior()) + return nil, fmt.Errorf("not found rule-set: %s", domainSetName) + } else { + switch provider.Behavior() { + case providerTypes.IPCIDR: + return nil, fmt.Errorf("rule provider type error, except domain,actual %s", provider.Behavior()) + case providerTypes.Classical: + log.Infoln("%s provider is %s, only matching it contain domain rule", provider.Name(), provider.Behavior()) + } } } policy[domain] = nameservers diff --git a/docs/config.yaml b/docs/config.yaml index 92247591..c2acc1d4 100644 --- a/docs/config.yaml +++ b/docs/config.yaml @@ -238,7 +238,7 @@ dns: - https://doh.pub/dns-query - https://dns.alidns.com/dns-query "www.baidu.com,+.google.cn": [223.5.5.5, https://dns.alidns.com/dns-query] - # "domain-set:global,dns": 8.8.8.8 # global,dns 为 rule-providers 中的名为 global 和 dns 的规则提供器名字,且 behavior 必须为 domain + # "rule-set:global,dns": 8.8.8.8 # global,dns 为 rule-providers 中的名为 global 和 dns 的规则提供器名字,且 behavior 必须为 domain proxies: # socks5 - name: "socks" diff --git a/go.mod b/go.mod index 2667a532..a5e6220e 100644 --- a/go.mod +++ b/go.mod @@ -51,6 +51,11 @@ require ( lukechampine.com/blake3 v1.1.7 ) +require ( + github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect + gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect +) + require ( github.com/ajg/form v1.5.1 // indirect github.com/andybalholm/brotli v1.0.5 // indirect diff --git a/go.sum b/go.sum index 0099411f..fe7a51f4 100644 --- a/go.sum +++ b/go.sum @@ -77,6 +77,8 @@ github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa02 github.com/klauspost/cpuid/v2 v2.0.12 h1:p9dKCg8i4gmOxtv35DvrYoWqYzQrvEVdjQ762Y0OqZE= github.com/klauspost/cpuid/v2 v2.0.12/go.mod h1:g2LTdtYhdyuGPqyWyv7qRAmj1WBqxuObKfj5c0PQa7c= github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/lunixbochs/struc v0.0.0-20200707160740-784aaebc1d40 h1:EnfXoSqDfSNJv0VBNqY/88RNnhSGYkrHaO0mmFGbVsc= github.com/lunixbochs/struc v0.0.0-20200707160740-784aaebc1d40/go.mod h1:vy1vK6wD6j7xX6O6hXe621WabdtNkou2h7uRtTfRMyg= @@ -107,6 +109,8 @@ github.com/miekg/dns v1.1.52 h1:Bmlc/qsNNULOe6bpXcUTsuOajd0DzRHwup6D9k1An0c= github.com/miekg/dns v1.1.52/go.mod h1:uInx36IzPl7FYnDcMeVWxj9byh7DutNykX4G9Sj60FY= github.com/mroth/weightedrand/v2 v2.0.0 h1:ADehnByWbliEDIazDAKFdBHoqgHSXAkgyKqM/9YsPoo= github.com/mroth/weightedrand/v2 v2.0.0/go.mod h1:f2faGsfOGOwc1p94wzHKKZyTpcJUW7OJ/9U4yfiNAOU= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/onsi/ginkgo/v2 v2.2.0 h1:3ZNA3L1c5FYDFTTxbFeVGGD8jYvjYauHD30YgLxVsNI= github.com/onsi/ginkgo/v2 v2.2.0/go.mod h1:MEH45j8TBi6u9BMogfbp0stKC5cdGjumZj5Y7AG4VIk= github.com/onsi/gomega v1.20.1 h1:PA/3qinGoukvymdIDV8pii6tiZgC8kbmJO6Z5+b002Q= @@ -252,7 +256,8 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0 google.golang.org/protobuf v1.28.2-0.20230118093459-a9481185b34d h1:qp0AnQCvRCMlu9jBjtdbTaaEmThIgZOrbVyDEOcmKhQ= google.golang.org/protobuf v1.28.2-0.20230118093459-a9481185b34d/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/hub/executor/executor.go b/hub/executor/executor.go index 228b1ea9..8ca73c65 100644 --- a/hub/executor/executor.go +++ b/hub/executor/executor.go @@ -195,7 +195,7 @@ func updateDNS(c *config.DNS, ruleProvider map[string]provider.RuleProvider, gen prefix := temp[0] key := temp[1] switch strings.ToLower(prefix) { - case "domain-set": + case "rule-set": if p, ok := ruleProvider[key]; ok { domainSetPolicies[p] = nameservers } diff --git a/transport/hysteria/conns/faketcp/tcp_linux.go b/transport/hysteria/conns/faketcp/tcp_linux.go index a3591cf8..cdee9fda 100644 --- a/transport/hysteria/conns/faketcp/tcp_linux.go +++ b/transport/hysteria/conns/faketcp/tcp_linux.go @@ -1,5 +1,5 @@ //go:build linux && !no_fake_tcp -// +build linux +// +build linux,!no_fake_tcp package faketcp diff --git a/transport/hysteria/conns/faketcp/tcp_stub.go b/transport/hysteria/conns/faketcp/tcp_stub.go index 53413867..9f9ff97d 100644 --- a/transport/hysteria/conns/faketcp/tcp_stub.go +++ b/transport/hysteria/conns/faketcp/tcp_stub.go @@ -1,5 +1,5 @@ //go:build !linux || no_fake_tcp -// +build !linux +// +build !linux no_fake_tcp package faketcp