mirror of
https://github.com/tailscale/tailscale.git
synced 2025-02-18 02:48:40 +00:00
net/dnscache: Handle 4-in-6 addresses in DNS responses
On Android, the system resolver can return IPv4 addresses as IPv6-mapped addresses (i.e. `::ffff:a.b.c.d`). After the switch to `net/netip` (19008a3), this case is no longer handled and a response like this will be seen as failure to resolve any IPv4 addresses. Handle this case by simply calling `Unmap()` on the returned IPs. Fixes #5698. Signed-off-by: Peter Cai <peter@typeblog.net>
This commit is contained in:
parent
70dde89c34
commit
4597ec1037
@ -276,6 +276,11 @@ func (r *Resolver) lookupIP(host string) (ip, ip6 netip.Addr, allIPs []netip.Add
|
|||||||
return netip.Addr{}, netip.Addr{}, nil, fmt.Errorf("no IPs for %q found", host)
|
return netip.Addr{}, netip.Addr{}, nil, fmt.Errorf("no IPs for %q found", host)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Unmap everything; LookupNetIP can return mapped addresses (see #5698)
|
||||||
|
for i := range ips {
|
||||||
|
ips[i] = ips[i].Unmap()
|
||||||
|
}
|
||||||
|
|
||||||
have4 := false
|
have4 := false
|
||||||
for _, ipa := range ips {
|
for _, ipa := range ips {
|
||||||
if ipa.Is4() {
|
if ipa.Is4() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user