- Replace hardcoded 127.0.0.1:53 in systemResolver() with actual system DNS from /etc/resolv.conf (falls back to 127.0.0.1:53 if unavailable) - Add Resolver field to RootDiscoveryConfig so callers can override the upstream resolver used during root server discovery - Add --dns-upstream flag (e.g. --dns-upstream 8.8.8.8:53) to exploredns CLI and DNSUpstream field to Config - Add internal/dns/hints.go with all 13 IANA root server IPv4/IPv6 addresses as embedded constants (RootHints []RootServer) - Update tests: fix real_exchange_test.go call site; add hints_test.go covering RootHints correctness and resolver helper functions Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: multica-agent <github@multica.ai>
75 lines
2.0 KiB
Go
75 lines
2.0 KiB
Go
package dns
|
|
|
|
import "net"
|
|
|
|
// RootHints contains the 13 IANA root name servers with their well-known
|
|
// IPv4 and IPv6 addresses as published at https://www.iana.org/domains/root/servers.
|
|
// These addresses change very rarely and are safe to embed as application constants.
|
|
var RootHints = []RootServer{
|
|
{
|
|
Name: "a.root-servers.net.",
|
|
IPv4: []net.IP{net.ParseIP("198.41.0.4")},
|
|
IPv6: []net.IP{net.ParseIP("2001:503:ba3e::2:30")},
|
|
},
|
|
{
|
|
Name: "b.root-servers.net.",
|
|
IPv4: []net.IP{net.ParseIP("170.247.170.2")},
|
|
IPv6: []net.IP{net.ParseIP("2801:1b8:10::b")},
|
|
},
|
|
{
|
|
Name: "c.root-servers.net.",
|
|
IPv4: []net.IP{net.ParseIP("192.33.4.12")},
|
|
IPv6: []net.IP{net.ParseIP("2001:500:2::c")},
|
|
},
|
|
{
|
|
Name: "d.root-servers.net.",
|
|
IPv4: []net.IP{net.ParseIP("199.7.91.13")},
|
|
IPv6: []net.IP{net.ParseIP("2001:500:2d::d")},
|
|
},
|
|
{
|
|
Name: "e.root-servers.net.",
|
|
IPv4: []net.IP{net.ParseIP("192.203.230.10")},
|
|
IPv6: []net.IP{net.ParseIP("2001:500:a8::e")},
|
|
},
|
|
{
|
|
Name: "f.root-servers.net.",
|
|
IPv4: []net.IP{net.ParseIP("192.5.5.241")},
|
|
IPv6: []net.IP{net.ParseIP("2001:500:2f::f")},
|
|
},
|
|
{
|
|
Name: "g.root-servers.net.",
|
|
IPv4: []net.IP{net.ParseIP("192.112.36.4")},
|
|
IPv6: []net.IP{net.ParseIP("2001:500:12::d0d")},
|
|
},
|
|
{
|
|
Name: "h.root-servers.net.",
|
|
IPv4: []net.IP{net.ParseIP("198.97.190.53")},
|
|
IPv6: []net.IP{net.ParseIP("2001:500:1::53")},
|
|
},
|
|
{
|
|
Name: "i.root-servers.net.",
|
|
IPv4: []net.IP{net.ParseIP("192.36.148.17")},
|
|
IPv6: []net.IP{net.ParseIP("2001:7fe::53")},
|
|
},
|
|
{
|
|
Name: "j.root-servers.net.",
|
|
IPv4: []net.IP{net.ParseIP("192.58.128.30")},
|
|
IPv6: []net.IP{net.ParseIP("2001:503:c27::2:30")},
|
|
},
|
|
{
|
|
Name: "k.root-servers.net.",
|
|
IPv4: []net.IP{net.ParseIP("193.0.14.129")},
|
|
IPv6: []net.IP{net.ParseIP("2001:7fd::1")},
|
|
},
|
|
{
|
|
Name: "l.root-servers.net.",
|
|
IPv4: []net.IP{net.ParseIP("199.7.83.42")},
|
|
IPv6: []net.IP{net.ParseIP("2001:500:9f::42")},
|
|
},
|
|
{
|
|
Name: "m.root-servers.net.",
|
|
IPv4: []net.IP{net.ParseIP("202.12.27.33")},
|
|
IPv6: []net.IP{net.ParseIP("2001:dc3::35")},
|
|
},
|
|
}
|