diff --git a/README.md b/README.md index f945500..a44068f 100644 --- a/README.md +++ b/README.md @@ -50,6 +50,8 @@ Usage of dingo-linux-amd64: debugging level (default 2) -gdns:auto Google DNS: try to lookup the closest IPv4 server + -gdns:auto6 + Google DNS: try to lookup the closest IPv6 server -gdns:edns string Google DNS: EDNS client subnet (set 0.0.0.0/0 to disable) -gdns:host string diff --git a/gdns.go b/gdns.go index 32d4d13..1536bf9 100644 --- a/gdns.go +++ b/gdns.go @@ -20,6 +20,7 @@ type Gdns struct { workers *int server *string auto *bool + auto6 *bool sni *string host *string edns *string @@ -34,6 +35,8 @@ func (r *Gdns) Init() { "Google DNS: server address") r.auto = flag.Bool("gdns:auto", false, "Google DNS: try to lookup the closest IPv4 server") + r.auto6 = flag.Bool("gdns:auto6", false, + "Google DNS: try to lookup the closest IPv6 server") r.sni = flag.String("gdns:sni", "www.google.com", "Google DNS: SNI string to send (should match server certificate)") r.host = flag.String("gdns:host", "dns.google.com", @@ -56,6 +59,13 @@ func (R *Gdns) Start() { R.server = &r4.Answer[0].Data } } + if *R.auto6 { + dbg(1, "resolving dns.google.com...") + r6 := R.resolve(NewHttps(*R.sni, false), *R.server, "dns.google.com", 28) + if r6.Status == 0 && len(r6.Answer) > 0 { + R.server = &r6.Answer[0].Data + } + } dbg(1, "starting %d Google Public DNS client(s) querying server %s", *R.workers, *R.server)