Eu tenho uma máquina com uma interface que possui dois endereços IP:
inet 192.168.1.15/32 scope global eth0
inet 10.10.118.45/24 brd 10.10.118.255 scope global eth0:hosts4
Se eu executar, por exemplo ip -s route get 8.8.8.8
, de acordo com isso, o pacote de saída terá um endereço IP de origem 10.10.118.45
:
8.8.8.8 via 10.10.118.254 dev eth0 src 10.10.118.45
cache users 1 used 1
No entanto, quando eu, por exemplo ping
ou SSH
para 8.8.8.8
, o IP de origem é 192.168.1.15
:
15:19:38.092508 IP 192.168.1.15 > 8.8.8.8: ICMP echo request, id 9135, seq 2, length 64
15:19:38.097962 IP 8.8.8.8 > 192.168.1.15: ICMP echo reply, id 9135, seq 2, length 64
Por que motivo, neste caso ip route get
, não mostra o endereço IP de origem correto?
ip rule list
? E para cada tabela listada, qual é o resultadoip route list table $table
?ip route show to match 8.8.8.8
diz?ip route get
imprime o resultado do algoritmo de seleção de roteamento e imprime o endereço de origem nosrc
campo da entrada da tabela de roteamento correspondente. No entanto, um aplicativo pode vincular um endereço ao soquete, que é usado como o endereço de origem nos pacotes IP. Consulte Seleção de endereço de origem . Talvez o seu programa de ping faça isso? (Existem vários programas de ping, a partir de qual pacote é a sua?)Respostas:
Uma máquina pode ter apenas um gateway padrão. Você pode usar o ping -i para escolher qual interface você quer que um pacote venha. A partir das informações que você forneceu, parece que seu IP padrão é 192.168.1.15. 10.10.118.45 parece ser um alias. Verifique se o seu
/etc/networks
,/etc/sysconfig/network
bem como o interior de configuração da interface/etc/network-scripts/ifcfg-*
Aqui está um exemplo de saída de configuração semelhante.
fonte
{}
para obter um texto melhor legível.Talvez seja possível que seu
10.10.118.45/24
endereço seja dhcp? você pode tentar remover o endereço estáticofonte