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 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 no src
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?)
ip rule list
? E para cada tabela listada, qual é o resultadoip route list table $table
?