Ho una macchina con un'interfaccia che ha due indirizzi 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 eseguo ad esempio ip -s route get 8.8.8.8
, in base a ciò, il pacchetto in uscita avrà un indirizzo IP di origine 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
Tuttavia, quando I per esempio ping
o SSH
per 8.8.8.8
, quindi IP di origine è 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
Qual è la ragione per cui in questo caso ip route get
non viene visualizzato l'indirizzo IP di origine corretto?
ip route show to match 8.8.8.8
dice?
ip route get
stampa il risultato dell'algoritmo di selezione del routing e stampa l'indirizzo di origine dal src
campo della voce della tabella di routing corrispondente. Tuttavia, un'applicazione può associare un indirizzo al socket, che viene quindi utilizzato come indirizzo di origine nei pacchetti IP. Vedi Selezione dell'indirizzo di origine . Forse il tuo programma ping fa questo? (Esistono diversi programmi di ping; da quale pacchetto è il tuo?)
ip rule list
? E per ogni tabella elencata, qual è l'output diip route list table $table
?