diff --git a/commafeed-server/src/main/java/com/commafeed/backend/HttpClientFactory.java b/commafeed-server/src/main/java/com/commafeed/backend/HttpClientFactory.java index eb05776b..cc4ab24a 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/HttpClientFactory.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/HttpClientFactory.java @@ -56,6 +56,8 @@ public class HttpClientFactory { private static final DnsResolver DNS_RESOLVER = SystemDefaultDnsResolver.INSTANCE; private static final IPAddress CGNAT_RANGE = new IPAddressString("100.64.0.0/10").getAddress(); + private static final IPAddress NAT64_LOCAL_USE_RANGE = + new IPAddressString("64:ff9b:1::/48").getAddress(); private final CommaFeedConfiguration config; private final CommaFeedVersion version; @@ -149,7 +151,11 @@ public class HttpClientFactory { } private static boolean isLocalAddress(IPAddress ip) { - if (ip.isLocal() || ip.isLoopback() || ip.isMulticast() || CGNAT_RANGE.contains(ip)) { + if (ip.isLocal() + || ip.isLoopback() + || ip.isMulticast() + || CGNAT_RANGE.contains(ip) + || NAT64_LOCAL_USE_RANGE.contains(ip)) { return true; } diff --git a/commafeed-server/src/test/java/com/commafeed/backend/HttpGetterTest.java b/commafeed-server/src/test/java/com/commafeed/backend/HttpGetterTest.java index d75736e6..487fda71 100644 --- a/commafeed-server/src/test/java/com/commafeed/backend/HttpGetterTest.java +++ b/commafeed-server/src/test/java/com/commafeed/backend/HttpGetterTest.java @@ -561,6 +561,17 @@ class HttpGetterTest { () -> getter.get("http://[64:ff9b::a00:1]")); // 10.0.0.1 } + @Test + void nat64LocalUse() { + // 64:ff9b:1::/48 is reserved for local use (RFC 8215), the whole range is blocked + Assertions.assertThrows( + UnknownHostException.class, + () -> getter.get("http://[64:ff9b:1::a9fe:a9fe]")); // 169.254.169.254 + Assertions.assertThrows( + UnknownHostException.class, + () -> getter.get("http://[64:ff9b:1:ffff::a00:1]")); // 10.0.0.1 + } + @Test void sixToFour() { // 2002::/16 embeds the IPv4 address in bits 16-47 (RFC 3056)