From c57502368176d972f5e519250881f6980e08494e Mon Sep 17 00:00:00 2001 From: Alvaro Saurin Date: Mon, 23 Feb 2015 11:22:28 +0100 Subject: [PATCH] zettio/weave#362 - command line arg for using a specific fallback DNS server --- nameserver/server_test.go | 7 ++----- weavedns/main.go | 21 +++++++++++++++++---- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/nameserver/server_test.go b/nameserver/server_test.go index f990ab3d..bde9d722 100644 --- a/nameserver/server_test.go +++ b/nameserver/server_test.go @@ -68,8 +68,7 @@ func TestUDPDNSServer(t *testing.T) { config := &dns.ClientConfig{Servers: []string{"127.0.0.1"}, Port: fallbackPort} srv := NewDNSServer(config, zone, nil, port) defer srv.Stop() - err = srv.Start() - wt.AssertNoErr(t, err) + go srv.Start() time.Sleep(100 * time.Millisecond) // Allow sever goroutine to start c := new(dns.Client) @@ -192,8 +191,7 @@ func TestTCPDNSServer(t *testing.T) { config := &dns.ClientConfig{Servers: []string{"127.0.0.1"}, Port: fallbackPort} srv := NewDNSServer(config, zone, nil, port) defer srv.Stop() - err = srv.Start() - wt.AssertNoErr(t, err) + go srv.Start() time.Sleep(100 * time.Millisecond) // Allow sever goroutine to start t.Logf("Creating a UDP and a TCP client") @@ -267,7 +265,6 @@ func RunLocalTCPServer(t *testing.T, laddr string, handler dns.HandlerFunc) (*dn l.Close() }() - t.Logf("Fallback TCP server listening at %s", l.Addr().String()) return server, l.Addr().String(), nil } diff --git a/weavedns/main.go b/weavedns/main.go index 035515c2..1c788b77 100644 --- a/weavedns/main.go +++ b/weavedns/main.go @@ -3,13 +3,13 @@ package main import ( "flag" "fmt" + "github.com/miekg/dns" . "github.com/zettio/weave/common" weavedns "github.com/zettio/weave/nameserver" weavenet "github.com/zettio/weave/net" "io" "net" "os" - "github.com/miekg/dns" ) var version = "(unreleased version)" @@ -19,11 +19,13 @@ func main() { justVersion bool ifaceName string apiPath string + fallback string dnsPort int httpPort int wait int watch bool debug bool + err error ) flag.BoolVar(&justVersion, "version", false, "print version and exit") @@ -32,6 +34,7 @@ func main() { flag.IntVar(&wait, "wait", 0, "number of seconds to wait for interface to be created and come up") flag.IntVar(&dnsPort, "dnsport", 53, "port to listen to DNS requests") flag.IntVar(&httpPort, "httpport", 6785, "port to listen to HTTP requests") + flag.StringVar(&fallback, "fallback", "", "Fallback server and port (ie, '8.8.8.8:53')") flag.BoolVar(&watch, "watch", true, "watch the docker socket for container events") flag.BoolVar(&debug, "debug", false, "output debugging info to stderr") flag.Parse() @@ -64,9 +67,19 @@ func main() { } } - config, err := dns.ClientConfigFromFile("/etc/resolv.conf") - if err != nil { - Error.Fatal("Failed obtain DNS client configuration", err) + var config *dns.ClientConfig + if len(fallback) > 0 { + fallbackHost, fallbackPort, err := net.SplitHostPort(fallback) + if err != nil { + Error.Fatal("Fould not parse fallback host and port", err) + } + config = &dns.ClientConfig{Servers: []string{fallbackHost}, Port: fallbackPort} + Debug.Printf("DNS fallback at %s:%s", fallbackHost, fallbackPort) + } else { + config, err = dns.ClientConfigFromFile("/etc/resolv.conf") + if err != nil { + Error.Fatal("Failed obtain DNS client configuration", err) + } } go weavedns.ListenHttp(weavedns.LOCAL_DOMAIN, zone, httpPort)