mirror of
https://github.com/tailscale/tailscale.git
synced 2025-03-27 19:43:01 +00:00
ipn/ipnlocal: add MagicDNS records for IPv6-only nodes
Updates #2268 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
parent
90b0cd0c51
commit
7fe6ecf165
@ -68,15 +68,20 @@ func TestDNSConfigForNetmap(t *testing.T) {
|
|||||||
Name: "b.net",
|
Name: "b.net",
|
||||||
Addresses: ipps("100.102.0.1", "100.102.0.2", "fe75::2"),
|
Addresses: ipps("100.102.0.1", "100.102.0.2", "fe75::2"),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
Name: "v6-only.net",
|
||||||
|
Addresses: ipps("fe75::3"), // no IPv4, so we don't ignore IPv6
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
prefs: &ipn.Prefs{},
|
prefs: &ipn.Prefs{},
|
||||||
want: &dns.Config{
|
want: &dns.Config{
|
||||||
Routes: map[dnsname.FQDN][]dnstype.Resolver{},
|
Routes: map[dnsname.FQDN][]dnstype.Resolver{},
|
||||||
Hosts: map[dnsname.FQDN][]netaddr.IP{
|
Hosts: map[dnsname.FQDN][]netaddr.IP{
|
||||||
"b.net.": ips("100.102.0.1", "100.102.0.2"),
|
"b.net.": ips("100.102.0.1", "100.102.0.2"),
|
||||||
"myname.net.": ips("100.101.101.101"),
|
"myname.net.": ips("100.101.101.101"),
|
||||||
"peera.net.": ips("100.102.0.1", "100.102.0.2"),
|
"peera.net.": ips("100.102.0.1", "100.102.0.2"),
|
||||||
|
"v6-only.net.": ips("fe75::3"),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -1798,6 +1798,7 @@ func dnsConfigForNetmap(nm *netmap.NetworkMap, prefs *ipn.Prefs, logf logger.Log
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return // TODO: propagate error?
|
return // TODO: propagate error?
|
||||||
}
|
}
|
||||||
|
have4 := tsaddr.PrefixesContainsFunc(addrs, func(p netaddr.IPPrefix) bool { return p.IP().Is4() })
|
||||||
var ips []netaddr.IP
|
var ips []netaddr.IP
|
||||||
for _, addr := range addrs {
|
for _, addr := range addrs {
|
||||||
// Remove IPv6 addresses for now, as we don't
|
// Remove IPv6 addresses for now, as we don't
|
||||||
@ -1807,7 +1808,7 @@ func dnsConfigForNetmap(nm *netmap.NetworkMap, prefs *ipn.Prefs, logf logger.Log
|
|||||||
// https://github.com/tailscale/tailscale/issues/1152
|
// https://github.com/tailscale/tailscale/issues/1152
|
||||||
// tracks adding the right capability reporting to
|
// tracks adding the right capability reporting to
|
||||||
// enable AAAA in MagicDNS.
|
// enable AAAA in MagicDNS.
|
||||||
if addr.IP().Is6() {
|
if addr.IP().Is6() && have4 {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
ips = append(ips, addr.IP())
|
ips = append(ips, addr.IP())
|
||||||
|
@ -164,3 +164,24 @@ func NewContainsIPFunc(addrs []netaddr.IPPrefix) func(ip netaddr.IP) bool {
|
|||||||
}
|
}
|
||||||
return func(ip netaddr.IP) bool { return m[ip] }
|
return func(ip netaddr.IP) bool { return m[ip] }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PrefixesContainsFunc reports whether f is true for any IPPrefix in
|
||||||
|
// ipp.
|
||||||
|
func PrefixesContainsFunc(ipp []netaddr.IPPrefix, f func(netaddr.IPPrefix) bool) bool {
|
||||||
|
for _, v := range ipp {
|
||||||
|
if f(v) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// IPsContainsFunc reports whether f is true for any IP in ips.
|
||||||
|
func IPsContainsFunc(ips []netaddr.IP, f func(netaddr.IP) bool) bool {
|
||||||
|
for _, v := range ips {
|
||||||
|
if f(v) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user