У меня есть машина с интерфейсом, который имеет два 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
Если я выполню, например ip -s route get 8.8.8.8
, то в соответствии с этим исходящий пакет будет иметь IP-адрес источника 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
Тем не менее, когда я, например, ping
или SSH
к 8.8.8.8
, то исходный IP-адрес 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
По какой причине в этом случае ip route get
не отображается правильный IP-адрес источника?
ip rule list
? И для каждой таблицы в списке, что является выходомip route list table $table
?ip route show to match 8.8.8.8
говорит?ip route get
печатает результат алгоритма выбора маршрутизации и печатает адрес источника изsrc
поля соответствующей записи таблицы маршрутизации. Однако приложение может привязать адрес к сокету, который затем используется вместо этого в качестве адреса источника в IP-пакетах. См. Выбор адреса источника . Может быть, ваша программа ping делает это? (Есть несколько программ ping; из какого пакета ваша?)Ответы:
У машины может быть только один шлюз по умолчанию. Вы можете использовать ping -i, чтобы выбрать, с какого интерфейса вы хотите получить пакет. Из предоставленной вами информации видно, что ваш IP-адрес по умолчанию - 192.168.1.15. 10.10.118.45 представляется псевдонимом. Проверьте свою
/etc/networks
,/etc/sysconfig/network
а также конфигурацию интерфейса внутри/etc/network-scripts/ifcfg-*
Вот пример вывода аналогичного конфига.
источник
{}
для более удобочитаемого текста.Может быть, это ваш
10.10.118.45/24
адрес DHCP? вы можете попробовать удалить статический адресисточник