Fetch DNS listen address from daemon

instead of assuming it's on the Docker bridge

Also move DNS address validation into NewDNSServer(),
so we only do it once.
This commit is contained in:
Bryan Boreham committed 2020-07-31 11:58:56 +00:00
1 parent 00623be8a7
commit b0274e11be
5 files changed
+27 -9

No files matched your search

+5 -1
View File
@@ -90,7 +90,7 @@ type DNSServer struct {
ns *Nameserver
domain string
ttl uint32
address string
address string // listen address and port, e.g. 1.2.3.4:53
servers []*dns.Server
upstream Upstream
@@ -99,6 +99,10 @@ type DNSServer struct {
}
func NewDNSServer(ns *Nameserver, domain, address string, upstream Upstream, ttl uint32, clientTimeout time.Duration) (*DNSServer, error) {
if _, _, err := net.SplitHostPort(address); err != nil {
return nil, fmt.Errorf("invalid DNS listen address %q: %v", address, err)
}
s := &DNSServer{
ns: ns,
domain: dns.Fqdn(domain),
+11
View File
@@ -3,6 +3,7 @@ package nameserver
import (
"encoding/json"
"fmt"
"net"
"net/http"
"github.com/gorilla/mux"
@@ -84,3 +85,13 @@ func (n *Nameserver) HandleHTTP(router *mux.Router, dockerCli *docker.Client) {
}
})
}
func (d *DNSServer) HandleHTTP(router *mux.Router) {
router.Methods("GET").Path("/dns-address-port").HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, d.address)
})
router.Methods("GET").Path("/dns-address").HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
host, _, _ := net.SplitHostPort(d.address) // address is validated in NewDNSServer()
fmt.Fprint(w, host)
})
}