J'ai une machine avec une interface qui a deux adresses 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
Si j'exécute par exemple ip -s route get 8.8.8.8
, alors selon cela, le paquet de sortie aura une adresse IP source 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
Cependant, lorsque je par exemple ping
ou SSH
à 8.8.8.8
, alors l'IP source est 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
Quelle est la raison pour laquelle dans ce cas ip route get
n'affiche pas l'adresse IP source correcte?
ip route show to match 8.8.8.8
dit-on?
ip route get
imprime le résultat de l'algorithme de sélection de routage et imprime l'adresse source à partir du src
champ de l'entrée de table de routage correspondante. Cependant, une application peut lier une adresse au socket, qui est ensuite utilisé à la place comme adresse source dans les paquets IP. Voir Sélection de l'adresse source . Peut-être que votre programme ping fait cela? (Il existe plusieurs programmes de ping; à partir de quel package est le vôtre?)
ip rule list
? Et pour chaque table répertoriée, quelle est la sortie deip route list table $table
?