Переадресация ICMP: как проверить это с помощью icmpush
Я хочу посмотреть, как меняется таблица маршрутизации в системе Linux, когда получено перенаправление ICMP. Для этого я использую
icmpush -v red -sp current-gateway -gw new-gateway -dest google.com -c host -prot tcp my-eth1-ip-address
(который возвращает успех), но результат
route -n
остается такой же. Конечно, я проверил вывод
cat /proc/sys/net/ipv4/conf/eth1/accept_redirects
это 1. Это машина с Ubuntu 12, с последней стабильной версией ядра, без брандмауэра.
Итак, вопрос: что может пойти не так?
2 ответа
Согласно http://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt, перенаправления по умолчанию принимаются только для тех шлюзов, которые уже перечислены в таблице маршрутизации.
secure_redirects - BOOLEAN
Принимать сообщения перенаправления ICMP только для шлюзов,
указан в списке шлюзов по умолчанию.
secure_redirects для интерфейса будет включен, если хотя бы один из
conf/{all,interface}/secure_redirects имеет значение TRUE,
иначе он будет отключен
по умолчанию TRUE
Предположение: зов icmpush не использует внешний интерфейс eth1, а точнее локальный lo так что ядро не распознает, что это правильное перенаправление со шлюза. Кроме того, в очень старых версиях ядра Linux эти маршруты не отображались в ответе route -n, Как я уже отметил, ответ route -nC может быть правильным способом включить также временный маршрут перенаправления.
@ grawity, о принятии перенаправлений, которые были отправлены в ответ на другой пакет: вы читали это где-нибудь? потому что я был бы действительно заинтересован в этом.