Persistent "Connected, no Internet" on Android device

I'm trying to set up OpenWRT for the first time on a new Linksys WRT3200ACM.
It's mostly going well. I've got the default configuration with two wireless access points (2.4ghz and 5ghz) and the ethernet ports in the "lan" zone, created a new "guest" zone on the 2.4ghz radio (following https://openwrt.org/docs/guide-user/network/wifi/guestwifi/configuration)

The problem is that my Android device (a OnePlus 5T running LineageOS 15) is stubbornly giving "Connected, No Internet" on both of the two "lan" wifi access points. It works properly on the "guest" wifi network.

I guess Android on the phone is unable to reach "connectivitycheck.gstatic.com". The connection appears fine in the OpenWRT logs that I can see - it authenticates, and gets an IP address. I can see the phone is connected. I used tcpdump and in Wireshark I see it's also successfully having DNS lookups resolved. However I don't see any other responses to outgoing messages from the phone when on the affected networks, the phone just sends retries which are ignored.

  • Other devices (an Ubuntu laptop and Denon hifi) are working without problems on the lan wifi ports and Ethernet
  • A new android tablet has connected apparently fine (but I haven't run it as long)
  • The affected phone spent some hours successfully connected after I set it up yesterday, then started to fail (after I set up the guest network?)
  • I rebooted the Linksys, and it worked again for a few hours
  • Then the problem suddenly recurred while I was using it. Again both wifi lan networks were affected simultaneously, and not the guest network.
  • Now rebooting the phone and the Linksys haven't helped.

Could it be a firewall issue? Or something to do with the wifi drivers in the WRT3200AC? I'm not sure how to proceed.

One way to find out would be to add a new access point with stock firmware. You can use any spare wifi router and make it a dumb AP.
If the issue occurs even through the AP, it's likely a firewall issue, else probably wifi drive level issue in WRT3200AC.

uci show network; uci show firewall; uci show dhcp
ip a; ip r; ip ru; ip -6 r; ip -6 ru
head -n -0 /etc/resolv.* /tmp/resolv.*
.

Can you post one of the requests that are unreplied to?

.

untested.... something for the toolkit anyway....

echo "192.168.1.1 connectivitycheck.gstatic.com" >> /etc/hosts

#opkg install uhttpd-mod-lua

#add to /etc/config/uhttpd without hash
#list lua_prefix '/generate_204=/www/cgi-bin/204.lua'

cat <<==end >> /www/cgi-bin/204.lua
function handle_request(env)
        uhttpd.send("Status: 204 (No Content)\r\n")
	    uhttpd.send("Content-Type: text/plain\r\n\r\n")
        uhttpd.send("\r\n")
end
==end

/etc/init.d/uhttpd restart
head -n -0 /etc/resolv.* /tmp/resolv.*

https://pastebin.com/CVHytKB0

uci show dhcp:
https://pastebin.com/SzkcaGA5

uci show network:
https://pastebin.com/qGA34LxD

uci show firewall:
https://pastebin.com/DJPgrTy7

Can you tell me what you're looking for in the ip commands? (Really appreciate the help but want to avoid posting identifying data accidentally.)

Hey, that seems to have fixed it! Thanks for your help!

uci -q delete network.lan.dns
uci -q delete network.guest.dns
uci -q delete network.wan.peerdns
uci -q delete network.wan6.peerdns
uci commit network
service network reload

Why is it bridged?

Diagnostics: address space conflicts, routing collisions.
No worries, nobody needs your data, it's worthless.

Did this:

uci -q delete network.lan.dns
uci -q delete network.guest.dns
uci set network.wan.peerdns="0"
uci set network.wan6.peerdns="0"
uci commit network
service network reload

but no change in behaviour.

network.wan.type='bridge'

I don't know why this is bridged! I don't remember setting it up like that intentionally. I used the 18.06 factory install and then went through these:

If I use curl -v http://connectivitycheck.gstatic.com/generate_204 from termux on the phone, it works when i'm on the guest AP but not on the lan AP. (Though on the lan AP, I can see that it is still getting DNS names resolved correctly so some communication is happening.)

I have a second Android device now (cyanogenmod 13). It's connected successfully. So the problem is specific to the one phone at the moment, and it took a few hours to show up on that.

1 Like
uci -q delete network.wan.type
uci commit network
service network restart

Tried, but no change - working devices still connect OK, the problematic device is still problematic.
Thanks for all the suggestions!
Is there any way to gather more debug logs to see what might be different between the way openwrt responds to this phone vs the working ones?

Ah - the problematic phone gets IP 192.168.0.116 on both guest and lan. It works on guest, not on lan. I see in my notes from last night that when it worked, it had IP 192.168.1.117.

root@OpenWrt:~# ip r
default via XX.XX.XX.XX dev eth1.2  src XX.XX.XX.XX
XX.XX.XX.0/22 dev eth1.2 scope link  src XX.XX.XX.XX 
192.168.0.0/16 dev br-guest scope link  src 192.168.3.1 
192.168.1.0/24 dev br-lan scope link  src 192.168.1.1 

Is the DHCP giving the phone an address in the 192.168.0.X range on lan, when it should be 192.168.1.X? I'll look into that.

uci set network.guest.netmask="255.255.255.0"
uci commit network
service network restart
2 Likes

Hey, that seems to have fixed it! Thanks for your help!

1 Like

This topic was automatically closed 10 days after the last reply. New replies are no longer allowed.