我们在 App Store 上有一款 iOS 应用。2016 年 6 月 1 日之后要提交新版本,我们必须支持“仅 IPv6 网络”,根据此链接。
我们提到Apple 的文档,将一台 Mac Mini 升级到 El Capitan 并将其设置为 NAT64 热点。这台 Mac Mini 使用以太网连接到互联网,并将其互联网连接共享给 Wi-Fi。
要使用我们的产品,用户必须安装我们的 iOS App 和 Mac App,并将它们放入同一个网络(就像在 IPv4 世界中 iPhone192.168.0.1
和 Mac 都开机一样192.168.0.2
)。这两个应用程序需要访问互联网,在这个环境中运行没有任何问题。
iPhone--(Wi-Fi)--\
--Mac mini--(ethernet)--Router----Internet
Mac-----(Wi-Fi)--/
问题是我们的 iOS 应用程序(在 iPhone 上运行,充当 TCP 客户端)无法在此 IPv6/NAT64 环境中访问我们的 Mac 应用程序(在本例中在 Mac Book Pro 上运行,充当 TCP 服务器)。
经过一些测试,我们认为问题出在 Apple NAT64 方面,因为在 iPhone 上我们甚至无法 ping 通 Mac(我们尝试使用另一台 MacBook Air 替换 iPhone,结果相同)。奇怪的是有时(通常发生在我们连续 ping Mac 一段时间后)它可以工作。一旦它工作了,它就一直有效。但如果 iPhone 和 Mac 只是连接到 NAT64,它似乎无法像往常一样工作。有人遇到过这种情况吗?这是 Apple NAT64 错误吗?还是只是配置问题?我该如何让它正常工作?
更多信息供您参考:
ifconfig
在运行 NAT64 的 Mac mini 上:
en1: flags=8b63<UP,BROADCAST,SMART,RUNNING,PROMISC,ALLMULTI,SIMPLEX,MULTICAST> mtu 1500
ether 6c:40:08:c0:a7:9e
inet6 fe80::6e40:8ff:fec0:a79e%en1 prefixlen 64 scopeid 0x5
inet 169.254.156.123 netmask 0xffff0000 broadcast 169.254.255.255
nd6 options=1<PERFORMNUD>
media: autoselect
status: active
bridge100: flags=8a63<UP,BROADCAST,SMART,RUNNING,ALLMULTI,SIMPLEX,MULTICAST> mtu 1500
options=3<RXCSUM,TXCSUM>
ether ae:87:a3:21:fb:64
inet6 2001:2:0:aab1::1 prefixlen 64
inet6 fe80::ac87:a3ff:fe21:fb64%bridge100 prefixlen 64 scopeid 0xb
inet6 2001:2::aab1:ac87:a3ff:fe21:fb64 prefixlen 64 autoconf
inet6 2001:2::aab1:30d2:e0e9:360c:2bb3 prefixlen 64 deprecated autoconf temporary
inet6 2001:2::aab1:2d34:d3ae:a433:b6c8 prefixlen 64 deprecated autoconf temporary
inet6 2001:2::aab1:d0a1:a2e5:5a20:3105 prefixlen 64 autoconf temporary
Configuration:
id 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0
maxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200
root id 0:0:0:0:0:0 priority 0 ifcost 0 port 0
ipfilter disabled flags 0x2
member: en1 flags=3<LEARNING,DISCOVER>
ifmaxaddr 0 port 5 priority 0 path cost 0
nd6 options=1<PERFORMNUD>
media: autoselect
status: active
MacBook Pro 上的 ifconfig 充当 TCP 服务器:
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether 78:31:c1:d5:cd:6a
inet6 fe80::7a31:c1ff:fed5:cd6a%en0 prefixlen 64 scopeid 0x4
inet6 2001:2::aab1:7a31:c1ff:fed5:cd6a prefixlen 64 autoconf
inet6 2001:2::aab1:fc82:1afd:d541:33cb prefixlen 64 autoconf temporary
inet 169.254.25.56 netmask 0xffff0000 broadcast 169.254.255.255
nd6 options=1<PERFORMNUD>
media: autoselect
status: active
登录 iPhone 后会显示 IP 地址:
name = en0, addr = fe80::14f8:dd59:a2e9:8f65, scope_id = 3
name = en0, addr = 2001:2::aab1:10d8:247a:a7b9:3c8d, scope_id = 0
name = en0, addr = 2001:2::aab1:2560:58b7:2b6c:ce8b, scope_id = 0
name = en0, addr = 169.254.228.221