I had to fly recently. The flight had in-flight entertainment through gogoinflight, but I couldn't access it on my phone while everyone around me could. I thought the problem was with the router but I couldn't access the public wifi in the destination airport, either. I couldn't even open the wifi login pages to accept the user agreements. Nothing seemed to work!
Cellular internet works fine. Wifi at home works fine.
On another recent flight, I also took my laptop so I could check network settings against my phone's settings.
# ip addr
yielded the same subnet and same gateway
# ip route
yielded the same routes, too. (from memory)
# ip route 172.19.131.141/23 dev wlan0 proto kernel dhcp scope link src 172.19.131.0
from my laptop, the login page, or airborne.gogoinflight.com was in the 172.19.134.x subnet, but that should be fine based on the route's mask (/23).
for good measure, I added a 0.0.0.0/0 route through wlan0 but still nothing. At this point, it looked like my phone knew how to get at IP addresses, but there was a problem with the DNS settings. I checked DNS settings in /etc/resolv.conf on my laptop:
/etc/resolv.conf -------------------- nameserver 172.19.(something).(something) <--essentially, the access point transmitted the DNS to my laptop correctly and I was able to resolve addresses without problems
on my android phone:
/system/etc/resolv.conf ------------------------ nameserver 22.214.171.124 <--because google and android... nameserver 126.96.36.199 <--because google and android... nameserver 172.19.(something).(something) <--essentially, the access point transmitted the same DNS server to my phone when I connected.
Even though I know it doesn't matter, I removed the WAN dns entries to google for good measure and made the resolv.conf file match my laptop's, but to no avail! I tried multiple browsers (Chrome and Firefox), too, to make sure it wasn't a browser setting.