Clear WAN or Internet health indicator on the status overview page

Have you ever had a problem with your internet

Loaded up router.lan, and not immediately known whether internet was up or down ?

For now the way to determine if internet is working or not is to scroll down to the IPv4 Upstream section

Look at the address field and, if there is an address IP assigned then you internet might be working

I think there should be at the top of the page, a clear color-coded indicator of internet status, quality and current transfer speed.

It should say something unamibguous like "Internet connection working correctly", in green and "Internet connection is not working correctly" in red. That should be the minimum viable version of this.

After this, it would be nice to display, current latency 5 minute min/avg/max and current transfer speed 5 minute min/avg/max, maybe a ICMP error message counter and/or TCP retransmission rate and/or dropped packets. And if feeling fancy, a nice little histograph of the last hour with a line for latency and a line for bandwidth usage.

There is software called pingplotter that does this.
For just 60$USD it will traceroute up to two addresses every second, display on screen the latency of each hop in a candle chart and the total network latency in an histograph

Here is what it looks like for inspiration

  • How is this determined, without phoning home to some 3rd server?
  • What if the 3rd server id down/unreachable :wink:
  • How about those who have to setup their connection first?

That's not very a very effective way to determine. In fact, there's no need to login to your router.

Wow, $60!

OpenWrt can do it for free. Fancy candle charts are on you.

Cool idea!

(But it really seems like some gimmick the OEMs put into their firmware to facilitate phoning home.)

To me it also seems like a feature which is hard to implement and unsuitable to be enabled by default.

You would need an active ping or HTTP probing background process which 99% of the time is just producing traffic for nothing since nobody is looking at the router ui when it is working. We also can’t probe a 3rd party server due to privacy and ToS implications. We can’t probe openwrt.org due to privacy concerns and prohibitive infrastructure costs for a rather fringe feature.

Thousands of OpenWrt installations continuously sending dummy traffic to a specific host would essentially amount to a DDoS.

2 Likes

Would your suggestion here be a compromise that could be used for the purpose of what this feature request asks for?

That thread asks for failover to another WAN connection when the link is down. Seems like two similar problems?

Forget everything I said other than answer "Does internet work good ?" for the user

I see many easy ways to make this happen.

First and easiest, ping the ISP's dns server.
At basic you only need one valid ping reply from the dns server to confirm you're at least connected to your ISP.

If the WAN port doesn't have an IP address, the internet is down
If the default DNS server doesn't respond either to one ping or one DNS request, the internet is down

Attempt to ping of one these, stop at the first reply
8.8.8.8 (Google Public DNS)
8.8.4.4 (Google Public DNS)
1.1.1.1 (Cloudflare Public DNS)
9.9.9.9 (Quad9 Public DNS)
Not one reply means, internet is down

The first time the internet works, run a traceroute to one of the above address
Save IP address of the first hop, that is now a reference IP address for internet testing

If the reference IP address doesn't respond to a single ping out of 5 requests, the internet is down.

None of this has to run until the user logs in to the interface.

When you log in, it should run the test once and clearly write ""Internet OK" in green if the internet is working and "Internet BAD" in red if it isn't

That feature should be disabled by default, but it should be one click from the status overview page to enable.

There should be a "do the test again, now" button, next to the is-internet-working indicator

Not all DNS servers repond to ping. Wastes resources (and people e.g. yourself like to hard-code devices to ping them- which is bad practice).

This doesn't confirm Internet.

And that requires new code?

Can you explain why you want OpenWrt to code IPs that don't belong to them (that's horrible practice - there's been lawsuits over such things before)?

  • ISP could use a mesh core...your first hop could be a set of routers.
  • Access to hop 1 doesnt confirm Internet

Some devices already have resource issues at logon.

Perhaps this could be an additional app.

Then use a DNS request in lieu of a ping, any response of any kind will confirm the internet is functional. If you don't want to hard code addresses, well the ISP's DNS obtained from the dhcp client will do.

Yes ? And ?

If you get a ping back or a DNS request back from your ISP's dns server, then you know at least the WAN port works, which is a pretty good indicator of "internet works" but sure you can have separate indicators for "WAN UP" and "Internet UP" as that could point user in the right direction to solve their issue if they learn that WAN is UP but not the internet.

Ability to determine "does the internet work" for an internet router, should be a core feature.
Anything to increase the probability the internet will work, soon and easily for the users.

I would even go further to say, it should answer both "Does IPv4 internet work" and "Does IPv6 internet work"

The minutia of how exactly this works, how many bytes of memory it will take and how many flashes of light it's going to send down the fiber shouldn't be stopping openwrt from being the best router it can be.

Sorry, I surmised you intended to contribute.

My bad.

(I surmised volunteers made it better - i.e. you.)

If you have no intention, i.e. just stating a preference, you may also consider writing the code and contribute it, as you did in the mockups you have.

(Also it was noted before and by someone else, a lot of your requests are effectively DDoSes.)

All I need is for the status overview page to call this script

/opt/isinternetworking/bin/isinternetworking

And to then display the html it gets back in the right place.

And it will be a green rectangle that says "Internet UP" or a red rectangle that says "Internet DOWN"

I'll figure out the matter of a internet connected device determining if the internet is connected on my own in that script

For a simple up or down, could monitor the counters on the wan interface briefly to see if packets are being received. This could be done on the status page visit perhaps. Not sure the feasibility.

1 Like

That's really cool!

Be sure to share your results/script!

Instead you could use a “Dead man’s switch” notification service such as Healthchecks (free) which only requires a line to be added to cron.

Ideal if you have a phone that automatically switches to cellular data when there is no wan connectivity on the local Wi-Fi, or you can get vanilla SMS which won’t require data at all.

1 Like

All I really need is, how to inject html code output from the stdout of a command so it will display in the status overview page

For the script, I think a good starting point is,

0 Check for bidirectional traffic on WAN port -> if there is Internet is probably UP ? (only it's just talking to another router between here and ISP)
1 check WAN interface if it at least one ip address -> or else internet down
2 check if WAN has default gateway -> or else internet down
3 Ping default gateway, stop at first reply -> no reply, internet down
4 check if a DNS server is defined anywhere, attempt to resolve openwrt.org, -> if no response at all internet probably down, host not found, then maybe (and find a way to flush DNS server cache, maybe query a randomnly generated GUID.openwrt.org like 29482fcf-c8bc-4b6b-a2f7-d015a57f2dd8.openwrt.org)

There has to be a way to obtain large list of random valid addresses

I suspect ICANN has a big list of IP address blocks somewhere, download that list, ping random addresses, the first reply means -> Internet is UP

I would also read number of bytes in both direction since the last check, then add up and display current bandwidth usage. And maybe there's a way to look for TCP tx to ack latency plus number of errors and dropped packets and use that to display internet health in terms of latency and error rates

This issue makes me think of:

For your script I think it's worth checking to see if there are any scripts with similar functionality out there. There is this, for example:

1 Like

I see that people mention privacy and DDoS concerns here. Still, the feature is important, e.g. because at least one partial duplicate exists (which is mine).

I think that, for the purpose of indicating WAN connectivity status on the status overview page, we can still do something privacy-respecting and network-friendly. Namely, for network friendliness, only do the check on load of the status overview page. For privacy, do some passive tests first, and don't send any traffic if they yield a definite result whether internet works. E.g., check the IP address existence, check whether the byte counters of both received and sent traffic increase, if you want something fancy - check that the sequence numbers in the incoming TCP traffic increase. That is, use the existing traffic in the network as a probe. Only if that fails, send a DNS request for something that cannot be used as a tracker, e.g. for ipv4only.arpa (see RFC8880 what it is for) - this way we'll blend with various DNS64 translators, e.g. those found on Android.

There is also a tool, https://github.com/pollere/pping, that can estimate latency by observing existing connections.

1 Like

Did you have a look at
luci-mod-dashboard

how is it done here?
See:
image

1 Like

It is not what the request is about. luci-mod-dashboard just shows whether the interface is up, not whether it really works.

1 Like

Yeah, i know, there are a lot of wishes in the original post.
There are also a lot of monitoring tools already implemented/provided by OpenWrt. luci-app-statistics eg. with it its even possible to execute your own script ...
...
Just save a bookmark to http://router.lan/cgi-bin/luci/admin/statistics/graphs to get your info on the first glance.

I don't want/need a "clear" indication on the default status page, with all bells and whistles which may takes forever to load/uses a lot of resources.

1 Like

Correction:

https://openwrt.lan

:rofl: :joy: yeah good catch

1 Like