sudo vi ./root/scripts/vpn_restarter.pl (script)

#!/usr/bin/perl -w

use strict;
use Net::Ping;
use Expect;

# Disable Expect output
$Expect::Log_Stdout = 0;

my $company = “CVS”;
my $sitelist = “/root/scripts/cvs_sites“;
my $timeout = 15;

my ($lanip, $result, $site, $type, $wanip) = “”;
my @sites = “”;

# This sub will ping hosts and send a text message if the host is down
sub ping {
my $ip = shift;
my $host = shift;
my $net = shift;
my $maxtries = 5;       # Total pings
my $count = $maxtries;
my $success = 0;
my $p = Net::Ping->new(“icmp”,2);
if ( $net eq “LAN” ) {
$p->bind(‘10.20.254.254’);
} else {
$p->bind(‘80.74.16.239’);
}
while ( $count > 0 ) {
if ($p->ping($ip)) {
#print “$host – $ip – ping successn”;
$success+=1;
} else {
#print “$host – $ip – ping failedn”;
}
$count–;
}

# Calculate success percentage
my $percent = ((100/$maxtries)*$success);

# If pings are >80% successful host is up
if ( $percent >= 80 ) {
#print “$success/$maxtries pings to $host ($ip) were successfuln”;
return “Success”;
} else {
my $fail = $maxtries – $success;
#print “$fail/$maxtries pings to $host ($ip) failedn”;
return “Fail”;
}
}
print “$company VPN Restartern”;
open(SITES, “< $sitelist”) or die “Unable to open $sitelist”;
@sites = <SITES>;
close(SITES);

foreach (@sites) {
chomp;
($site, $lanip, $wanip) = split(/,/);

print “$site: “;
$result = ping($lanip, $site, “LAN”);
if ( $result eq “Fail” ) {
print “VPN down. “;
$result = ping($wanip, $site, “WAN”);
if ( $result eq “Success” ) {
print “WAN link up, Restarting VPN… “;
system(“/usr/sbin/ipsec auto –replace $site > /dev/null 2>&1”);
sleep 2;

my $exp = new Expect;
$exp->raw_pty(1);
$exp->spawn(“telnet”, $wanip) or die “Unable to spawn telnet: $!n”;

$exp->expect($timeout, “Password: “);
$exp->send(“FireStormn”);

my $regex = ‘Main.*Menu’;
$exp->expect($timeout,
[ “>”,
sub {
my $self = shift;
$self->send(“exitr”);
$type = “nomenu”;
}],
[ “$regex”, sub { my $self = shift; $self->send(“99r”); $type = “menu”; }]);

if ( $type eq “” ) {
$type = “Cisco”;
system(“/usr/sbin/ipsec auto –up $site > /dev/null 2>&1”);
} else {
system(“./zyxel_$type.exp $wanip > /dev/null 2>&1”);
}

print “Donen”;
} else {
print “WAN link downn”;
}
} else {
print “VPN upn”;
}

sudo ./root/scripts/vpn_checker.pl (script)

#!/usr/bin/perl

# vpn_checker.pl
# —–
# Version: 1.2
# Author: Darren Bradley
# Last Edit: 27/08/2008

# Restart IPSEC when Pluto is not running/hung

$piddir = “/var/run/pluto”;
$date = `date +%Y/%m/%d-%H:%M`;

print “n#### $date”.”IPSEC auto-restart scriptn—–n”;

print “Pluto is running…”;
$status = `/usr/sbin/ipsec auto –status 2>&1`;

if ( $status  =~ /^whack:/ ) {
print “NOnRestarting IPSEC…”;
# Stop IPSEC
system( “/etc/init.d/ipsec stop > /dev/null 2>&1” );

# Remove any reference to previous process
system( “rm -f $piddir/*.pid” );

# Start IPSEC
system( “/etc/init.d/ipsec start > /dev/null 2>&1” );
# Allow time for ipsec to initialise
sleep 15;
print “DONEn”;
} else {
print “YESn* No need for restart *n”;
}

print “n”;

$running = `ps aux | grep -v grep | grep vpn_restarter.pl`;

if ( $running ne “” ) {
print “VPN restarter already runningn”;
exit 0;
} else {
print “Running VPN restarter…n”;
system( “/root/scripts/vpn_restarter.pl” );
}

$date = `date +%Y/%m/%d-%H:%M`;
print “DONEn#### $daten”;
~
run script command :
sudo ./root/scripts/vpn_checker.pl

check site vpn status :
sudo less /var/log/vpn.log

edit vpn site list. this file is called for when vpn restarter script above is run :
sudo vi /root/scripts/cvs_sites

file structure of cvs_sites

cvs151,10.20.70.62,85.234.11.151
cvs161,10.20.4.100,85.234.11.161
cvs162,10.20.45.30,85.234.11.162
cvs163,10.20.45.94,85.234.11.163
cvs164,10.20.45.62,85.234.11.164
cvs167,10.20.250.14,85.234.11.167
cvs168,10.20.182.30,85.234.66.168

sudo crontab -l
A cron job is a process that is automatically run at whatever time you set it to run.
This can be each day, each hour of every day, every 5 minutes of every hour of every day.