Você leu a página man, certo?
-i interface, --interface=interface
Specifies the interface through which traceroute should send
packets. By default, the interface is selected according to the
routing table.
Eu tenho um roteador (rodando o Linux) que está conectado a dois ISPs, as rotas são selecionadas usando o BGP, no entanto, eu gostaria de fazer ping / rastrear cada conexão separadamente.
O comando traceroute padrão parece ser capaz de fazer isso (permite a seleção da interface de saída, IP de origem), mas não permite a seleção do gateway. Embora exista uma opção de linha de comando (-g), tudo o que ela faz é definir a opção de roteamento IP em vez de apenas enviar o pacote para lá.
Aqui está o que eu quero: Digamos que meu roteador tenha dois IPs - 10.0.0.1 (dados pelo primeiro ISP), 10.1.0.1 (dados pelo segundo ISP). O gateway padrão (próximo salto) no primeiro ISP é 10.0.0.254 e no segundo é 10.1.0.254. Um deles é selecionado como o gateway padrão atual (por BGP), mas eu também quero poder usar o rastreamento / ping através do outro gateway. Não consigo alterar a tabela de roteamento (sem causar interrupções de conexão, especialmente se o outro ISP tiver um problema).
traceroute_oth --nexthop 10.0.0.254 8.8.8.8 deve dar
1 10.0.0.254
2 some-iother-ip.first-isp.com
...
x 8.8.8.8
traceroute_oth --nexthop 10.1.0.254 8.8.8.8 deve dar
1 10.1.0.254
2 some-ip.second-isp.com
...
x 8.8.8.8
EDIT: "traceroute -i" não funciona porque o roteador não conhece o outro gateway. Basicamente, a tabela de roteamento é esta (simplificada):
0.0.0.0/0 gw 10.0.0.254 eth0
Não há como o programa saber qual é o gateway padrão na eth1 (link para o outro ISP) sem que eu o especifique explicitamente.
Você leu a página man, certo?
-i interface, --interface=interface
Specifies the interface through which traceroute should send
packets. By default, the interface is selected according to the
routing table.
Eu tive o mesmo problema, mas felizmente consegui corrigi-lo.
Em um computador multihomed, apenas um gateway padrão pode ser definido, independentemente do número de interfaces presentes. Se você tentar traceroute para um host que não esteja na mesma sub-rede da interface que você está especificando com o sinal -i
, o traceroute falhará devido à ausência de gateway (supondo que você não tenha a sorte de usar o host interface que tem um gateway padrão definido).
A solução para isso é definir tabelas de roteamento adicionais para cada interface "extra" em sua máquina
Um guia detalhado pode ser encontrado neste link.
Em Resumo, se você tiver duas interfaces com características:
Interface A: IP: 10.0.0.10 subnet: 255.255.255.0 Gateway 10.0.0.1
Interface B: IP: 192.168.0.10 subnet: 255.255.255.0 Gateway 192.168.0.1
e apenas o gateway padrão de A aparece na tabela de roteamento, você faria as seguintes etapas para incluir o gateway de B:
Vá para /etc/iproute2/rt_tables
e, no final, a linha a seguir
1 routingTableB
Execute como root os seguintes comandos:
ip route add 192.168.0.0/24 dev <Interface B> src 192.168.0.10 table routingTableB
ip route add default via 192.168.0.1 dev <Interface B> table routingTableB
ip rule add from 192.168.0.10/32 table routingTableB
ip rule add to 192.168.0.10/32 table routingTableB
Depois disso, você poderá usar o sinal -i
com a Interface B sem nenhum problema.
Por favor, note que esta configuração será perdida após a reinicialização. Verifique o link acima sobre como torná-lo permanente.
Como observação, o sinalizador -g
não determina a qual IP a interface enviará os pacotes. É um parâmetro incluído nos testes destinados a ditar aos nós intermediários como rotear os pacotes.
Publicando isso caso alguém encontre o mesmo problema que eu:
No Ubuntu, o pacote inetutils-traceroute
não permite que você defina a interface de origem, enquanto o pacote traceroute
o faz. Você quase certamente quer o último.
Hum ... Apenas um conceito aqui, mas eu diria - roteamento de políticas:
Adicione uma nova tabela RT ao seu linux
echo 200 test >> /etc/iproute2/rt_tables
Adicione uma regra de política correspondente a ela
ip rule add oif <iface_to_second_ISP> table test
Adicionar rota padrão em sua tabela recém-criada
ip route add 0.0.0.0/0 via <second_ISP_next_hop> dev <iface_to_second_ISP> table test
Liberar os caches e testar
ip route flush cache
ping -I <IP_on_second_ISP_iface> google.com
Tags traceroute linux