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:
1 parent
00623be8a7
commit
b0274e11be
5 files changed
+27
-9
No files matched your search
+5
-1
@@ -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),
|
||||
|
||||
@@ -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)
|
||||
})
|
||||
}
|
||||
Reference in new issue
Block a user