msoliver
(usa Debian)
Enviado em 21/08/2016 - 16:03h
Guri.de.Gorpa escreveu:
Olá boa tarde,
Por falta de verba para manter um link de IP Fixo, tive que voltar para o dinâmico, e me deparei com um probleminha com meus redirecionamentos no iptables.
Toda vez muda o IP da interface "ppp0" eu tenho que manualmente "reload" no firewall, e queria que monitorasse e assim que mudar o ip "reload o firewall"
O ambiente está assim;
Firewall Iptables
.....
# Interface da Rede Externa - Internet
NET=ppp0
# Meu IP
MEUIP=$(ifconfig $NET | grep "inet end" | awk '{print $3}')
......
Possível script que eu estou em dúvida de usar
#!/bin/bash
NET=ppp0
IPEXT=$(ifconfig $NET | grep "inet end" | awk '{print $3}')
LOG=/tmp/ipchange.log
if ! ping $IPEXT >/dev/null; then
echo "ALERT!!! Internet IP Change!" > $LOG
ssmtp xxxxxxxxxxx@gmail.com < $LOG
sleep 2
service firewall restart
else
echo "Internet OK !!!" > $LOG
exit 1
fi
exit
está correto, ou alguma dica para me ajudar nesse problema, não sou muito com com shell script.
Obrigado.
------------------------------------------------------
Boa tarde, Guri.de.Gorpa .
Quanto ao seu script, "parece" que tem algumas falhas . . .
1º Não colocou um "limite" no ping, exemplo, ping -c4 . . . Isso implica que ficará "eternamente pingando" . . .
2º O "ping" é feito em "$IPEXT" (ppp0), logo, só vai falhar se não tiver conectado . . .
SUGESTÃO :
#INICIO#
#!/bin/bash
#SE O IP EXTERNO FOR ALTERADO, ENVIA EMAIL.
PEGAIP() {
[ -e Log_IP_PPP0.txt ] || echo "0.0.0.0::" > Log_IP_PPP0.txt # CRIA Log_IP_PPP0.txt NA 1ª EXECUÇÃO
IPEXT=$(ifconfig ppp0 | grep "inet end" | awk '{print $3}')
if [ $IPEXT ];then
if [ $IPEXT != $(sed -n '$p' Log_IP_PPP0.txt|cut -d":" -f1) ];then
echo -e " ALERT! Internet IP Changed! \n Data:$(date +%x)\n Hora:$(date +%X)\n IP:$IPEXT"|ssmtp "SEU_EMAIL"
echo "$IPEXT:$(date +%x):$(date +%X)" >> Log_IP_PPP0.txt
fi
else
echo -e "SEM_CONEXÃO:$(date +%x):$(date +%X)" >> Log_IP_PPP0.txt
fi
LIMPALOG
}
LIMPALOG() {
#CONTROLA O "TAMANHO" DO Log_IP_PPP0.txt
NR=$(awk 'END{print NR}' Log_IP_PPP0.txt)
(($NR>100)) && sed -i "1,$((NR-10))d" Log_IP_PPP0.txt
}
PEGAIP
#FIM#
A "LÓGICA", é:
"PEGA" o IP externo.
Se a VAR "$IPEXT" existe,
Compara o mesmo com a ultima linha de Log_IP_PPP0.txt
Se é diferente, manda o email e "guarda" o IP externo no log . . .
Se "$IPEXT" não existe, não tem conexão, insere a linha no log . . .
att.:
marcelo oliver