Fix #706 -- rDNS for DOH/DOT clients

This commit is contained in:
Andrey Meshkov 2019-06-04 20:38:53 +03:00
parent 3454bf9243
commit a3b8d4d923
4 changed files with 29 additions and 16 deletions

14
dns.go
View File

@ -154,10 +154,18 @@ func asyncRDNSLoop() {
}
func onDNSRequest(d *proxy.DNSContext) {
if d.Req.Question[0].Qtype == dns.TypeA {
ip, _, _ := net.SplitHostPort(d.Addr.String())
beginAsyncRDNS(ip)
qType := d.Req.Question[0].Qtype
if qType != dns.TypeA && qType != dns.TypeAAAA {
return
}
ip := dnsforward.GetIPString(d.Addr)
if ip == "" {
// This would be quite weird if we get here
return
}
beginAsyncRDNS(ip)
}
func generateServerConfig() dnsforward.ServerConfig {

View File

@ -1,6 +1,8 @@
package main
import "testing"
import (
"testing"
)
func TestResolveRDNS(t *testing.T) {
config.DNS.BindHost = "1.1.1.1"

14
dnsforward/helpers.go Normal file
View File

@ -0,0 +1,14 @@
package dnsforward
import "net"
// GetIPString is a helper function that extracts IP address from net.Addr
func GetIPString(addr net.Addr) string {
switch addr := addr.(type) {
case *net.UDPAddr:
return addr.IP.String()
case *net.TCPAddr:
return addr.IP.String()
}
return ""
}

View File

@ -61,7 +61,7 @@ func (l *queryLog) logRequest(question *dns.Msg, answer *dns.Msg, result *dnsfil
var q []byte
var a []byte
var err error
ip := getIPString(addr)
ip := GetIPString(addr)
if question != nil {
q, err = question.Pack()
@ -244,14 +244,3 @@ func answerToMap(a *dns.Msg) []map[string]interface{} {
return answers
}
// getIPString is a helper function that extracts IP address from net.Addr
func getIPString(addr net.Addr) string {
switch addr := addr.(type) {
case *net.UDPAddr:
return addr.IP.String()
case *net.TCPAddr:
return addr.IP.String()
}
return ""
}