Ferramentas para depurar tabelas de roteamento em uma máquina Linux?

18

Existe uma ferramenta que depura tabelas de roteamento em uma máquina Linux?

Quero dizer, um que eu possa usar inserindo um endereço IP nele, ele levará em consideração a tabela de roteamento existente e produzirá as correspondências da tabela, para que eu possa ter uma idéia de onde os pacotes irão?

leeand00
fonte
1
Das rotas e interfaces definidas para o host, você só quer saber qual rota será levada para um determinado IP? Soa como um utilitário legal. Se não existir, ele poderá ser escrito em qualquer número de idiomas, inclusive no bash.
Andrew
Quantos roteadores estão conectados à sua máquina Linux? Você quis dizer em traceroutevez disso?
23--15

Respostas:

36

Use ip route get. Em Configurando o roteamento de rede :

O ip route getcomando é um recurso útil que permite consultar a rota na qual o sistema enviará pacotes para atingir um endereço IP especificado, por exemplo:

# ip route get 23.6.118.140
23.6.118.140 via 10.0.2.2 dev eth0 src 10.0.2.15
cache mtu 1500 advmss 1460 hoplimit 64

Neste exemplo, pacotes para 23.6.118.140 são enviados para fora da interface eth0 através do gateway 10.0.2.2.

Mark Plotnick
fonte
Ah, eu gosto disso. +1
roaima 23/03
Hmm assim no OpenWRT eu só tenho que instalar o iproute2 e então talvez eu possa fazer isso? ifconfig é tudo o que vem com ele por padrão, tenho certeza que posso adicioná-lo com o opkg ... mas se essa não fosse uma opção, a resposta da roaima seria a melhor, se o iproute2 estiver disponível, isso funcionará muito bem, obrigado ambas.
precisa
1
Eu não tenho o OpenWRT, mas, olhando a documentação deles, parece que agora eles chamam de ippacote.
precisa
E aqui está o conjunto de ferramentas do qual faz parte: pt.wikipedia.org/wiki/Iproute2
leeand00
Hum ... funciona com roteamento baseado em políticas? Diga como rastrear o roteamento específico da porta com iptables, regras do FWMARK?
Mlt
2

Salve o script a seguir em algum lugar útil. Ligue para ele com o endereço IP que você deseja testar e ele informará a rota correspondente.

#!/bin/bash
#
# Find the appropriate routing entry for a given IP address
########################################################################

########################################################################
# Calculate the base network address for a given addres and netmask
#
baseNet() {
    local ADDRESS="$1" NETMASK="$2"
    ipcalc -nb "$ADDRESS" "$NETMASK" | awk '$1=="Network:"{print $2}'
}

########################################################################
# Go
#
for IPADDRESS in "$@"
do
    netstat -rn |
        tac |
        while read DESTINATION GATEWAY GENMASK FLAGS MSS WINDOW IRTT IFACE
        do
            NSBASENET=$(baseNet "$DESTINATION" "$GENMASK")
            IPBASENET=$(baseNet "$IPADDRESS" "$GENMASK")
            if test "X$NSBASENET" = "X$IPBASENET"
            then
                if test '0.0.0.0' = "$GATEWAY"
                then
                    echo "Matches $DESTINATION with netmask $GENMASK directly on $IFACE"
                else
                    echo "Matches $DESTINATION with netmask $GENMASK via $GATEWAY on $IFACE"
                fi
                break
            fi
        done
done

# All done
#
exit 0

Exemplo de uso

./what-route.sh 10.0.5.6
Matches 0.0.0.0 with netmask 0.0.0.0 via 10.0.2.2 on eth0
./what-route.sh 10.0.2.6
Matches 10.0.2.0 with netmask 255.255.255.0 directly on eth0
roaima
fonte