Como posso executar ping através de um gateway alternativo?

19

Nossa rede possui dois modems, cada um escondido atrás de um roteador. O roteador principal está na 10.1.1.1, o roteador de backup está na 10.1.1.2 e é configurado para a sub-rede 10.1.1.0/24. Ambos os roteadores têm seu gateway configurado para 192.168.0.1. No entanto, o 192.168.0.1 que você vê se o seu gateway é 10.1.1.1 é uma máquina diferente do 192.168.0.1 que você vê se o seu gateway é 10.1.1.2.

Meu servidor Nagios está configurado de acordo:

auto eth0
iface eth0 inet static
address 10.1.1.10
netmask 255.255.255.0
gateway 10.1.1.1

Então, para ficar claro: existem quatro gateways aqui. Roteador1 (10.1.1.1) Roteador2 (10.1.1.2) Modem1 (192.168.0.1) Modem2 (192.168.0.1)

Aqui está uma ilustração do que posso fazer manualmente para verificar o status dos dois modems:

ping -c4 192.168.0.1 # Is Modem1 up? 
ip route add via 10.1.1.2
ip route change default via 10.1.1.2
ping -c4 192.168.0.1 # Is Modem2 up?
wget 192.168.0.1 # yields expected control webpage for Modem2
ip route change default via 10.1.1.1
ip route del default via 10.1.1.2
wget 192.168.0.1 # Connection refused; Modem1 has no web interface
ssh [email protected] # I can log in to Modem1 and check status

Eu gostaria, no mínimo, de poder executar ping no Modem2.

* Editado para corrigir meu uso abominável da notação CIDR e fornecer detalhes claros. (Eu acho que isso não pertence ao superusuário.)

Luke Schlather
fonte
Qual é a configuração IP a partir da qual você está iniciando o ping?

Respostas:

12

man ping

destino de ping [hop]

Assim, você pode fornecer ao ping um número de IPs separados por espaço em branco como parâmetro. O último endereço será "pingado"; os parâmetros anteriores definem a rota que o ping deve seguir.

Então, no seu caso:

  • "ping 10.1.1.2 modem" para usar explicitamente o primeiro gateway,
  • "ping 10.1.1.1 modem" para usar explicitamente o segundo gateway.

Se você encontrar o mesmo problema com o Windows: ping /? -ké a opção que você provavelmente deseja.

BTW: O ping acima não requer privilégios de root. As informações de roteamento (no seu caso: a "lista de permissões") fazem parte do protocolo ICMP.

Nils
fonte
1
Isso não está me levando lá. ping -c4 10.1.1.2 192.168.0.1produz 100% de perda de pacotes. Eu esclareci a situação acima.
Luke Schlather
4
Na verdade, isso não funciona, mesmo com o root. Eu testei isso enquanto assistia tcpdump, e ele não faz o que você pensa que faz.
bahamat
O que acontece se você remover completamente o gateway padrão? Ainda não entendo sua configuração. Por que você usa o endereço "roteador" idêntico nos dois modems?
Nils
Ambos os modems são controlados pelos meus diferentes ISPs.
Luke Schlather 30/07
Ok - agora eu entendo o mesmo IP dos roteadores. Essa é uma conexão sob demanda e você deseja fazer failover?
Nils
11

Nem ping -Nnem arpingtrabalhou para mim, eu finalmente resolvido com a solução de esta resposta :

Você pode usar a ferramenta nping no pacote nmap :

# nping --icmp --dest-mac [gateway mac] [target ip]

Você pode encontrar o mac do seu roteador no cache ARP local:

$ arp -v [gateway ip]

A ferramenta também suporta diferentes tipos de ping, como --tcpou --udp.

Tho85
fonte
Obrigado por isso. Sua sugestão de usar o nping é o único método que encontrei (além de adicionar em uma rota específica e usar o binário de ping normal) de enviar solicitações de eco do ICMP (pings) para um roteador de backup 3G de discagem sob demanda (para fins de teste , para garantir que ele se conecte e tenha conectividade real com a Internet, uma vez conectado), atingido ao direcionar o endereço MAC do roteador ao enviar pacotes ICMP, o que o nping permite que você faça. Pequena utilidade muito útil!
parkamark
2

Desculpe, você pode ter apenas um gateway padrão . Você pode ter vários gateways, mas apenas um para cada rede.

O problema é que os dois IPs mencionados estão na mesma rede. Além disso, você especificou seus CIDRs incorretamente: você quis dizer 10.1.1.0/24 como tendo uma sub-rede 255.255.255.0; ou até ter uma sub-rede maior, por exemplo, 10.0.0.0/8 como sendo 255.0.0.0.

Portanto, você pode executar ping em qualquer host dentro da sua rede (10.0.0.0/8) ou em qualquer host acessível por meio de um gateway (ou). Mas não é possível ter dois gateways para a mesma rede.

mailq
fonte
1
Eu quis dizer 10.1.1.1/24 como uma abreviação de 10.1.1.1 na sub-rede 10.1.1.0/24. Desculpe, não vou usar essa abreviação novamente, está claramente errado. Ainda tenho um problema de monitoramento - adicionei mais detalhes acima. Não consigo resolver esse problema sem colocar um roteador melhor no 10.1.1.2?
Luke Schlather
2

Use arping :

# arping -c 1 -S [source_ip] -T [target_remote_ip] [gateway_mac_address]

Onde:

  • source_ip é um IP atribuído localmente no seu host
  • target_remote_ip é o endereço IP que você deseja executar ping
  • gateway_mac_address é o endereço éter da camada 2 do gateway alternativo que você deseja usar

Como alternativa, se você estiver usando algum tipo de Solaris, poderá usar:

ping -N [gateway_ip] [target_remote_ip]
bahamat
fonte
Isso parece promissor, embora eu ache que o arping do iproute2 não será suficiente ... talvez eu só precise substituir o roteador por algo que eu possa usar.
Luke Schlather 19/07/19
1
iproute2's arpingé diferente. Se você estiver usando o arping from iproute2para fazer arps gratuitos, sugiro usar o send_arpfrom fake. Além disso, o gateway deve ser algo que encaminhará pacotes IP.
bahamat