We have an iOS App on App Store. To submit a new version after Jun 1st, 2016, we have to support an “IPv6-only network” according to this link.
We referred to Apple's documentation, upgraded a Mac Mini to El Capitan and set it to a NAT64 hotspot. This Mac Mini uses Ethernet to connect to Internet, and shared its Internet connection to Wi-Fi.
To use our product, user has to install both our iOS App and Mac App, and put them into the same network (something like iPhone is on 192.168.0.1
and Mac is on 192.168.0.2
in IPv4 world). These two Apps need to access internet, which is working without any problem in this environment.
iPhone--(Wi-Fi)--\
--Mac mini--(ethernet)--Router----Internet
Mac-----(Wi-Fi)--/
The problem is our iOS App (running on iPhone, acting as a TCP client) can’t access our Mac App (running on a Mac Book Pro in this case, acting as a TCP server) in this IPv6/NAT64 environment.
After some testing, we believe the problem is on the Apple NAT64 side, because on the iPhone we can’t even ping the Mac (we tried use another MacBook Air to replace the iPhone, same result). The weird thing is sometimes (normally happened after we keep pinging Mac for a while) it works. And once it works, it always works. But if the iPhone and Mac just connected to the NAT64, it seems not working as always. Did anyone ever face to situation like this? Is it a Apple NAT64 bug? or just a configuration issue? How can I make it work?
ifconfig
on Mac mini which has a NAT64 running on:
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
ifconfig on MacBook Pro which acts as TCP server:
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
Logs on iPhone that shows the IP addesses:
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
User contributions licensed under CC BY-SA 3.0