feat: nameserver-policy support multiple keys
e.g., nameserver-policy: # 'www.baidu.com': '114.114.114.114' # '+.internal.crop.com': '10.0.0.1' "geosite:cn,private,apple": - https://doh.pub/dns-query - https://dns.alidns.com/dns-query "www.baidu.com,+.google.cn": - 223.5.5.5 - 1.1.1.1
This commit is contained in:
parent
074fee2b48
commit
0a6c848c9e
2 changed files with 31 additions and 5 deletions
|
@ -4,11 +4,11 @@ import (
|
||||||
"container/list"
|
"container/list"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"net"
|
"net"
|
||||||
"net/netip"
|
"net/netip"
|
||||||
"net/url"
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
|
"regexp"
|
||||||
"runtime"
|
"runtime"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
@ -985,8 +985,33 @@ func parsePureDNSServer(server string) string {
|
||||||
}
|
}
|
||||||
func parseNameServerPolicy(nsPolicy map[string]any, preferH3 bool) (map[string][]dns.NameServer, error) {
|
func parseNameServerPolicy(nsPolicy map[string]any, preferH3 bool) (map[string][]dns.NameServer, error) {
|
||||||
policy := map[string][]dns.NameServer{}
|
policy := map[string][]dns.NameServer{}
|
||||||
|
updatedPolicy := make(map[string]interface{})
|
||||||
|
re := regexp.MustCompile(`[a-zA-Z0-9\-]+\.[a-zA-Z]{2,}(\.[a-zA-Z]{2,})?`)
|
||||||
|
|
||||||
for domain, server := range nsPolicy {
|
for k, v := range nsPolicy {
|
||||||
|
if strings.Contains(k, "geosite:") {
|
||||||
|
subkeys := strings.Split(k, ":")
|
||||||
|
subkeys = subkeys[1:]
|
||||||
|
subkeys = strings.Split(subkeys[0], ",")
|
||||||
|
//log.Infoln("subkeys:%+v", subkeys)
|
||||||
|
for _, subkey := range subkeys {
|
||||||
|
newKey := "geosite:" + subkey
|
||||||
|
//log.Infoln("newKey:%+v", newKey)
|
||||||
|
updatedPolicy[newKey] = v
|
||||||
|
}
|
||||||
|
} else if re.MatchString(k) {
|
||||||
|
subkeys := strings.Split(k, ",")
|
||||||
|
//log.Infoln("subkeys:%+v", subkeys)
|
||||||
|
for _, subkey := range subkeys {
|
||||||
|
updatedPolicy[subkey] = v
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
updatedPolicy[k] = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//log.Infoln("updatedPolicy:%+v", updatedPolicy)
|
||||||
|
|
||||||
|
for domain, server := range updatedPolicy {
|
||||||
|
|
||||||
servers, err := utils.ToStringSlice(server)
|
servers, err := utils.ToStringSlice(server)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -231,12 +231,13 @@ dns:
|
||||||
# - '+.youtube.com'
|
# - '+.youtube.com'
|
||||||
|
|
||||||
# 配置查询域名使用的 DNS 服务器
|
# 配置查询域名使用的 DNS 服务器
|
||||||
nameserver-policy: # 'www.baidu.com': '114.114.114.114'
|
nameserver-policy:
|
||||||
|
# 'www.baidu.com': '114.114.114.114'
|
||||||
# '+.internal.crop.com': '10.0.0.1'
|
# '+.internal.crop.com': '10.0.0.1'
|
||||||
"geosite:cn":
|
"geosite:cn,private,apple":
|
||||||
- https://doh.pub/dns-query
|
- https://doh.pub/dns-query
|
||||||
- https://dns.alidns.com/dns-query
|
- https://dns.alidns.com/dns-query
|
||||||
"www.baidu.com": [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]
|
||||||
|
|
||||||
proxies: # socks5
|
proxies: # socks5
|
||||||
- name: "socks"
|
- name: "socks"
|
||||||
|
|
Loading…
Reference in a new issue