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 pingou SSHpara 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 route show to match 8.8.8.8diz?
ip route getimprime o resultado do algoritmo de seleção de roteamento e imprime o endereço de origem no srccampo 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?)
ip rule list? E para cada tabela listada, qual é o resultadoip route list table $table?