O comando ip route get ADDRESS
funciona , mesmo que nenhum gateway padrão esteja configurado. Por exemplo, se os seguintes endereços estiverem configurados em eth0: 10.0.7.139/24
, 169.254.1.2/16
e a rota padrão for excluída,
$ ip route get 10.0.7.222
10.0.7.222 dev eth0 src 10.0.7.139
cache
$ ip route get 169.254.55
169.254.55.0 dev eth0 src 169.254.1.2
cache
$ ip route get 1
RTNETLINK answers: Network is unreachable
A última resposta está correta: não há como chegar a um host com qualquer um dos endereços 1.x.x.x, se não houver nenhuma rota para ele. Não é o comando ip route get
que não está funcionando, é a configuração de rede que está errada.
Observe que "link-local" significa exatamente isso, um endereço que deve ser usado somente no link Ethernet ao qual a eth0 está conectada. Não é suposto ser usado em uma conexão "de saída".
Editar: esclarecendo comentário adicionado abaixo.
A tabela de roteamento, e apenas a tabela de roteamento, é o que determina como um pacote inicia sua jornada até o seu destino. Uma rota é sempre envolvida ao enviar um pacote IP, mesmo que o destino esteja no link local ou até mesmo no host local. As entradas da tabela de roteamento também contêm um endereço de origem e esse endereço da rota correspondente é escolhido como o endereço IP de origem do pacote transmitido.
Pode haver vários endereços IP atribuídos à mesma interface, mesmo do mesmo intervalo de endereços, mas apenas um deles (o endereço principal) é listado na entrada da tabela de roteamento correspondente.
Assim, ip route get
(ou indiretamente ip route
) dá a resposta definitiva à sua pergunta. Na página ip-route
man: "este comando obtém uma única rota para um destino e imprime seu conteúdo exatamente como o kernel o vê."