aboutsummaryrefslogtreecommitdiff
path: root/middleware/proxy/reverseproxy.go
diff options
context:
space:
mode:
Diffstat (limited to 'middleware/proxy/reverseproxy.go')
-rw-r--r--middleware/proxy/reverseproxy.go36
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
+}