Script para monitorar status do gateway

1. Script para monitorar status do gateway

Valter Fernandes
valtinho

(usa Debian)

Enviado em 12/11/2009 - 13:10h

Pessoal, o problema é o seguinte:
Onde trabalho, possuimos 2 links de internet. Cada link esta caindo em um roteador(não esta direto no servidor linux). Quando um link cai, preciso mudar o gateway do servidor para o outro link. Como posso fazer um script para monitor se o gateway em uso está UP e caso ele esteja DOWN, altera o gateway?
Já agradeço antecipadamente a colaboração


  


2. PHP + Crontab

Marcello Carvalho
mbrunoac

(usa Fedora)

Enviado em 27/03/2012 - 15:42h

um pouco atrasado mas aí vai para futuras pesquisas o script que eu fiz aqui no trabalho
um arquivo php que pode ser adicionado ao crontab
editar o crontab
# crontab -l
// executa o script de um em um minuto
* * * * * php -q troca_gateway.php


<?php

function getPing() {
$ip = '8.8.8.8';
//Executa ping no gateway do google com envio de um pacote para determinar se existe uma conexão válida com a internet
$ping = exec("ping -c 3 ".$ip." | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }'");
//retorna 1 para uma conexão válida e 0 para uma inválida
return $ping;
}

function getGateway() {
//Identifica o Gateway Default do servidor
$gateway = exec("route -n | grep UG | awk '{print $2}'");
return $gateway;
}

function setGatway($default, $novo){
//Deleta Gateway Default
exec('route del -net default gw '.$default);
//Seta novo Gateway Default
exec('route add -net default gw '.$novo);
}

function trocaGateway(){
$conexao = getPing();
//arquivo de log para monitorar quando houve troca.
$arquivoLog = 'servidor.log';
//Pasta onde o arquivo será salvo
$pastaLog = '/troca_gateway/';
$dataAtual = exec("date | awk '{print $1, $2, $3, $4}'");
$gAtual = getGateway();
$gateway1 = '192.168.1.1';
$gateway2 = '192.168.100.1';

if ($conexao > 0){
echo "Conexão com a internet ok Gateway atual: ".$gAtual."\n";
} else {
switch ($gAtual) {
case $gateway1:
$nGateway = $gateway2;
break;
case gateway2:
$nGateway = $gateway1;
break;
}
exec('echo \''.$dataAtual.' Gateway Atual: '.$gAtual.' sem conexão com a internet, mudando para o gateway: '.$nGateway.'\' >> ' . $pastaLog . $arquivoLog);
setGatway($gAtual, $nGateway);
}
}
echo trocaGateway();
?>