
Я хочу посмотреть, как изменяется таблица маршрутизации в системе 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, с последней стабильной версией ядра, брандмауэр не установлен.
Итак, вопрос: что может пойти не так?
решение1
В соответствии сДокументация/Сеть/ip-sysctl.txtпо умолчанию перенаправления принимаются только для тех шлюзов, которые уже указаны в таблице маршрутизации.
secure_redirects - BOOLEAN Принимать сообщения о перенаправлении ICMP только для шлюзов, указан в списке шлюзов по умолчанию. secure_redirects для интерфейса будет включен, если хотя бы один из conf/{all,interface}/secure_redirects имеет значение TRUE, в противном случае он будет отключен по умолчанию ИСТИНА
решение2
Предположение: вызов icmpush
не использует внешний интерфейс eth1
, а использует локальный, lo
так что ядро не распознает, что это корректное перенаправление со шлюза. Кроме того, в очень старых версиях ядра Linux эти маршруты не отображались в ответе route -n
. Как я уже отметил, ответ route -nC
может быть правильным способом включить также временный маршрут перенаправления.
@grawity, по поводу принятия перенаправлений, отправленных в ответ на другой пакет: вы где-то это читали? Мне это было бы очень интересно.