+ dns: resolve hosts via rDNS for the top clients after the server has been started

This commit is contained in:
Simon Zolin 2019-06-04 18:12:45 +03:00
parent 6261fb79ab
commit f7150e6a19
1 changed files with 18 additions and 13 deletions

31
dns.go
View File

@ -68,6 +68,19 @@ func isRunning() bool {
}
func beginAsyncRDNS(ip string) {
if clientExists(ip) {
return
}
// add IP to rdnsIP, if not exists
dnsctx.rdnsLock.Lock()
defer dnsctx.rdnsLock.Unlock()
_, ok := dnsctx.rdnsIP[ip]
if ok {
return
}
dnsctx.rdnsIP[ip] = true
log.Tracef("Adding %s for rDNS resolve", ip)
select {
case dnsctx.rdnsChannel <- ip:
@ -143,19 +156,6 @@ func asyncRDNSLoop() {
func onDNSRequest(d *proxy.DNSContext) {
if d.Req.Question[0].Qtype == dns.TypeA {
ip, _, _ := net.SplitHostPort(d.Addr.String())
if clientExists(ip) {
return
}
// add IP to rdnsIP, if not exists
dnsctx.rdnsLock.Lock()
defer dnsctx.rdnsLock.Unlock()
_, ok := dnsctx.rdnsIP[ip]
if ok {
return
}
dnsctx.rdnsIP[ip] = true
beginAsyncRDNS(ip)
}
}
@ -238,6 +238,11 @@ func startDNSServer() error {
return errorx.Decorate(err, "Couldn't start forwarding DNS server")
}
top := dnsServer.GetStatsTop()
for k := range top.Clients {
beginAsyncRDNS(k)
}
return nil
}