23 de mar. de 2010

Eliminando o Neighbour table overflow

Faço conectividade de condomínios, e um problema que comunmente quem faz este tipo de serviço tem é o de isolar cada uma das máquinas, de forma que elas não se "enxerguem" nem façam difusão de nomes netbios. Elimino este inconveniente criando tantas sub-redes quanto o necessário, mas isso vai ficar para um artigo que estou preparando.

Esta técnica sempre funcionou muito bem com redes pequenas com até 40 máquinas mas surgiu um problema quando empreguei a mesma técnica com uma rede de mais de 500 máquinas.
Após alguns munitos de operação o sistema começava a dar uma mensagem de erro "Neighbour table overflow" a rede começava a ficar lenta até parar de vez.

Após muito pesquisar descobri o que ocorria, o kernel ao ter que manipular uma enorme quantidade de requisições ARP gerava uma tabela ARP gigantesca e por default ele não manipula tabelas superiores a 1024 entradas, passando disso ele provocava um transbordamento da tabela ARP que paralizava o sistema.

A solução para o problema foi a seguinte:
Alteramos o valor de entradas ARP que o Kernel pode suportar para seu limite máximo da seguinte forma.

echo 16384 > /proc/sys/net/ipv4/neigh/default/gc_thresh1
echo 32768 > /proc/sys/net/ipv4/neigh/default/gc_thresh2
echo 65535 > /proc/sys/net/ipv4/neigh/default/gc_thresh3

Pronto, basta inserir as linhas acima em seu rc.local antes que seu firewall seja levantado.

No meu caso as inseri no /etc/rc.d/rc.S do Slackware 10.2 antes mesmo da inicilização das interfaces de rede.

Está funcionando pefeitamente desde então.

Até a próxima! E um fraternal abraço a todos.