From 4a05ab00577434864a2d87c29f0e7ccf5c7783e9 Mon Sep 17 00:00:00 2001 From: Simon Zolin Date: Mon, 22 Jul 2019 12:33:45 +0300 Subject: [PATCH] * dnsforward: parental control server can be an IP address, not just host name --- dnsforward/dnsforward.go | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/dnsforward/dnsforward.go b/dnsforward/dnsforward.go index eeebb6c8..e7cef514 100644 --- a/dnsforward/dnsforward.go +++ b/dnsforward/dnsforward.go @@ -601,7 +601,27 @@ func (s *Server) genAAAAAnswer(req *dns.Msg, ip net.IP) *dns.AAAA { return answer } +// generate DNS response message with an IP address +func (s *Server) genResponseWithIP(req *dns.Msg, ip net.IP) *dns.Msg { + if req.Question[0].Qtype == dns.TypeA && ip.To4() != nil { + return s.genARecord(req, ip.To4()) + } else if req.Question[0].Qtype == dns.TypeAAAA && ip.To4() == nil { + return s.genAAAARecord(req, ip) + } + + // empty response + resp := dns.Msg{} + resp.SetReply(req) + return &resp +} + func (s *Server) genBlockedHost(request *dns.Msg, newAddr string, d *proxy.DNSContext) *dns.Msg { + + ip := net.ParseIP(newAddr) + if ip != nil { + return s.genResponseWithIP(request, ip) + } + // look up the hostname, TODO: cache replReq := dns.Msg{} replReq.SetQuestion(dns.Fqdn(newAddr), request.Question[0].Qtype)