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();
?>