Linux всегда отправляет ICMP-редирект

14

У меня есть несколько Debian Squeeze (до версии 6.0.6), используемых в качестве маршрутизаторов.
Когда связь не работает, они отправляют перенаправления ICMP локальным хостам. Это стандартное поведение Debian и некоторых других. Поэтому, как только ссылка возвращается к жизни, хосты не могут достичь ее до перезагрузки.

Я не хочу, чтобы с этих маршрутизаторов отправлялось перенаправление ICMP.

Я проверил echo 0 > /proc/sys/net/ipv4/conf/all/send_redirectsи sysctl -w net.ipv4.conf.all.send_redirects=0и вкладываю net.ipv4.conf.all.send_redirects=0в /etc/sysctl.d/local.conf
каждое из этих решений правильное значение/proc/sys/net/ipv4/conf/all/send_redirects

Но ...
ядро продолжает посылать перенаправления ICMP. Даже после перезагрузки:

$ tcpdump -n -i eth0
00:56:17.186995 IP 192.168.0.254 > 192.168.0.100: ICMP redirect 10.10.13.102 to host 192.168.0.1, length 68

А таблицы маршрутизации локальных хостов (компьютеров Windows) загрязнены.

Я могу предотвратить это с помощью netfilter:
iptables -t mangle -A POSTROUTING -p icmp --icmp-type redirect -j DROP

Есть идеи о том, почему обычный метод не работает?
И как предотвратить перенаправление ICMP, не используя netfilter?

Грегори МУССАТ
источник

Ответы:

14

Правильная команда: echo 0 | tee /proc/sys/net/ipv4/conf/*/send_redirects
потому что вы должны иметь 0 на «все» и на «имя_интерфейса», чтобы отключить его.

В /etc/sysctl.confили аналогичный файл необходимо установить «все» + «по умолчанию» (или «все» + «интерфейс», но интерфейс может не существовать уже при обработке этого файла).

Бертран Щитс
источник
5
Какой смысл в директории "all" тогда? У меня сложилось смутное впечатление, это переписало бы значения всех остальных записей?
Элронд
@Elrond, allне перезаписывает, он выполняет побитовые операции. Смотрите этот ответ о allпротивdefault . send_redirectsявляется ORпараметром, поэтому установка all.send_redirectsв 0 будет иметь преимущество перед настройкой интерфейса.
Лейф Арне Сторсет