[GUIDE] OpenVPN Reconnect-Script | Daily restart with location change! | Server Roulette | Client to stay allways-on | Luci vpn nano ssh linux

24 hours Restart Script + Cronjob with every minute connection check

Hi,
with this Cronjob + myScript + myOpenvpn commands (from the ovpn-file other topic link below) you can use your VPN-Connection from your VPN-Provider all the time and change the location automatically how often you like!

It’s very simple: your router will check if the connection is lost and reconnect automatically if there is no connection with the ovpn-file. Some VPN-Provider don’t allow a permanent connection over 24 hours, therefor this cronjob can handle this job.
-> Plus optional: cronjob router reconnect/restart at manual times, if you want to do this too, for whatever reason.

Below you find two scripts in the next post: A script for listening and restart to stay the day only (so therefore no ovpn-file change needed) and a script for setting a time to make a manual restart ( if you don’t want to use this cronjob) -> Both sripts won’t work with my turris, maybe there is a mistake and you find it :wink:

Let’s start:

  1. If you are a new vpn-user, you can check my tutorial how to connect to your vpn provider with ovpn-file: HowToOpenVPNClient

  2. Login in Luci and than go to: System->Software and search for nano and install it

  3. Go into Terminal (Linux) and write:

ssh root@192.168.1.1

->hit enter and use your forris/luci passwort

  1. Write this and hit enter:
nano /usr/bin/vpn_reconnect
  1. Copy/Paste this script:
#!/bin/sh

# Check vpn-tunnel "tun0" and ping cz.nic if internet connection work
if  [ "$(ping -I tun0 -q -c 1 -W 1 193.17.47.1 | grep '100% packet loss' )" != "" ]; then
        logger -t VPN_Reconnect VPN-Tunnel "tun0" has got no internet connectionection -> restart it
        /etc/init.d/openvpn stop
        sleep 3
        /etc/init.d/openvpn start
else
        logger -t VPN_Reconnect VPN-Tunnel "tun0" is working with internet connection
fi

and then do Strg + o than Enter than Strg + x

Then:

chmod +x /usr/bin/vpn_reconnect
  1. To set up a cronjob, use this first in terminal:
crontab -e
  1. Write this code in it (Check every minute for vpn-connection)
*/1 * * * * /usr/bin/vpn_reconnect
  1. Optional: Add this code for manual restart (My Example: Restart of vpn everyday at 3:30am)
30 3 * * * /etc/init.d/openvpn stop ; /etc/init.d/openvpn start
  1. If you want you can add a second line to restart your router 1 time in the year :wink: Or more often, do what you want!
* * 1 1 * sleep 70 && touch /etc/banner && reboot
  • You can set your times by yourself, here you see the timetable:
*     *     *   *    *        command to be executed
-     -     -   -    -
|     |     |   |    |
|     |     |   |    +----- day of week (0 - 6) (Sunday=0)
|     |     |   +------- month (1 - 12)
|     |     +--------- day of        month (1 - 31)
|     +----------- hour (0 - 23)
+------------- min (0 - 59)
  1. A few other commands, which may or may not be necessary to ensure that cron was running:
/etc/init.d/cron start

/etc/init.d/cron enable

/etc/init.d/cron restart
  1. You can actually interact with cron through the web panel as well and check if the settings are saved > System > Scheduled tasks and check if the script is working in the system log: Status->System Log

  2. With “Remote-Random” at stop & start of openvpn your router will choose a random remote server from your ovpn-file like you can see here: HowToOpenVPNClient

-> With this two tutorials now your connection should be stable all the time and with location change and router restart like you want it. If not, check the post below! Don’t forget to enable openvpn on router restart and only allow vpn internet access like in the other script!

Have fun :smiley:

Reconnect-Script for staying online every time! Based on GL.iNet Routers

If you don’t want to use a cronjob or the cronjob isn’t working with your vpn-provider, you can use that script to let your router listening and reconnect if necessary.
-> You can use the ovpn-file from the provider without tweaking (tweaking is recommended with this script too), your router will check if the connection is lost and reconnect automatically if there is no connection.

Let’s start:

  1. If you are a new vpn-user, you can check my tutorial how to connect to your vpn provider with ovpn-file: HowToOpenVPNClient

  2. Login in Luci and than go to: System->Software and search for nano and install it

  3. Go into Terminal (Linux) and write:

ssh root@192.168.1.1

->hit enter and use your forris/luci passwort

  1. Write this and hit enter:
