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

24 hours Restart Cronjob

Hi,
with this cronjob + my openvpn 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 and some VPN-Provider don’t allow a permanent connection, therefor this cronjob below do a vpn restart every 24 hours that will give you the option to change the location too;)
-> Plus optional: cronjob router restart, if you want to do this too, for whatever reason.

Below you find two scripts. 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)

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. Go into Terminal (Linux) and write:

ssh root@192.168.1.1

->hit enter and use your forris/luci passwort

  1. To set up a cronjob, use this first:
crontab -e
  1. Write this code in it (Restart of vpn everyday at 3:30am)
30 3 * * * /etc/init.d/openvpn stop ; /etc/init.d/openvpn start

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.

  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
How to run reboot command in openwrt only once at a particular time using crontab?
https://oldwiki.archive.openwrt.org/doc/howto/cron

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

1 Like