iPhone roaming with IPv6
In summary - using iPhones and roaming between WiFi access points on a network with IPv6 enabled does not work well! It breaks some times - the phone ends up in a state where it thinks it is connected to an AP but there is no traffic working at all (IPv4 or IPv6). Turning WiFi "off" then "on" on the phone fixes.
This has been reported by people using several different routers (which allocate IPv4 and IPv6 addresses) with ubiquiti APs. We did a lot of testing with ubiquiti to try and find the cause, but to no avail. There was suggestion it could be related to the FireBrick, but as the whole process of AP roaming does not involve the "router" device in any way, with no packets to or from it needed or seen, then it cannot be the "router" that is the cause of any problem. The fact it has been seen by others with other routers left it as either ubiquiti or iPhone.
The good news is that it is looking a lot like ubiquiti are off the hook on this one at last. It pretty much has to be an iPhone bug at this point. IPv6 is still not common enough for this have to been noticed a lot, and of course it is only noticed with routers that do IPv6, such as FireBrick.
Dumbing things down...
Having come to an impasse with ubiquiti I gave up, and got some other APs. I went for cheap(ish) xClaim ones. These are made by Ruckus with is a well known name in APs.
They do what they say on the tin, and are quite usable, and simple to set up (if prepared to use their cloud based config). But they do not do "roaming", you just have to trust the device to switch to a new AP when it wants to. This works 100% but means a gap in connectivity, it is far from seamless.
Stepping things up a bit...
Then I decided to then try some higher end ones, the Aruba APs from Hewlett Packard, another good name. I have some IAP-305(RW) APs. The config is web based, very flexible, controller based logic but one of the APs takes on that role so no separate controller needed. You can have a separate controller for larger installations. 255 associations per AP is a lot, and even 15 SSIDs per radio for fun. Lots of bells and whistles (even 3G/4G dongle fall back, PPPoE, VPN, all sorts).
I set them up, and bam, I got my iPhone playing up yet again in exactly the same way.
The good news is I can tinker and fine tune, and turn on and off specific roaming protocols on a per SSID basis. Turning off 802.11r fixed the roaming issue, which confirms it is the 802.11r that is the issue. I left 802.11k and 802.11v on as they seem to cause no issues. The iPhone does support 802.11k and 802.11v so having these enabled helps roaming anyway.
So sounds like we'll have to wait for iPhone to fix 802.11r support. I am raising on the Aruba support forum as well though in case they can help.