iOS NAT64 IPv6环境问题

时间:2016-07-08 21:46:18

标签: c++ ios objective-c networking reachability

现在苹果已经将他们的审核环境改为仅支持IPv6的网络,我在测试时遇到了问题。

应用程序要求用户输入其服务器/系统IP地址,端口(4401)和凭据以获取对应用程序的访问权限。按照apple提供的指南,我设置了一个NAT64环境来测试我的应用程序的兼容性。在iphone 5s上运行iOS 9.3.2。

我的工作环境有几个内部网络。我通过以太网将我的iMac连接到内部服务器(10.10.50.XX),以太网也提供给苹果的外部IP。 50网络不在代理后面运行,但有些网站被过滤,但可以通过确认访问。然后,我通过WiFI分享了以太网连接。

我连接了设备,并且已经过滤了相同网页的互联网访问权限。设备被分配了本地链接地址169.254.XX.XX.从我读到的,我的设备正确连接到ipv6网络,因为iPhone没有显示ipv6地址只有本地链接。

如果我正确连接到共享IPv6网络,我遇到的问题是从我的应用程序连接到50网络上的服务器。当我尝试连接到10.10.50.XX网络或外部时,应用程序失败(可理解,因为我的imac在50内部网络上)。

使用IPv4与连接到50网络的无线路由器测试应用程序运行完美。我认为本地链接地址无法看到50网络或其他问题。

以下是关于我如何连接服务器的一些简要背景信息。用户输入他们想要连接的服务器的所有凭据以及IP地址和端口。应用程序将其保存为文本(utf-8),并使用boost shared_ptr将其发送到cpp连接类,该类验证凭据并提供对用户的访问。此cpp连接类处理来自服务器的连接,同步,日志记录,请求和响应。

是否有可能以某种方式使用NAT64互联网共享选项访问50网络?

1 个答案:

答案 0 :(得分:1)

如果您将IP地址直接传递到网络库,那么没有。当您的设备位于NAT64的仅IPv6端时,服务器的IPv4地址无用。

您几乎肯定需要为您尝试联系的服务器提供DNS名称。当服务器仅支持IPv4时,NAT64首先依赖DNS64为您的应用程序创建IPv6地址。这些合成地址包含服务器的IPv4地址,为NAT64提供从IPv6转换为IPv4所需的信息。

更新此添加:正如user102008在此答案附带的评论主题中所建议的那样,您也可以通过getaddrinfo()传递IPv4字符串文字(请参阅code listing 10-1 on this page)。当您在NAT64后面时,合成的IPv6地址应该是该调用返回的结果之一。 NAT64将从此地址转换回IPv4以到达您指定的主机。在这种情况下,如果系统知道要用于NAT64的正确前缀,则不需要主机名。