v1.8.3 - (January 17, 2026) - PATCH: The Recovery Timeout should be defaulting to 1x, but it was inadvertently set to 3x. Thank you to @Tarek Yag for reporting this. Fixed! - PATCH: Changed the wording for the custom PING host to "Custom PING host for connectivity checks" to bring more clarity that it wasn't just for VPN checks, but WAN and WG as well. Thanks to @scootertramp for reporting. - PATCH: Changed the date/time to include the offset alongside the timezone. This is to give more visibility for those who aren't assigned a standard timezone name, and in some cases would fall back to using "GMT". Thanks to @Tarek Yag for reporting this, and for @EmeraldDeer providing a deep dive into the date command options. - PATCH: Fixed some hardcoded instances where the recovery timeouts were set to 3, instead of using user-selected values. - PATCH: Fixed some instances where PINGHOST was hardcoded to 8.8.8.8, instead of using user-selected values. - PATCH: Recovery timeouts (if configured) will apply to the WAN as well. Should the WAN have issues establishing an SSL connection with the user-selected PINGHOST, it will attempt to try the number of times that is user-specified. - PATCH: Cut down all VPN/WG connection and reset times by half. Will continue to monitor closely for misbehavior. Done in response to @scootertramp noting the long time it takes to reconnect all VPN/WG connections after a WAN DOWN event. - PATCH: Removed the functionality that would reset the Rx/Tx indicators to [UNKN] each time you went into a different menu item. It will now just show live stats no matter what. For consistent and more accurate results, wait your full 60 seconds (or whatever you've set your timer value to). - PATCH: Added Config Menu option #16: "WAN Recovery, Down, Reconnect Timers", giving you more control over the amount of time the various stages of dealing with a WAN DOWN situation, from the amount of time your WAN can try to recover on its own, to how long between checking to see if the WAN has become available again, to the amount of time given to let the router recover after the WAN has come back up again before reconnecting all tunnels. - PATCH: Improved the tracking of the timer, plus any time spent in other menus outside of the regular timer, to provide a more accurate view of the Tx/Rx stats. - PATCH: Based on some feedback that @ComputerSteve was experiencing, I've optimized both the VPN and WG connectivity tests to fail the curl test if the ping test fails. It seems the ping test will fail pretty quickly, while the curl test could hang in there for quite some time before indicating a fail. This should help resolve some of the sluggishness you would see if any of your tunnels are misbehaving. - PATCH: Built in the capability to now use redundant Pinghosts under the configuration menu, using option #2 "Custom Ping Hosts for Connectivity Checks". By default, Pinghost 1 uses 8.8.8.8 and Pinghost 2 uses 1.1.1.1. Pinging these hosts through the VPN/WG tunnel is used to determine if the tunnel is healthy. This now also provides some redundancy, should Pinghost 1 not respond, but Pinghost 2 does, then the tunnel will not get reset, and should help with those dealing with more frequent resets. v1.8.2 - (November 23, 2025) - PATCH: Thanks to @JTnola for sharing a "[: bad number" bug he was experiencing. This hard-to-find bug only seemed to come up in certain scenarios when using the limited 2-OVPN slot configuration. Variables weren't being assigned that the script was expecting, causing these errors. Fixed! :) v1.8.1 - (November 16, 2025) - PATCH: After dealing with several long periods of internet outages on my end, I decided to give a bit more visibility to the WAN DOWN screens, showing it retrying every 60sec/300sec depending on what component is down. It now shows seconds along with a busy indicator so you know where you are in the process. - PATCH: In rare situations, the calculations for the throughput figures would yield numbers < 0. Added some more logic to check for this in order to display "[UNKN]" in those cases. v1.8.0 - (October 30, 2025) - MINOR: Added more visibility to the main UI, and included both TX and RX stats for each connection. Please know, these stats are basically the average connection speed across the length of the timer. They may not be entirely 100% accurate, and are a close rounded approximation of the speeds encountered during this period of time. At the moment, the RX ranges for Green = 0 - 100Mbps, Yellow = 100 - 250Mbps, Red = > 250Mbps. Config menu item #14 allows you to modify these values based on your own personal preferences and bandwidth. Separation between RX and TX thresholds has been added for those with asymmetrical internet connections, with thanks to @Stephen Harrington for the push in that direction! TX range defaults for Green = 0 - 15Mbps, Yellow = 15 - 25Mbps, Red = > 25Mbps. - MINOR: Significantly changed the Slot (M)onitoring screen, and have now added the capability of resetting individual slot connection times. This might be useful for those running WG considering that after a router reboot, the WG connections will complete before VPNMON-R3 is started up, so it has no idea that the tunnels were reset. I might get fancy down the road and look at router uptime as well, but for now, this will suffice. Thanks to @CaptainSTX for coming up with this great idea! - MINOR: Based on a good suggestion from @CaptainSTX, I have now added the capability of measuring total throughput. These values are expressed in total MB sent and received per timer cycle. A brand new menu item #15 has been added to give you the choice between Average Throughput in Mbps, or Total Throughput in MB. - PATCH: Fixed a few small inconsistencies across the script. - PATCH: Renamed "Connection Speed" to "Connection Throughput" to help clarify the purpose of the new RX/TX measurement information while in setup item #14. Thanks @CaptainSTX for the suggestion! - PATCH: Fixed the "Bad Number:%" error. Thanks to @scootertramp for reporting that! - PATCH: Fixed a bug that was preventing the connected time from getting reset back to 0 when a VPN/WG connections was being reset. v1.7.0 - (September 20, 2025) - MINOR: Added the ability to choose between a Random or Sequential way to pick the next server off your custom Server Lists. Statistically, there's a higher chance of the script randomly picking the same server on smaller server lists compared to ones numbered in the thousands. This way, for those with smaller lists, you can sequentially step through your list in a round-robin fashion. Once it reaches the end of your custom Server List, it will start back from the beginning. This option is now available in the (C)onfiguration menu -> (1) Custom options -> (13) Server List Item Selection Method. - PATCH: Added more visibility to the WARNING log item that complains about invalid PING information received, and will now show which VPN/WG slot made the complaint. Thanks much for the suggestion, @scootertramp! v1.6.4 - (September 14, 2025) - PATCH: Bug fix around the Recovery Timeout Opportunities(tm) functionality. In certain situations, like if you're running multiple Wireguard connections, the timer would keep resetting itself as each loop checked for a valid connection, and would never reset a slot that was experiencing issues with its connectivity. Also, if you set a custom timer value other than 3, that value was not being saved. This has now been fixed, tested, and functioning as advertised. v1.6.3 - (September 1, 2025) - PATCH: As discovered by @Ventola, Windscribe HAD to be different, and issues a different Interface IP for each of their server connections. This has now forced another required WG Server List field, as I could see other providers using similar tactics down the road. These are now the required fields in a comma delimited row: ConnectionName,InterfaceIP/Sub,EndpointIP,EndpointPort,PrivateKey, PublicKey, PreSharedKey(Opt) -- Example: City WG,10.50.0.2/32,143.32.55.23,34334,fasdkaffkasdjfj=, 221t949as2323kf=,23fj39fffjdaf= **PLEASE NOTE**: for Wireguard users using server list automation, this update will require you to add this InterfaceIP/Sub information to your current WG Server Lists. Not doing so will break the ability for VPNMON-R3 to insert the correct information into your WG slots. Sorry for the extra work. Hopefully this will be the last time we need any updates to this format. v1.6.2 - (August 24, 2025) - PATCH: Apologies for the successive bug fix patches, but found another one stemming from an Unbound variable that was not being reset, and causing the [UB] indicator to show up on slots that weren't designated as Unbound slots. v1.6.1 - (August 23, 2025) - PATCH: Small bug fix to prevent "Invalid WG PING Information" log errors from coming through even if WG functionality was not enabled. Thanks much to @scootertramp for reporting this issue! v1.6.0 - (August 21, 2025) - MINOR: Very happy to announce that "Unbound-over-Wireguard" has actually become a reality! With huge help and guidance from @ZebMcKayhan, a methodology was developed that is easier, simpler and much more elegant than it's Unbound-over-VPN twin. In essence, VPNMON-R3 creates a new virtual br0 interface, ties that to the WG client of your choice, and assigns that virtual br0 IP as the designated outgoing interface. Should the Wireguard client happen to go down or stop, Unbound will continue to resolve DNS directly over the WAN. - PATCH: Based on a recommendation from @JGrana, the RL (Email Rate Limiting) indicators will no longer show up on the main UI (or in the config display) when AMTM email functionality is turned off. - PATCH: Thanks to the keen eye of @ZebMcKayhan, important failsafe's for Unbound were not yet being addressed. This version adds those failsafes. If you're coming from Beta 1, please make sure you (1) update your script to Beta 2, (2) Disable Unbound over WG, (3) Re-enable Unbound over WG. This process will then write the appropriate commands to your init-start and nat-start files. - PATCH: Implemented Recovery Timeout Opportunities, they're kind of like second chances to allow your connection to recover before issuing a restart. By default, connections will restart after your timer loop finishes (default: 60 sec). The Recovery Timeout would extend the number of loops before it would issue a reset, and hopefully within that time, would recover the connection on its own. For example, your timer loop = 60 seconds. Your Recovery Timeout is set to 3x. This would mean if your connection doesn't recover in 3 minutes, then it will issue a reset. This option might help bring down the amount of times your connection resets throughout the day, but then there's also a greater chance your connection might become unusable for a slightly longer amount of time. This was inspired by @CaptainSTX! Thank you! - PATCH: Added the router uptime value under the WAN monitoring section, some visual enhancements to the main UI, and providing content values in the logs when you get "invalid ping response received" messages, showing exactly what it was coming back with. - PATCH: Added compatibility for AirVPN WG, which not only requires a Public Key, a Private Key, but also a Preshared Key. A 6th field is now an optional requirement for AirVPN or vpn providers like them who require this field. Both the Update/Maintain WG server lists and Run Server List Automation screens have updated language, while code in charge of resetting the WG connection will insert this Preshared Key into the appropriate NVRAM value for the WGC slot. v1.5.0 - (August 3, 2025) - MINOR: Well, actually kinda major. Wireguard is now formally being supported! VPNMON-R3 will show all 5 Wireguard slots for more modern routers. Those who can only physically support 2 VPN slots will unfortunately not be able to enjoy Wireguard at the moment. Major functionality for stopping/starting WG slots are visible under the (S)how Operations menu. As Wireguard is a bit more complex than an OVPN connection, there are some more items needed than a single IP address for those who are managing server lists for their individual slots. Each server list will require 5 fields, separated by a comma, namely: (1) Connection Name, (2) Endpoint IP, (3) Endpoint Port, (4) Private Key, and (5) Public Key. Examples of these are shared on snbforums.com. - PATCH: Fixed the "FAILOVER" message and corrected spacing thanks to @Stephen Harrington - PATCH: Thanks to the huge contributions from @iTyPsIDg, not only has he figured out some automation methods to pull WG info via API from NordVPN, but he added the entire framework for the custom WG server list automation menu, along with multiple WG email events that were missing. I ended up combining both the VPN and his WG server automation screens into one single pane of glass to reduce complexity. - PATCH: Instead of displaying the WG Endpoint IP on screen, it is now resolving the actual Public IP, as reported by @CaptainSTX. Thanks! - PATCH: Added site2site ping workaround as discussed by @ZebMcKayhan that adds an ingenious ip rule to the vpndirector. Thanks for the corroboration by @SomeWhereOverTheRainBow on this! - PATCH: Based on feedback from @ZebMcKayhan, added this site2site ping workaround to other items that were causing lookup delays, such as the public IP and WG city resolution. - PATCH: Fixed the numbering for the WG slots to reflect 6-0 to provide standardization across the script when referring to the use of these slots. Thanks to @CaptainSTX! - PATCH: Fixed the Skynet import logic and some of the on screen/log language to reflect "WG" terms instead of "VPN". - PATCH: Fixed the WG Client Slot Server List Maintenance page to accurately display the first value (Connection Description) in a comma-separated list. - PATCH: Clarified the "Number of Available OVPN/WG Client Slots" menu item under the config, to bring more understanding that (2) is strictly for older routers who can only have a max of 2 OVPN client slots at any given time, but also don't have any native WG capability without the help of 3rd party scripts. The (5) option provides capabilities for 5 x OVPN and 5 x WG client slots, as available on most (if not all) newer routers running the later versions of the Merlin FW. - PATCH: Added another option (#7) under the configuration menu that allows you to enable/disable the monitoring and view of either OVPN or WG slots on the main UI screen. This was inspired by none other than @Stephen Harrington, who does not want his screen cluttered up with slots that are not being used, and I can completely understand! Caveat: If you have tied unbound to one of your OVPN slots, you will not be able to disable the OVPN slot view and will be forced to monitor those slots. - PATCH: After noticing some stuck processes around WG, some fixes went into place to help protect other 'nvram get' commands from getting stuck. - PATCH: Added the necessary code to include WG in the "WAN down" scenario as well, where it kills all VPN/WG connections while the WAN is down, so your router isn't wasting time trying to reconnect to your provider during situations like this. - PATCH: Appended the Unbound resolver IP to the Unbound Resolver indicator, in order to give better insight why the indicator might turn from yellow, to green, to yellow, to red, etc. over the course of time. Thanks to @New2This for the inspiration! :) - PATCH: Minor fixes and adding some more dev/nulls around certain commands to keep occasional messages from popping up in the main UI. - PATCH: Implemented a formal email rate limiter function that controls a user-configurable allowed number of emails to be sent per hour. This option is configured under AMTM Email Not(i)fications, and allows you to choose a number between 1 and 9999, with 0 having this function disabled. When email events fire off, you will see a system message on the bottom of your screen indicating how many emails have been sent thusfar this past hour, and whether any rate limiting is in effect. An indicator is displayed when the Operations Menu is displayed on the very top-right. RL (red) = disabled, and RL:/h shows the number of emails allowed per hour. - PATCH: Decided to make the expanded Unbound DNS Resolver IP a configurable option under the config menu to help save on screen realestate. Disabling (default) will just show an abbreviated color-coded indicator, while Enabling will show the full DNS Resolver IP. @New2This v1.4.1 - (June 29, 2025) - MINOR: Added the capability of optionally integrating with spdMerlin, and having it refresh it's list of interfaces whenever VPNMON-R3 resets. This will allow spdMerlin to know which VPN interfaces are active for the purposes of running manual or automated speed tests. This option is available under the config as option #9 to enable/disable. Thanks to @iTyPsIDg for the suggestion! - PATCH: Fixed the behavior of custom server lists that get updated through curl/API queries on a daily basis. There have been several times when either the VPN service API goes down, or the VPN service itself makes a major change on their end and stops supporting API calls altogether. (Yes, I'm looking at you Proton VPN!) When this happens, VPNMON-R3 runs its normal query, getting 0 results, and happily saves this 0 results file as your current list of available VPN servers to choose from, causing all kinds of mayhem. VPNMON-R3 will now recognize that the list is pooched, and will preserve the old good list filled with still perfectly fine VPN server IPs. This will now also generate log entries and will send you warning emails indicating which slot is causing the issue. v1.3.10 - (January 1, 2025) - PATCH: Changed around some of the spacing of the [n/a] fields, and made them right-justified. For looks! - PATCH: Fixed some of the UI inconsistencies on the VPN Client Slot Server Automation screen. v1.3.8 - (November 28, 2024) - PATCH: Fixed printf() call statement syntax. (Thank you @Martinski!) - PATCH: Modified minimum value allowed for timer loop to 5 seconds. (Thank you @Martinski!) - PATCH: Modified code to avoid redisplaying the top "Options Menu" unnecessarily too often and resetting the timer loop due to repeatedly fast key presses. (Thank you @Martinski!) - PATCH: Minor code improvements. (Thank you @Martinski!) v1.3.7 - (October 20, 2024) - PATCH: Modified code to handle scenarios where getting the "city exit" value returns an empty/NULL string. (Thank you @Martinski!) - PATCH: Modified code to ignore invalid key presses within the main loop. (Thank you @Martinski!) - PATCH: Added code to prevent updating the timer prematurely within the main loop due to repeatedly fast key presses. (Thank you @Martinski!) - PATCH: Modified code to get elapsed time percentage values with 1 decimal place (e.g. 0.5%). This allows displaying non-integer values for percentages of the elapsed time. (Thank you @Martinski!) - PATCH: More minor coding improvements & fine-tuning. (Thank you @Martinski!) - PATCH: Fixed the Y/N prompts so they now require you to hit after typing either y or n. This changes its behavior from automatically moving on and possibly causing issues from people also using the enter key accidentally. (Thank you @Martinski!) v1.3.6 - (October 12, 2024) - PATCH: After selecting menu option 1 ("Number of VPN Client Slots available"), if the user simply pressed the key without entering any new value, the currently selected value was reset to "1 2 3 4 5" regardless of the current setting. (Thank you @Martinski!) - PATCH: After selecting menu option 2 ("Custom PING host to determine VPN health"), if the user simply pressed the key without entering any new value, the currently selected value was set to empty/NULL regardless of the current setting. (Thank you @Martinski!) - PATCH: When selecting menu option 2 ("Custom PING host to determine VPN health"), any user input was accepted for the IP address because there was no IPv4 address format validation. (Thank you @Martinski!) - PATCH: After selecting menu option 3 ("Custom Event Log size (rows)"), if the user simply pressed the key without entering any new value, the currently selected value was reset to "2000" regardless of the current setting. In addition, the error message "[: 0: unknown operand" was generated. (Thank you @Martinski!) - PATCH: After selecting menu option 5 ("Refresh Custom Server Lists on -RESET Switch"), if the user simply pressed the key without entering any new value, the currently selected value was reset to "Enabled" regardless of the current setting. In addition, the error message "[: 0: unknown operand" was generated. (Thank you @Martinski!) - PATCH: After selecting menu option 6 ("Provide additional WAN/Dual WAN monitoring"), if the user simply pressed the key without entering any new value, the currently selected value was reset to "Enabled" regardless of the current setting. In addition, the error message "[: 0: unknown operand" was generated. (Thank you @Martinski!) - PATCH: After selecting menu option 7 ("Whitelist VPN Server IP Lists in Skynet"), if the user simply pressed the key without entering any new value, the currently selected value was reset to "Disabled" regardless of the current setting. In addition, the error message "[: 0: unknown operand" was generated. (Thank you @Martinski!) - PATCH: Added user input validation for Cron Job hours & minutes (Thank you @Martinski!) - PATCH: Adjusted display format of the number of servers to avoid left-padding with zeros while still maintaining table alignment. (Thank you @Martinski!) - PATCH: Adjusted display format of ping values to avoid left-padding with zeros while still maintaining table alignment. (Thank you @Martinski!) - PATCH: Adjusted display format of IPv4 addresses to avoid left-padding with zeros while still maintaining table alignment. (Thank you @Martinski!) - PATCH: Various other coding improvements & fine-tuning. (Thank you @Martinski!) v1.3.5 - (May 11, 2024) - PATCH: Small bugfix after looking into issues with the vr3timers.txt file. Seems that there was a variable and a function both named the same thing, which could cause an issue down the road, and made sure these were formally separated into their own entities from this point forward. - PATCH: When the script has detected an issue with the WAN, and falls back into its waiting loop, I seem to have mistakenly put in an email notification during this time. I thought it was helpful. Guess not, because it doesn't work when the internet is down, and just throws errors, so I've removed this particular email notification. ;) v1.3.3 - (April 2, 2024) - PATCH: Fixed a small issue that was present in BACKUPMON and also affected VPNMON-R3 where it was creating success/failure emails in the /tmp/var/tmp folder and was not deleting these tmp email files if you opted not to receive success or failure emails. Thanks to the keen eye of @ExtremeFiretop watching his precious disk space slowly but surely getting eaten up with unsent emails that weren't deleting, this has now been patched! Also, huge props to him for testing out the fix in record time! - PATCH: Made some small eye-candy improvements to incorporate a little splash-screen effect when running "vpnmon-r3 -setup", or when hitting the (e)xit key... just to keep the OG logo around a little longer. ;) v1.3.1 - (March 16, 2024) - MINOR: AMTM Email Notification capabilities have been added thanks to @Martinski's shared email functions library that he has made available. Once AMTM email (AMTM->em) has been configured, you can activate this feature in VPNMON-R3. You have the ability to distinguish between receiving either success, failures or both types of emails as it pertains to your WAN/VPN connectivity. An operations menu item has also been added to quickly enable/disable this feature when needed. - PATCH: Minor logic correction to a function that determined max server ping would every so often run into issues with the info it got back from the ping command, and would display invalid operand errors. v1.2.3 - (March 8, 2024) - PATCH: Change to the logic for switching back and forth between the number of available slots. Will now recreate the vr3timers.txt and vr3clients.txt, as they were not being refreshed when different selections were being made. General fixes and optimizations made as being found and identified. - PATCH: Added verbiage in the Unbound integration configuration menu item to give a visual warning that as of Mar 1 2024, the NordVPN service no longer works with the Unbound integration due to some apparent blocking on their end. Hopefully at some point in the future, we can remove this and carry on with Nord. v1.2.1 - (February 23, 2024) - MINOR: Added a new configuration menu item that allows you to enable/disable the ability to import your VPN Server IP lists directly into the Skynet Firewall for whitelisting purposes. This is another feature coming over from VPNMON-R2, as there have been instances in the past where the Skynet blacklist would prevent a connection to a perfectly legitimate VPN Server that belongs to your VPN provider. This function will fire off each time you execute a VPN Server List automation under option (U), and will also run each time a "vpnmon-r3 -reset" command is executed. Please note: Skynet must already have been installed (using AMTM) and working/functional. - PATCH: The update logic now pulls the vpnmon-r3.sh directly from github starting from versions after 1.2.1, instead of the vpnmon-r3-X.Y.Z.sh file based on the version number from the version.txt file. v1.1.5 - (February 7, 2024) - PATCH: Changed the versioning logic to align with the general accepted way of versioning, using the notation: major.minor.patch ... finally, right? After seeing @thelonelycoder changing his ways, I figured it was probably time for me as well. All my scripts moving forward will go this route. Change log wording is now changed to conform to the major/minor/patch standards. So previously, FIXED now conforms to PATCH, ADDED conforms to MINOR, and MAJOR stays the same! - PATCH: Found a situation where if someone was still using older VPN Slot allocations (like "1 2 3") and didn't update to the newer "1 2" or "1 2 3 4 5" slot allocations, then it would prevent the operations menu from showing, since it is geared towards either one of these two options. VPNMON now has some logic added that will force a "1 2 3" configuration to "1 2", and will require you to select which slots need to be monitored. Thanks to @TITAN for finding this one and working with me on the diagnosis! :) - PATCH: Minor spacing and verbiage changes to make the experience more consistent. v1.12 - (February 2, 2024) - ADDED: Another feature request coming over from R2 -- Reset VPN if ping across tunnel is > than X ms. Configurable from the Operations Menu, using hotkey "P", you are able to change this value. Example Usage: If this setting is set to 100ms, and the ping value for this tunnel exceeds 100ms, then R3 will reset the connection in favor of a new connection with a lower ping value. Settling on a server with a lower ping should help with speed, latency and performance issues. Thanks to @TITAN for the request! - FIXED: Just realized my mistake that certain older models (like the AC68U) actually only have a max of 2 VPN client slots, not 3. Fixed the configs and menus to allow for up to 2 VPN client slots for this particular older router limitation. v1.11 - (January 27, 2024) - ADDED: New commandline switch "-now" to be used in conjunction with "-screen" that will allow you to bypass the screen timer and instructions, and will launch VPNMON-R3 directly into the screen environment without having to wait. (Usage example: vpnmon-r3 -screen -now) Thanks @TITAN for the request. - FIXED: Changed a few legacy items so it conforms with AMTM standards. ;) v1.10 - (January 23, 2024) - MAJOR: VPNMON-R2 sunset notification banner is added if found that R2 is still installed. I have made the difficult decision to sunset R2, and drive adoption of R3 so that I may focus on developing it further. When pressing the (X) key, users will be driven to an R2 uninstall menu, allowing you to uninstall all R2 files and components directly from R3. Similarly, in R2, an update banner will be prominently displayed at all times, driving people to the update menu, to upgrade to R3 directly from within R2. In the near future, new installs of R2 will no longer be possible, and will be driven to install R3. v1.04b6 - (January 21, 2024) - ADDED: Under the Run Automations operations menu item, the ability to import your custom VPN Slot lists into Skynet is now a possibility! In the past, certain blocklists would also prevent you from connecting to certain VPN servers because they were actively being blocked. From this menu, pressing s1-s5 will import the contents directly to Skynet, giving you peace of mind that your VPN server endpoints are whitelisted. - FIXED: The timing on connecting, stopping and settling have been dropped slightly. Also, shaved more time by not spending 10 seconds forcing a service_stop on a connection that has already stopped. Likewise, checking for VPN slots in an error (-1) state, and force stopping these, then forcing an NVRAM state reset on them to change them back to 0 (disconnected). v1.04b5 - (January 19, 2024) - FIXED: WAN checks were still happening even when disabled. Thanks to @salvo! Fixed! v1.04b4 - (January 19, 2024) - ADDED: More checks while determining vpn health, and adding more logic around failed connections, including an indicator showing the number of attempts a certain vpn slot has undergone if it comes back failing the ping and curl tests. - ADDED: Also, timing delays to allow for tunnels to connect, disconnect and settle have been extended. No, your router hasn't slowed down. I'm just making sure processes aren't stepping over each other to give you the most stable monitoring experience. - ADDED: When a VPN connection fails, an intermediate 5 second counter will appear allowing you to (P}ause execution. This allows you to enter the Operations Menu, should you need to make any adjustments. I found that with successive failures, it was nearly impossible to get to the Operations menu in order to exclude a certain slot that was causing issues. - FIXED: When the -reset switch is thrown, VPNMON-R3 will immediately drop to the waiting screen. Thanks to @salvo for noticing! v1.04b2 - (January 13, 2024) - MAJOR: In one of the recent storms that brough down my WAN connection, I quickly found out that VPNMON-R3 does not like that, and caused the script to hang for some unknown reason. Thinking it might be a good idea to break out the WAN monitoring functionality from R2, this has now been incorporated as a selectable option. When enabled, VPNMON-R3 will test the WAN on each cycle, and if determined that the WAN is down, will kill your VPN connections, and fall back into a graceful loop where it periodically tests the WAN connection in order to start the VPN connection(s) back up. As with R2, this will look at both WAN0 and WAN1, and should be able to correctly display the necessary information for those running those fancy Dual-WAN configurations. This has been tested on a single WAN0 connection where I completely powered off the modem, simulating a WAN outage, and bringing back up to ensure R3 was able to recover correctly. - ADDED: Few more log entries for various reset conditions were added. - FIXED: Minor corrections to wording or other on-screen layouts to make the UI more pleasing to the eye. - FIXED: Made some revisions to how variables were used in order to cut down on some Unknown Operand errors that were initially captured by @Ripshod. Thank you! v1.03 - (January 6, 2024) - ADDED: When VPNMON-R3 is executing a scheduled -RESET, the main UI will enter a 'pause' state, giving some feedback that a vpn reset is currently underway, and will retry to resume normal operations every 15 secs. Thanks to @salvo for the suggestion! - ADDED: More checks and stability added to ensuring values returning from the ping functions are valid, and hoping to catch any errors before returning the occasional 'unexpected token' error as found by @salvo. - FIXED: Noticed that the timer loop was actually taking 2x as long to complete... I knew seconds couldn't take that long, and wasn't going crazy afterall. Fixed. v1.01 - (December 24, 2023) - FINAL RELEASE: Merry Christmas! ;) v0.7b - ADDED: Now including the total time a VPN connection has remained connected. This info is displayed on the main UI next to the exit city name. Time is tracked when the VPN drops and reconnects, and will only be displayed for VPN Client Slots that are actively being monitored. - MINOR: Changed the Unbound stat on the main UI in an effort to shorten. This has now been changed from a Red/Yellow/Green "- [SYNC]", to a Red/Yellow/Green "-X[UB]" "-?[UB]" and "->[UB]" giving an indication of the Unbound [UB] sync state. - FIXED: There was an issue with the logic behind the function that allowed you to pick how many seconds you would like the timer to run for. Apparently it's not so easy when asking for alpha and numeric input up to 3 characters. Patched it up. Good to go! Thanks to @pchtz for catching this one! :) v0.6b - ADDED: New menu item under the setup/configuration menu: "Refresh Custom Server Lists on -RESET Switch", with thanks to @salvo for the suggestion. This option will refresh any custom VPN Client Slot Server Lists you have defined, and will refresh these when running a VPNMON-R3 with a -reset command. This is typically done through a CRON job, but can be run manually at any time as well depending on your needs. - FIXED: Various cleanup and inconsistencies as well as spacing here & there... v0.5b - ADDED: Created a new row under the Operations Menu to allow you to quickly stop + unmonitor a VPN Slot. This was added to give you some more control over a VPN Client Slot that might be giving you trouble, or don't want to have to go into the router UI to forcefully stop a VPN Client Slot. Performing this action will also remove it from the monitored list, so it doesn't immediately try to reconnect it. - ADDED: Created a thread with tutorials and examples on how to craft custom CURL+JQ statements in order to query specific city and/or country IP address list from various VPN providers using their APIs. This is thread is available here: https://www.snbforums.com/threads/vpnmon-r3-custom-server-list-generation-tutorials-and-examples.88022/ - FIXED: Added some validation on obtaining the public VPN IP address in case NVRAM could not produce it, and icanhazip.com comes back with an error message. Thanks to @TITAN for bringing this up. - FIXED: General cleanup of inconsistencies that kept bugging me. ;) v0.4b - ADDED: Relented and included a single PING indicator across the VPN tunnel to at least show some stats of what's going on with the connection. Formatted to handle 4 digits and 3 decimals, we should be good for the worse of worsest situations. On the fence of supporting a > amount ping reset condition. - FIXED: Eliminated many script restarts after exiting various menus and allows you to return to the main UI without interference to the VPN city and Unbound Sync lookups. - FIXED: Based on the timezone code length, the main UI bar now fixes its size so it stays a uniform length. v0.3b - ADDED: Brought over the "Unbound-over-VPN" functionality that was originally introduced in VPNMON-R2. Out of all the integrations that were present in VPNMON-R2, I felt that this was one of the most important ones, and one that I wanted to be completely functional in VPNMON-R3 if I am going to be using this full-time. Unbound by default allows you to become your own DNS resolver, however, "Unbound-over-VPN" goes a step further and encrypts your unencrypted DNS resolver traffic all the way through to your public VPN IP address, after which it traverses unencrypted to the DNS Root Servers. This excellent feature prevents your ISP or other monitoring services from snooping in on your otherwise unencrypted DNS resolver traffic that normally happens when running Unbound. Since you are your own encrypted DNS resolver, no ISPs, or other DNS services (like Quad9, Cloudfare or Google, etc) will be able to snoop on your traffic. The only entity here that could possibly snoop on this traffic would be your VPN provider, or any nefarious services monitoring inbound/outbound VPN traffic at the VPN provider level. PLEASE NOTE: "Unbound-over-VPN" is only able to bind to 1 VPN Client Slot. If you are running other VPN connections, this will continue to work, however it is not guaranteed that the other VPN connections will be able to take advantage of Unbound. Definitely something that needs to be tested. Also, if other VPN connections are reset, the VPN Client Slot tied to "Unbound-over-VPN" will go out of sync, and will attempt to reset itself. This connection will always need to be the last one to reset itself, else it will continue to stay out-of-sync. - FIXED: Apparently I overlooked making sure JQuery was being properly referenced as required during the setup process. Thanks to @kuki68ster for noticing this! The script will now catch this and guide you through the Entware component install process. - FIXED: In certain situations, the autostart functionality would not save a setting back to the vpnmon-r3.cfg file, and show that it was enabled. If you have this issue, simply re-save your choice, and it will make the correct changes to the .cfg file now. v0.2b - ADDED: Included "VPN Client Slot Server List Automation" functionality which allows you to free-form enter in various carefully crafted CURL statements which are designed to point to your VPN Provider's API functionality in order to export out a single list of VPN Server IPs/Hostnames to be imported into your VPN Client Slot Server List files assigned to each VPN slot. These lists are used by VPNMON-R3 to randomly reconnect to one of the hosts in the list. A separate thread will be created on SNBForums.com that will give specific examples on how to format the CURL statements in order to pull VPN Server IPs for specific countries, or cities. Please note that not all VPN providers make this easy, or have an API to pull information from. Examples for NordVPN, Surfshark, AirVPN, WeVPN and PerfectPrivacy will be provided. This item is available under the Quick Access Operations Menu using the (U) key. - MINOR: A few visual fixes here and there to standardize look & feel across screens v0.1b - Initial Release!