mirror of
https://github.com/TeaOSLab/EdgeAdmin.git
synced 2025-11-06 14:50:25 +08:00
业务域名CNAME检查DNS主机地址增加Google公共DNS
This commit is contained in:
@@ -3,8 +3,10 @@ package utils
|
|||||||
import (
|
import (
|
||||||
teaconst "github.com/TeaOSLab/EdgeAdmin/internal/const"
|
teaconst "github.com/TeaOSLab/EdgeAdmin/internal/const"
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/configutils"
|
"github.com/TeaOSLab/EdgeCommon/pkg/configutils"
|
||||||
|
"github.com/iwind/TeaGo/lists"
|
||||||
"github.com/iwind/TeaGo/logs"
|
"github.com/iwind/TeaGo/logs"
|
||||||
"github.com/miekg/dns"
|
"github.com/miekg/dns"
|
||||||
|
"sync"
|
||||||
)
|
)
|
||||||
|
|
||||||
var sharedDNSClient *dns.Client
|
var sharedDNSClient *dns.Client
|
||||||
@@ -33,17 +35,47 @@ func LookupCNAME(host string) (string, error) {
|
|||||||
m.RecursionDesired = true
|
m.RecursionDesired = true
|
||||||
|
|
||||||
var lastErr error
|
var lastErr error
|
||||||
for _, serverAddr := range sharedDNSConfig.Servers {
|
var success = false
|
||||||
|
var result = ""
|
||||||
|
|
||||||
|
var serverAddrs = sharedDNSConfig.Servers
|
||||||
|
|
||||||
|
{
|
||||||
|
var publicDNSHosts = []string{"8.8.8.8" /** Google **/, "8.8.4.4" /** Google **/}
|
||||||
|
for _, publicDNSHost := range publicDNSHosts {
|
||||||
|
if !lists.ContainsString(serverAddrs, publicDNSHost) {
|
||||||
|
serverAddrs = append(serverAddrs, publicDNSHost)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var wg = &sync.WaitGroup{}
|
||||||
|
|
||||||
|
for _, serverAddr := range serverAddrs {
|
||||||
|
wg.Add(1)
|
||||||
|
|
||||||
|
go func(serverAddr string) {
|
||||||
|
defer wg.Done()
|
||||||
r, _, err := sharedDNSClient.Exchange(m, configutils.QuoteIP(serverAddr)+":"+sharedDNSConfig.Port)
|
r, _, err := sharedDNSClient.Exchange(m, configutils.QuoteIP(serverAddr)+":"+sharedDNSConfig.Port)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
lastErr = err
|
lastErr = err
|
||||||
continue
|
return
|
||||||
}
|
|
||||||
if len(r.Answer) == 0 {
|
|
||||||
continue
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return r.Answer[0].(*dns.CNAME).Target, nil
|
success = true
|
||||||
|
|
||||||
|
if len(r.Answer) == 0 {
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
result = r.Answer[0].(*dns.CNAME).Target
|
||||||
|
}(serverAddr)
|
||||||
|
}
|
||||||
|
wg.Wait()
|
||||||
|
|
||||||
|
if success {
|
||||||
|
return result, nil
|
||||||
|
}
|
||||||
|
|
||||||
return "", lastErr
|
return "", lastErr
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,5 +8,8 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func TestLookupCNAME(t *testing.T) {
|
func TestLookupCNAME(t *testing.T) {
|
||||||
t.Log(utils.LookupCNAME("www.yun4s.cn"))
|
for _, domain := range []string{"www.yun4s.cn", "example.com"} {
|
||||||
|
result, err := utils.LookupCNAME(domain)
|
||||||
|
t.Log(domain, "=>", result, err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user