diff options
Diffstat (limited to 'middleware/proxy/reverseproxy.go')
-rw-r--r-- | middleware/proxy/reverseproxy.go | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/middleware/proxy/reverseproxy.go b/middleware/proxy/reverseproxy.go new file mode 100644 index 000000000..6d27da042 --- /dev/null +++ b/middleware/proxy/reverseproxy.go @@ -0,0 +1,36 @@ +// Package proxy is middleware that proxies requests. +package proxy + +import ( + "github.com/miekg/coredns/middleware" + "github.com/miekg/dns" +) + +type ReverseProxy struct { + Host string + Client Client +} + +func (p ReverseProxy) ServeDNS(w dns.ResponseWriter, r *dns.Msg, extra []dns.RR) error { + // TODO(miek): use extra! + var ( + reply *dns.Msg + err error + ) + context := middleware.Context{W: w, Req: r} + + // tls+tcp ? + if context.Proto() == "tcp" { + reply, err = middleware.Exchange(p.Client.TCP, r, p.Host) + } else { + reply, err = middleware.Exchange(p.Client.UDP, r, p.Host) + } + + if err != nil { + return err + } + reply.Compress = true + reply.Id = r.Id + w.WriteMsg(reply) + return nil +} |