Skip to content

Commit 449d27b

Browse files
committed
fix: allow ipv4-mapped ipv6 addresses
Signed-off-by: Steven Kreitzer <[email protected]>
1 parent fe2924b commit 449d27b

File tree

2 files changed

+6
-16
lines changed

2 files changed

+6
-16
lines changed

source/source.go

+5-16
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import (
2121
"context"
2222
"fmt"
2323
"math"
24-
"net"
24+
"net/netip"
2525
"reflect"
2626
"strconv"
2727
"strings"
@@ -255,11 +255,12 @@ func getTargetsFromTargetAnnotation(annotations map[string]string) endpoint.Targ
255255
}
256256

257257
// suitableType returns the DNS resource record type suitable for the target.
258-
// In this case type A for IPs and type CNAME for everything else.
258+
// In this case type A/AAAA for IPs and type CNAME for everything else.
259259
func suitableType(target string) string {
260-
if net.ParseIP(target) != nil && net.ParseIP(target).To4() != nil {
260+
netIP, err := netip.ParseAddr(target)
261+
if err == nil && netIP.Is4() {
261262
return endpoint.RecordTypeA
262-
} else if net.ParseIP(target) != nil && net.ParseIP(target).To16() != nil {
263+
} else if err == nil && netIP.Is6() {
263264
return endpoint.RecordTypeAAAA
264265
}
265266
return endpoint.RecordTypeCNAME
@@ -276,14 +277,8 @@ func endpointsForHostname(hostname string, targets endpoint.Targets, ttl endpoin
276277
for _, t := range targets {
277278
switch suitableType(t) {
278279
case endpoint.RecordTypeA:
279-
if isIPv6String(t) {
280-
continue
281-
}
282280
aTargets = append(aTargets, t)
283281
case endpoint.RecordTypeAAAA:
284-
if !isIPv6String(t) {
285-
continue
286-
}
287282
aaaaTargets = append(aaaaTargets, t)
288283
default:
289284
cnameTargets = append(cnameTargets, t)
@@ -387,9 +382,3 @@ func waitForDynamicCacheSync(ctx context.Context, factory dynamicInformerFactory
387382
}
388383
return nil
389384
}
390-
391-
// isIPv6String returns if ip is IPv6.
392-
func isIPv6String(ip string) bool {
393-
netIP := net.ParseIP(ip)
394-
return netIP != nil && netIP.To4() == nil
395-
}

source/source_test.go

+1
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ func TestSuitableType(t *testing.T) {
8585
}{
8686
{"8.8.8.8", "", "A"},
8787
{"2001:db8::1", "", "AAAA"},
88+
{"::ffff:c0a8:101", "", "AAAA"},
8889
{"foo.example.org", "", "CNAME"},
8990
{"bar.eu-central-1.elb.amazonaws.com", "", "CNAME"},
9091
} {

0 commit comments

Comments
 (0)