Linux:邻居表溢出Neighbour Table Overflow错误和解决方案

时间:2020-01-09 10:34:13  来源:igfitidea点击:

使用了CentOS Linux的Linux服务器,作为网关和防火墙服务器。
但是,我在/var/log/messages日志文件中收到以下消息:

Dec 20 00:41:01 fw01 kernel: Neighbour table overflow. Dec 20 00:41:01 fw01 last message repeated 20 times

或者

Dec 20 00:41:01 fw03 kernel: [ 8987.821184] Neighbour table overflow. Dec 20 00:41:01 fw03 kernel: [ 8987.860465] printk: 100 messages suppressed.

为什么内核在syslog中抛出Neighbor table溢出消息?
如何在Debian/CentOS/RHEL/Fedora/Ubuntu Linux下解决此问题?
对于繁忙的网络(或网关/防火墙Linux服务器),必须增加内核的内部ARP缓存大小。
使用以下内核变量:

net.ipv4.neigh.default.gc_thresh1
net.ipv4.neigh.default.gc_thresh2
net.ipv4.neigh.default.gc_thresh3

要查看当前值,请键入:

# sysctl net.ipv4.neigh.default.gc_thresh1

输出示例:

net.ipv4.neigh.default.gc_thresh1 = 128

键入以下命令:

# sysctl net.ipv4.neigh.default.gc_thresh2

输出示例:

net.ipv4.neigh.default.gc_thresh2 = 512

键入以下命令:

# sysctl net.ipv4.neigh.default.gc_thresh3

输出示例:

net.ipv4.neigh.default.gc_thresh3 = 1024

因此,您需要确保arp表变得大于上述默认值。
以上限制适用于小型网络或单个服务器。
这也会影响您的DNS流量。

如何修复邻居表溢出错误?

编辑/etc/sysctl.conf文件,输入:

# vi /etc/sysctl.conf

附加以下值(此值来自保护运行MS-Windows,Linux和Apple OS X的200多个台式机的服务器):

## works best with <= 500 client computers ##
# Force gc to clean-up quickly
net.ipv4.neigh.default.gc_interval = 3600
 
# Set ARP cache entry timeout
net.ipv4.neigh.default.gc_stale_time = 3600
 
# Setup DNS threshold for arp 
net.ipv4.neigh.default.gc_thresh3 = 4096
net.ipv4.neigh.default.gc_thresh2 = 2048
net.ipv4.neigh.default.gc_thresh1 = 1024

要加载新更改,请键入以下命令:

# sysctl -p