make CoreDNS DoH Server (#1619)

* WIP: make CoreDNS DoH Server

* It works

* Fix tests

* Review from Tom - on diff. PR

* correct mime type

* Cleanups and use the pkg/nonwriter

* rename and updates

* implement get

* implement GET

* Code review comments

* correct context

* tweaks

* code review
This commit is contained in:
Miek Gieben
2018-05-21 19:40:46 +01:00
committed by GitHub
parent 67c9075331
commit 18b92e1117
7 changed files with 309 additions and 7 deletions

View File

@@ -71,6 +71,8 @@ func (h Host) Normalize() string {
s = s[len(TransportDNS+"://"):]
case strings.HasPrefix(s, TransportGRPC+"://"):
s = s[len(TransportGRPC+"://"):]
case strings.HasPrefix(s, TransportHTTPS+"://"):
s = s[len(TransportHTTPS+"://"):]
}
// The error can be ignore here, because this function is called after the corefile
@@ -138,7 +140,8 @@ func SplitHostPort(s string) (host, port string, ipnet *net.IPNet, err error) {
// Duplicated from core/dnsserver/address.go !
const (
TransportDNS = "dns"
TransportTLS = "tls"
TransportGRPC = "grpc"
TransportDNS = "dns"
TransportTLS = "tls"
TransportGRPC = "grpc"
TransportHTTPS = "https"
)

View File

@@ -2,6 +2,8 @@
package nonwriter
import (
"net"
"github.com/miekg/dns"
)
@@ -9,6 +11,11 @@ import (
type Writer struct {
dns.ResponseWriter
Msg *dns.Msg
// Raddr is the remote's address. This can be optionally set.
Raddr net.Addr
// Laddr is our address. This can be optionally set.
Laddr net.Addr
}
// New makes and returns a new NonWriter.
@@ -20,4 +27,8 @@ func (w *Writer) WriteMsg(res *dns.Msg) error {
return nil
}
func (w *Writer) Write(buf []byte) (int, error) { return len(buf), nil }
// RemoteAddr returns the remote address.
func (w *Writer) RemoteAddr() net.Addr { return w.Raddr }
// LocalAddr returns the local address.
func (w *Writer) LocalAddr() net.Addr { return w.Laddr }