W przypadku gdy mamy dużą sieć lub nasz serwer pracuje jako router w logach może pojawić się komunikat
kernel: [138585.922764] IPv4: Neighbour table overflow
Rozwiązaniem tego problemu jest zwiększenie odpowiednio progów w tablicy neighbour zwanej również tablicą ARP.
Aktualne poziomy sprawdzamy poleceniem:
grep . /proc/sys/net/ipv4/neigh/default/gc_thresh*
powinniśmy otrzymać wyniki podobne do poniższych:
/proc/sys/net/ipv4/neigh/default/gc_thresh1:128 /proc/sys/net/ipv4/neigh/default/gc_thresh2:512 /proc/sys/net/ipv4/neigh/default/gc_thresh3:1024
Po zapełnieniu tabeli ARP i przekroczeniu progu gc_thresh1, system zwiększy jej wielkość do drugiego progu gc_thresh2 i ustawi politykę czyszczenia tabli ARP na bardziej agresywną. Trzeci prób gc_thresh3 jest twardym limitem, który nie pozwala zwiększyć wielkości tablicy ponad tą wartość. W przypadku zapełnienia tablicy o wielkości poziomu 3 pojawia się powyższy komunikat w logach.
W takim przypadku należy zwiększyć odpowiednio progi do następnego poziomu:
128 -> 256, 512 -> 1024, 2014 -> 2048 poniższym poleceniem:
echo 256 > /proc/sys/net/ipv4/neigh/default/gc_thresh1 echo 1024 > /proc/sys/net/ipv4/neigh/default/gc_thresh2 echo 2048 > /proc/sys/net/ipv4/neigh/default/gc_thresh3
Za jakiś czas może się okazać, że nowe poziomy są również nie wystarczające, wtedy zwiększamy je ponownie do następnych wartości.
Powyższa zmiana będzie obowiązywała tylko do ponownego uruchomienia systemu. Aby zachować ustawienia po jego restarcie, należy dodać poniższe wpisy do pliku /etc/sysctl.conf:
net.ipv4.neigh.default.gc_thresh1 = 256
net.ipv4.neigh.default.gc_thresh2 = 1024
net.ipv4.neigh.default.gc_thresh3 = 2048
Istnieje taka możliwość, że po aktualizacji systemu plik /etc/sysctl.conf zostanie nadpisany domyślnymi wartościami. Warto sprawdzić go po aktualizacji, żeby uniknąć ponownego przepełnienia tablicy ARP.