nano /usr/bin/vpn_reconnect

Copy/Paste this script and change for your VPN-Connection:
“PublicVPN_Fr_Paris” in the script is the Name of my created VPN
(in Luci->Services->OpenVPN and the name of your created VPN you sould change in the script below)

#!/bin/sh

#wait for the openvpn to connect for the first time
sleep 120

while [ true ]; do

#check if openvpn is enabled, if not, go to next loop
vpn_enabled=$(uci get /etc/config/openvpn.PublicVPN_Fr_Paris.enabled)
if [ "$vpn_enabled" != "1" ]; then
	echo "VPN not enabled, check 20 seconds later"
	sleep 20
	continue
fi

vpn_pid=$(pidof openvpn)
tun0_ifname=$(ifconfig tun0)

if [ -z "$tun0_ifname" ] && [ -z "$vpn_pid" ]; then
	echo "VPN enabled but not running, restarting it"
    /etc/init.d/openvpn restart
else
	echo "VPN is connected and connecting, check 20 seconds later"
fi

sleep 20

done

and then do Strg + o than Enter than Strg + x

Then:

chmod +x /usr/bin/vpn_reconnect

Then open the rc.local file:

nano /etc/rc.local

Add this to the end of the file just before exit:

/usr/bin/vpn_reconnect &

Do again Strg + o, Enter, Strg + x to save and quit again.

The script should run on boot now :slight_smile:

Script with manual time to set how often the connection will be checked

This script should: a) keeps the connection up (restarts it) and b) at no point allows non-VPN traffic through IF that’s how you’ve set things up. Also you can set the time by yourself how often there will be a connnection check

  1. Login in Luci and than go to: System->Software and search for nano and install it

  2. Go into Terminal (Linux) and write:

ssh root@192.168.1.1

->hit enter and use your forris/luci passwort

  1. Write this and hit enter:
nano /usr/bin/vpn_restart

Copy/Paste this script and edit this lines:
“PublicVPN_Fr_Paris” in the script is the Name of my created VPN
(in Luci->Services->OpenVPN and the name of your created VPN you sould change in the script below)


#!/bin/sh

# Should openvpn already be in operation? If not, nothing to do, exit.
enabled=$(uci get /etc/config/openvpn.PublicVPN_Fr_Paris.enabled)
vpn_client=$(uci get /etc/config/network.VPN)    # removed when startvpn stopped explicitly

if [ "$enabled" != "1" ] || [ "$vpn_client" != "interface" ]; then
exit 0
fi

# First hop should be to the internal VPN gateway (10.8.8.1) if VPN up.
# If we're going through VPN then all is well, do nothing.
first_hop=$(traceroute 8.8.8.8 2>&1 | head -2 | tail -1 | awk '{print $2}')

if [ "$first_hop" == "10.8.8.1" ]; then
logger -t VPN_restart VPN is fine.
exit 0
fi

killall openvpn 2>/dev/null
ovpn=$(uci get /etc/config/openvpn.PublicVPN_Fr_Paris.enabled)
/usr/sbin/openvpn "$ovpn" &
(sleep 1; /etc/init.d/network reload) &

logger -t VPN_restart VPN was down and had to be restarted.

-> Hit “enter” and write ":wq

  1. To set up a cronjob, write:
crontab -e

and entered:

*/5 * * * * /usr/bin/vpn_restart

which is the name and location of my script.

  1. A few other commands, which may or may not be necessary, to ensure that cron was running:
/etc/init.d/cron start

/etc/init.d/cron enable

/etc/init.d/cron restart

PS:
You can actually interact with cron through the web panel as well: Advanced settings > System > Scheduled tasks.

As for the “-t” option, it just adds a “tag” to the log so that logs reference the tag as opposed to user.root or whatever the default is. (There is a main page out there but I can’t find it right now!)

Links:











https://forum.dd-wrt.com/phpBB2/viewtopic.php?p=1010529
https://oldwiki.archive.openwrt.org/doc/howto/cron
https://www.linuxquestions.org/questions/linux-networking-3/script-to-check-connection-and-restart-network-if-down-262281/
https://doc.turris.cz/doc/en/howto/openvpn
https://www.nic.cz/odvr/

You can use this settings i think for all OpenWRT-Router :slight_smile: Only change few settings!

1 Like

Optional for privacy -> Change Hostname

You can change the hostname in luci->network->interface->wan edit
and status->system

Link: