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

Close #706

* commit 'f7150e6a19bfc5643fef4106bd068f6ba099f8e2':
  + 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:59:14 +03:00
commit d24b78db0e
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) { 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) log.Tracef("Adding %s for rDNS resolve", ip)
select { select {
case dnsctx.rdnsChannel <- ip: case dnsctx.rdnsChannel <- ip:
@ -143,19 +156,6 @@ func asyncRDNSLoop() {
func onDNSRequest(d *proxy.DNSContext) { func onDNSRequest(d *proxy.DNSContext) {
if d.Req.Question[0].Qtype == dns.TypeA { if d.Req.Question[0].Qtype == dns.TypeA {
ip, _, _ := net.SplitHostPort(d.Addr.String()) 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) beginAsyncRDNS(ip)
} }
} }
@ -238,6 +238,11 @@ func startDNSServer() error {
return errorx.Decorate(err, "Couldn't start forwarding DNS server") return errorx.Decorate(err, "Couldn't start forwarding DNS server")
} }
top := dnsServer.GetStatsTop()
for k := range top.Clients {
beginAsyncRDNS(k)
}
return nil return nil
} }