dnsd: serve DNS on tcp/53 as well (DNS must work over TCP)

fixes #59
This commit is contained in:
Michael Stapelberg 2020-09-12 19:21:58 +02:00
parent ee17db29b6
commit 93fe6457b3

View File

@ -38,17 +38,18 @@ import (
) )
var ( var (
httpListeners = multilisten.NewPool() httpListeners = multilisten.NewPool()
dnsListeners = multilisten.NewPool() dnsUDPListeners = multilisten.NewPool()
dnsTCPListeners = multilisten.NewPool()
) )
func updateListeners(mux *miekgdns.ServeMux) error { func updateListeners(mux *miekgdns.ServeMux) error {
hosts, err := gokrazy.PrivateInterfaceAddrs() privateAddrs, err := gokrazy.PrivateInterfaceAddrs()
if err != nil { if err != nil {
return err return err
} }
dnsListeners.ListenAndServe(hosts, func(host string) multilisten.Listener { dnsUDPListeners.ListenAndServe(privateAddrs, func(host string) multilisten.Listener {
return &listenerAdapter{&miekgdns.Server{ return &listenerAdapter{&miekgdns.Server{
Addr: net.JoinHostPort(host, "53"), Addr: net.JoinHostPort(host, "53"),
Net: "udp", 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 { 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")} return &http.Server{Addr: net.JoinHostPort(host, "8053")}
}) })