[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Disparar ping através de um gateway especifico



Em 29-11-2011 09:51, Thiago Andrighetti escreveu:
Olá, tenho um server que faz uma redundancia de links.
pingo em um link, se falhar passa para o outro link.
porém, a saida para os dois links é pela mesma placa de rede, com IP's virtuais, quando troco de link só altero o gateway.
Bém, minha dúvida é a seguinte:
Preciso disparar um ping em um ip de teste qualquer, mas especificando o gateway a ser utilizado.
Achei o seguinte: ping -I <ipdolinkespecifico> <destino>
mas aparentemente não surte efeito.

Olá,

        O que dá para fazer é criar duas tabelas roteamento, sendo um gateway padrão diferente em cada rota, aí define-se a regra para qual tabela a ser usada em cada ping.

        Por exemplo, vamos pingar 8.8.8.8 primeiro pela tabela 101 e depois pela tabela 102, sendo GW1 o gateway 1 e GW2 o gateway 2 na interface eth0 com IP1 para o gateway1 e IP2 para gateway 2:

# Gateways
IP1=192.168.10.100
GW1=192.168.10.1
IP_PING1=8.8.8.8

IP2=10.0.0.100
GW2=10.0.0.1
IP_PING2=8.8.4.4

# Criar tabelas
ip route flush table 101
ip route add default via $GW1 dev eth0 src $IP1 table 101
ip route flush table 102
ip route add default via $GW2 dev eth0 src $IP2 table 102

# Regra para direcionar os pings
ip rule add to $IP_PING1 table 101
ip rule add to $IP_PING2 table 102


        Pronto!

        Agora um traceroute ou ping no IP_PING1 vai pelo GW1 com IP1 e IP_PING2 vai pelo GW2 com IP2.

        Se quiser utilizar o mesmo IP de ping, então cria a regra para a tabela 101, pinga, apagar a regra para a tabela 101, criar a regra para a tabela 102, pinga, e assim vai.

        Para alterar a rota padrão caso caia o GW1 para o GW2 e se voltar o GW1 volte o padrão para GW1, avisando se GW2 está ativo ou não, de TEMPO em TEMPO, use:

TEMPO=60
PADRAO=''
while true; do
....if ping -c 3 $IP_PING1; then
........echo "GW1 passando..."
........if [ "$PADRAO" == "GW2" ]; then
............ip route del default
............ip route add default via $GW1 dev eth0 src $IP1
............PADRAO=GW1
............echo "Rota padrão alterada para GW1"
........fi
....else
........echo "GW1 não passando..."
........if [ "$PADRAO" == "GW1" ]; then
............ip route del default
............ip route add default via $GW2 dev eth0 src $IP2
............PADRAO=GW2
............echo "Rota padrão alterada para GW2"
........fi
....fi
....if ping -c 3 $IP_PING2; then
........echo "GW2 passando..."
....else
........echo "GW2 não passando..."
....fi
....sleep $TEMPO
done

[]'s
         Junior Polegato


Reply to: