From 93fe6457b36736ef6de8fe68869afc5c0a936987 Mon Sep 17 00:00:00 2001 From: Michael Stapelberg Date: Sat, 12 Sep 2020 19:21:58 +0200 Subject: [PATCH] dnsd: serve DNS on tcp/53 as well (DNS must work over TCP) fixes #59 --- cmd/dnsd/dnsd.go | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/cmd/dnsd/dnsd.go b/cmd/dnsd/dnsd.go index 36f2011..8a8003e 100644 --- a/cmd/dnsd/dnsd.go +++ b/cmd/dnsd/dnsd.go @@ -38,17 +38,18 @@ import ( ) var ( - httpListeners = multilisten.NewPool() - dnsListeners = multilisten.NewPool() + httpListeners = multilisten.NewPool() + dnsUDPListeners = multilisten.NewPool() + dnsTCPListeners = multilisten.NewPool() ) func updateListeners(mux *miekgdns.ServeMux) error { - hosts, err := gokrazy.PrivateInterfaceAddrs() + privateAddrs, err := gokrazy.PrivateInterfaceAddrs() if err != nil { return err } - dnsListeners.ListenAndServe(hosts, func(host string) multilisten.Listener { + dnsUDPListeners.ListenAndServe(privateAddrs, func(host string) multilisten.Listener { return &listenerAdapter{&miekgdns.Server{ Addr: net.JoinHostPort(host, "53"), Net: "udp", @@ -56,11 +57,19 @@ func updateListeners(mux *miekgdns.ServeMux) error { }} }) + dnsTCPListeners.ListenAndServe(privateAddrs, func(host string) multilisten.Listener { + return &listenerAdapter{&miekgdns.Server{ + Addr: net.JoinHostPort(host, "53"), + Net: "tcp", + Handler: mux, + }} + }) + if net1, err := multilisten.IPv6Net1("/perm"); err == nil { - hosts = append(hosts, net1) + privateAddrs = append(privateAddrs, net1) } - httpListeners.ListenAndServe(hosts, func(host string) multilisten.Listener { + httpListeners.ListenAndServe(privateAddrs, func(host string) multilisten.Listener { return &http.Server{Addr: net.JoinHostPort(host, "8053")} })