Linux sempre envia redirecionamento ICMP

14

Eu tenho vários Debian Squeeze (6.0.6 atualizados) usados ​​como roteadores.
Quando um link está inoperante, eles enviam redirecionamentos de ICMP para hosts locais. Este é o comportamento padrão do Debian e vários outros. Assim, quando o link voltar à vida, os hosts não poderão acessá-lo até a reinicialização.

Não quero que nenhum redirecionamento ICMP seja enviado desses roteadores.

Eu testei echo 0 > /proc/sys/net/ipv4/conf/all/send_redirectse sysctl -w net.ipv4.conf.all.send_redirects=0coloquei net.ipv4.conf.all.send_redirects=0em /etc/sysctl.d/local.conf
cada uma dessas soluções colocar o valor certo em/proc/sys/net/ipv4/conf/all/send_redirects

Mas ...
o kernel continua enviando redirecionamentos de ICMP. Mesmo após uma reinicialização:

$ 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

E a tabela de roteamento de hosts locais (computadores Windows) está poluída.

Eu posso evitar isso com o netfilter:
iptables -t mangle -A POSTROUTING -p icmp --icmp-type redirect -j DROP

Alguma idéia de por que o método usual não funciona?
E como impedir que o redirecionamento ICMP seja enviado sem usar o netfilter?

Gregory MOUSSAT
fonte

Respostas:

14

O comando certo é: echo 0 | tee /proc/sys/net/ipv4/conf/*/send_redirects
porque você deve ter 0 em 'all' e 'interface_name' para desativá-lo.

Em /etc/sysctl.confum arquivo ou similar, é necessário definir 'all' + 'default' (ou 'all' + 'interface', mas a interface talvez ainda não exista quando esse arquivo for processado).

Bertrand SCHITS
fonte
5
Qual é o sentido do diretório "todos", então? Tive a vaga impressão de que substituiria os valores de todas as outras entradas?
Elrond
@Elrond, all não substitui, faz operações bit a bit. Veja esta resposta sobre allvs.default . send_redirectsé um ORparâmetro, portanto, a configuração all.send_redirectspara 0 será superada pela configuração da interface.
Leif Arne Storset