diff --git a/examples/multi.client.toml b/examples/multi.client.toml index 2fb55558..5a1ec76a 100644 --- a/examples/multi.client.toml +++ b/examples/multi.client.toml @@ -13,11 +13,13 @@ admin_pass = "adfadfadfadfa" # 用于 api服务器的登陆密码.只要给出, # 只要dns模块存在并给出了servers,则所有域名请求都会被先解析成ip # dns解析仅仅是为了能够精准分流, 如果你不需要分流, 没有自定义dns需求,则不需要dns模块 -# dns解析的默认方式是先查A记录,没有A再查AAAA记录 +# dns解析的默认方式是先查A记录,没有A再查AAAA记录 (先查4后查6) #strategy = 60 # 0表示默认, 4表示先查ip4后查ip6, 6表示先查6后查4; 40表示只查ipv4, 60 表示只查ipv6 # 在只查 ipv6时, 有可能查无结果, 此时将依然会把域名原封不动发送到节点, 而不是断开连接. +# servers 列表中的 第一项 将被作为 默认 dns 服务器, 必须保证能连上,所以建议填写确实能连上的dns服务器,否则可能出问题 + servers = [ "udp://114.114.114.114:53", # 如果把该url指向我们dokodemo监听的端口,就可以达到通过节点请求dns的目的. #"udp://127.0.0.1:63782", # 如这一行 就是通过我们节点请求dns diff --git a/netLayer/dns.go b/netLayer/dns.go index 0138cb9b..8c5e1d21 100644 --- a/netLayer/dns.go +++ b/netLayer/dns.go @@ -207,6 +207,7 @@ func (dm *DNSMachine) AddNewServer(name string, addr *Addr) error { dm.defaultConn = DnsConn{Conn: new(dns.Conn), raddr: addr, Name: name} err := dm.defaultConn.Dial() if err != nil { + dm.defaultConn.Conn = nil return err } } else { @@ -362,7 +363,7 @@ func (dm *DNSMachine) QueryType(domain string, dns_type uint16) (ip net.IP) { } } - if theDNSServerConn.Conn == nil { //如果配置文件只配置了自定义映射, 而没配置dns服务器的话, 那么我们就无法进行实际的dns查询 + if theDNSServerConn.Conn == nil { //如果配置文件只配置了自定义映射, 而没配置dns服务器的话, 那么我们就无法进行实际的dns查询; 或者配置了,但是因为Dial失败,导致没有 实际的Conn if ce := utils.CanLogDebug("[DNSMachine] no server configured, return nil."); ce != nil { ce.Write() } diff --git a/netLayer/dns_conf.go b/netLayer/dns_conf.go index c0102827..7ba68a08 100644 --- a/netLayer/dns_conf.go +++ b/netLayer/dns_conf.go @@ -92,7 +92,13 @@ func LoadDnsMachine(conf *DnsConf) *DNSMachine { continue } - dm.AddNewServer(server, &ad) + if err := dm.AddNewServer(server, &ad); err != nil { + if ce := utils.CanLogErr("LoadDnsMachine, AddNewServer by string failed"); ce != nil { + ce.Write(zap.Error(err)) + } + + continue + } case map[string]any: @@ -121,7 +127,7 @@ func LoadDnsMachine(conf *DnsConf) *DNSMachine { if err := dm.AddNewServer(realServer.AddrUrlStr, &addr); err != nil { - if ce := utils.CanLogErr("LoadDnsMachine, AddNewServer failed"); ce != nil { + if ce := utils.CanLogErr("LoadDnsMachine, AddNewServer by map failed"); ce != nil { ce.Write(zap.Error(err)) }