为 IPv6 兼容性配置服务器(用于被拒绝的 iOS 应用程序使用的 API)
Posted
技术标签:
【中文标题】为 IPv6 兼容性配置服务器(用于被拒绝的 iOS 应用程序使用的 API)【英文标题】:Configure server for IPv6 compatibility (for API used by rejected iOS app) 【发布时间】:2016-12-22 10:40:39 【问题描述】:我意识到已经有很多用户提出了有关 Stack Overflow 的问题,他们的 ios 应用程序被 Apple 拒绝,因为它们不能在纯 IPv6 网络上运行。
我已经检查了我的代码,以确保没有硬编码的 IP 地址(绝对没有),也没有使用旧的可达性(根本没有)或其他低级网络框架(我们只使用 NSURLSession)。我已经在我的机器上通过了 NAT64 测试网络,并且该应用程序(似乎)运行良好。
这是一个 Xamarin 应用程序,通过 HTTPS(并且没有其他网络连接)与 API 进行通信。
我找到的一些答案表明该问题的解决方案需要对服务器进行配置更改。
所以我的问题很笼统,需要进行哪些配置更改?更具体地说,您是否需要域中的 AAAA 记录?如果有,应该如何配置?
我更多是作为软件开发人员来解决这个问题的,因此没有详细了解 IPv6 的工作原理以及需要进行哪些服务器更改。
【问题讨论】:
根据我有限的知识,您需要在域上的 AAAA DNS 记录,将其映射到您的 API 服务器的 IPv6 地址。如果没有 AAAA 记录,则会下降到 A 记录或 CNAME 记录,它们都有一个 IPv4 地址。 如果你的服务器只支持 IPv4,它会起作用。 【参考方案1】:您的服务器不需要更改。 NAT64 应该负责仅 IPv4 服务器的转换,而 DNS64 应该确保您获得正确的主机名地址。因此,当使用主机名而不是硬编码地址并且您使用 IP 版本中性 API 时,它通常应该可以正常工作。
当人们试图更符合 Apple 的政策并在他们的 DNS 区域中放置一些虚假/虚假/错误的 AAAA 记录时,可能会失败。这些实际上会阻止 DNS64 生成正确的记录,因为它认为服务器具有真正的 IPv6 并且不需要翻译服务。
MacOS 中内置的 DNS64 没有“真正的”IPv6 连接到互联网,并且会忽略这些糟糕的 AAAA 记录,但真正的 DNS64 不会。因此,在这种情况下,您的本地测试似乎可以工作,但 Apple 会看到它失败。
我构建了一个测试工具,您可以使用它来检查具有真实 DNS64 和 NAT64 服务的网站https://nat64check.org/。随意使用。
虽然这不是强制性的,但如果您希望您的 Web 服务具有最佳可访问性,那么建议您实际使您的服务器可通过 IPv6 访问并提供 AAAA 记录。这将使您的服务独立于 NAT64 和 DNS64 翻译服务,从而提高可靠性和性能。它还将改善其他拥有 IPv6 的用户的情况,因为它允许他们绕过 ISP 需要部署的技巧来弥补 IPv4 地址的不足(如 CGN、DS-Lite 等)。
它还可以防止 DNSSEC 出现问题:NAT64 需要生成“假” AAAA 需要使服务在 IPv6 上运行,而 DNSSEC 旨在防止任何人对 DNS 记录撒谎。如果您提供真实的 AAAA 记录,则 NAT64 不需要撒谎,DNSSEC 不会受到影响。
总结:最好的办法是让您的服务器可通过 IPv6 访问,并在 DNS 中使用 AAAA 记录发布其地址。这将使每个人受益。但不要发布虚假的 AAAA 记录(例如以::ffff:
、2001:db8:
、64:ff9b:
、fc
或fd
开头的记录)。这些将伤害拥有 IPv6 的每个人,如今这些人的数量相当多。当您通过 IPv6 提供服务时,请将其视为生产服务并正确处理。
【讨论】:
哇,感谢您提供的超级全面的答案,证实了我一直在阅读的内容(仍然不确定为什么我的 iOS 应用被拒绝,但仍然很有帮助)以上是关于为 IPv6 兼容性配置服务器(用于被拒绝的 iOS 应用程序使用的 API)的主要内容,如果未能解决你的问题,请参考以下文章
所需的 iPv6 兼容性 - 被 Apple iOS 应用程序拒绝