为 IPv6 兼容性配置服务器(用于被拒绝的 iOS 应用程序使用的 API)
Configure server for IPv6 compatibility (for API used by rejected iOS app)
我意识到 Stack Overflow 上已经有很多用户的问题,他们的 iOS 应用程序被 Apple 拒绝,因为它们不能在纯 IPv6 网络上运行。
我已经检查了我的代码以确保没有硬编码的 IP 地址(肯定是 none)并且没有使用旧的可达性(none)或其他低级网络框架(我们只使用 NSURLSession)。我已经在我的机器上通过了 NAT64 测试网络,应用程序(似乎)运行良好。
这是一个 Xamarin 应用,通过 HTTPS(没有其他网络连接)与 API 通信。
我找到的一些答案表明解决此问题需要更改服务器配置。
所以我的问题很笼统,需要更改哪些配置?更具体地说,您是否需要域上的 AAAA 记录?如果可以,应该如何配置?
我更多是作为软件开发人员来解决这个问题的,所以没有详细了解 IPv6 的工作原理以及需要进行哪些服务器更改。
您的服务器应该不需要更改。 NAT64 应该负责 IPv4-only 服务器的转换,而 DNS64 应该确保您获得主机名的正确地址。因此,当使用主机名而不是硬编码地址并且您使用 IP 版本中立的 API 时,它通常应该可以正常工作。
它可能会失败的一种情况是,当人们试图更符合 Apple 的政策并在他们的 DNS 区域中放置一些 dummy/fake/wrong AAAA 记录时。这些实际上会阻止 DNS64 生成正确的记录,因为它认为服务器具有真正的 IPv6 并且不需要转换服务。
MacOS 内置的 DNS64 没有 "real" IPv6 互联网连接,因此会忽略此类错误的 AAAA 记录,但真正的 DNS64 不会。所以在这种情况下,您的本地测试似乎可以正常工作,但 Apple 会发现它失败了。
我构建了一个测试工具,您可以使用它来检查 https://nat64check.org/ 上具有真实 DNS64 和 NAT64 服务的网站。放心使用吧。
虽然这不是强制性的,但如果您希望您的 Web 服务具有最佳可达性,那么建议您使用 ity 实际使您的服务器可通过 IPv6 访问并提供 AAAA 记录。这将使您的服务独立于 NAT64 和 DNS64 转换服务,从而提高可靠性和性能。它还将改善其他拥有 IPv6 的用户的情况,因为它允许他们绕过 ISP 目前需要部署的技巧来弥补 IPv4 地址的不足(如 CGN、DS-Lite 等)。
它还可以防止 DNSSEC 出现问题:NAT64 需要生成 "fake"AAAA 需要使服务在 IPv6 上运行,而 DNSSEC 旨在防止任何人对 DNS 记录撒谎。如果您提供真实的 AAAA 记录,那么 NAT64 就不需要撒谎,DNSSEC 也不会受到影响。
总而言之:最好的办法是让您的服务器可以通过 IPv6 访问,并在具有 AAAA 记录的 DNS 中发布其地址。这将使每个人受益。但不要发布虚假的 AAAA 记录(例如以 ::ffff:
、2001:db8:
、64:ff9b:
、fc
或 fd
开头的记录)。这些会伤害所有拥有 IPv6 的人,而现在有相当多的人。当您通过 IPv6 提供您的服务时,将其视为生产服务并正确执行。
我意识到 Stack Overflow 上已经有很多用户的问题,他们的 iOS 应用程序被 Apple 拒绝,因为它们不能在纯 IPv6 网络上运行。
我已经检查了我的代码以确保没有硬编码的 IP 地址(肯定是 none)并且没有使用旧的可达性(none)或其他低级网络框架(我们只使用 NSURLSession)。我已经在我的机器上通过了 NAT64 测试网络,应用程序(似乎)运行良好。
这是一个 Xamarin 应用,通过 HTTPS(没有其他网络连接)与 API 通信。
我找到的一些答案表明解决此问题需要更改服务器配置。
所以我的问题很笼统,需要更改哪些配置?更具体地说,您是否需要域上的 AAAA 记录?如果可以,应该如何配置?
我更多是作为软件开发人员来解决这个问题的,所以没有详细了解 IPv6 的工作原理以及需要进行哪些服务器更改。
您的服务器应该不需要更改。 NAT64 应该负责 IPv4-only 服务器的转换,而 DNS64 应该确保您获得主机名的正确地址。因此,当使用主机名而不是硬编码地址并且您使用 IP 版本中立的 API 时,它通常应该可以正常工作。
它可能会失败的一种情况是,当人们试图更符合 Apple 的政策并在他们的 DNS 区域中放置一些 dummy/fake/wrong AAAA 记录时。这些实际上会阻止 DNS64 生成正确的记录,因为它认为服务器具有真正的 IPv6 并且不需要转换服务。
MacOS 内置的 DNS64 没有 "real" IPv6 互联网连接,因此会忽略此类错误的 AAAA 记录,但真正的 DNS64 不会。所以在这种情况下,您的本地测试似乎可以正常工作,但 Apple 会发现它失败了。
我构建了一个测试工具,您可以使用它来检查 https://nat64check.org/ 上具有真实 DNS64 和 NAT64 服务的网站。放心使用吧。
虽然这不是强制性的,但如果您希望您的 Web 服务具有最佳可达性,那么建议您使用 ity 实际使您的服务器可通过 IPv6 访问并提供 AAAA 记录。这将使您的服务独立于 NAT64 和 DNS64 转换服务,从而提高可靠性和性能。它还将改善其他拥有 IPv6 的用户的情况,因为它允许他们绕过 ISP 目前需要部署的技巧来弥补 IPv4 地址的不足(如 CGN、DS-Lite 等)。
它还可以防止 DNSSEC 出现问题:NAT64 需要生成 "fake"AAAA 需要使服务在 IPv6 上运行,而 DNSSEC 旨在防止任何人对 DNS 记录撒谎。如果您提供真实的 AAAA 记录,那么 NAT64 就不需要撒谎,DNSSEC 也不会受到影响。
总而言之:最好的办法是让您的服务器可以通过 IPv6 访问,并在具有 AAAA 记录的 DNS 中发布其地址。这将使每个人受益。但不要发布虚假的 AAAA 记录(例如以 ::ffff:
、2001:db8:
、64:ff9b:
、fc
或 fd
开头的记录)。这些会伤害所有拥有 IPv6 的人,而现在有相当多的人。当您通过 IPv6 提供您的服务时,将其视为生产服务并正确执行。