与桥接和ipv6相关的Linux主机上的邻居表溢出


10

注意:我已经有解决此问题的方法(如下所述),因此这只是“想知道”的问题。

我的生产设置大约有50台主机,其中包括运行xen 4的刀片服务器和提供iscsi的equallogics。所有xen dom0几乎都是普通的Debian5。该设置在每个dom0上都包含多个网桥,以支持xen桥接网络。每个dom0总共有5到12个桥接器,每个桥接器为一个VLAN服务。没有主机启用路由。

在某个时间点,我们将其中一台机器移至包括Raid控制器的新硬件,因此我们安装了带有xen补丁程序的上游3.0.22 / x86_64内核。所有其他机器都运行debian xen-dom0-kernel。

从那以后,我们每隔2分钟就会在设置中的所有主机上发现以下错误:

[55888.881994] __ratelimit: 908 callbacks suppressed
[55888.882221] Neighbour table overflow.
[55888.882476] Neighbour table overflow.
[55888.882732] Neighbour table overflow.
[55888.883050] Neighbour table overflow.
[55888.883307] Neighbour table overflow.
[55888.883562] Neighbour table overflow.
[55888.883859] Neighbour table overflow.
[55888.884118] Neighbour table overflow.
[55888.884373] Neighbour table overflow.
[55888.884666] Neighbour table overflow.

arp表(arp -n)从未在每台计算机上显示超过20个条目。我们尝试了明显的调整,并提出了

/proc/sys/net/ipv4/neigh/default/gc_thresh*

价值观。最终达到16384个条目,但无效。大约2分钟的间隔甚至都没有改变,这使我得出结论,这是完全无关的。tcpdump在任何接口上均未显示任何不常见的ipv4流量。来自tcpdump的唯一有趣发现是ipv6数据包突然爆发:

14:33:13.137668 IP6 fe80::216:3eff:fe1d:9d01 > ff02::1:ff1d:9d01: HBH ICMP6, multicast listener reportmax resp delay: 0 addr: ff02::1:ff1d:9d01, length 24
14:33:13.138061 IP6 fe80::216:3eff:fe1d:a8c1 > ff02::1:ff1d:a8c1: HBH ICMP6, multicast listener reportmax resp delay: 0 addr: ff02::1:ff1d:a8c1, length 24
14:33:13.138619 IP6 fe80::216:3eff:fe1d:bf81 > ff02::1:ff1d:bf81: HBH ICMP6, multicast listener reportmax resp delay: 0 addr: ff02::1:ff1d:bf81, length 24
14:33:13.138974 IP6 fe80::216:3eff:fe1d:eb41 > ff02::1:ff1d:eb41: HBH ICMP6, multicast listener reportmax resp delay: 0 addr: ff02::1:ff1d:eb41, length 24

这使我想到这个问题可能与ipv6有关,因为在此设置中我们没有ipv6服务。

唯一的其他提示是主机升级与问题开始的巧合。我关闭了有关主机的电源,错误消失了。然后,我随后拆除了主机上的网桥,并且当我拆除(ifconfig下来)一个特别的网桥时:

br-vlan2159 Link encap:Ethernet  HWaddr 00:26:b9:fb:16:2c  
          inet6 addr: fe80::226:b9ff:fefb:162c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:120 errors:0 dropped:0 overruns:0 frame:0
          TX packets:9 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:5286 (5.1 KiB)  TX bytes:726 (726.0 B)

eth0.2159 Link encap:Ethernet  HWaddr 00:26:b9:fb:16:2c  
          inet6 addr: fe80::226:b9ff:fefb:162c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1801 errors:0 dropped:0 overruns:0 frame:0
          TX packets:20 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:126228 (123.2 KiB)  TX bytes:1464 (1.4 KiB)

bridge name bridge id       STP enabled interfaces
...
br-vlan2158     8000.0026b9fb162c   no      eth0.2158
br-vlan2159     8000.0026b9fb162c   no      eth0.2159

错误又消失了。如您所见,网桥不包含ipv4地址,它的唯一成员是eth0.2159,因此,不应有流量通过它。桥和接口.2159 / .2157 / .2158在连接方面均与VLAN相同,但在拆除时没有任何作用。现在,我通过sysctl net.ipv6.conf.all.disable_ipv6在整个主机上禁用了ipv6 并重新启动。此后,即使启用了桥br-vlan2159,也不会发生任何错误。

任何想法都欢迎。

Answers:


5

我相信您的问题是由于修补了的内核错误net-next

初始化网桥时,由于尝试重新哈希表的错误,导致多播侦听功能被禁用。IGMP侦听从每一个转发HBH ICMPv6多址查询答复,这导致邻居表填满了停止桥ff02::从组播回复它应该邻居看(试ip -6 neigh show nud all)。

正确的解决方法是尝试重新启用监听,例如:echo 1 > /sys/class/net/eth0/bridge/multicast_snooping。另一种选择是使邻居表gc阈值大于广播域中的主机数。

补丁在这里


我不得不做echo 1 > /sys/class/net/br0/bridge/multicast_snooping
阿德里安·海涅

3

ip route show cache table all遇到此错误时会有什么回报?

arp -nip neigh show仅显示缓存中的某些条目。

ip route show cache table all 将会更加详细(并将包含许多与v6相关的条目)。

我们尝试了明显的调整,并提高了/ proc / sys / net / ipv4 / neigh / default / gc_thresh *

您是否对ipv6做过同样的事情?为我们解决了问题

再见

-creis


1
ip route show cache table都没有显示更多条目。我通过设置net.ipv6.neigh.default.gc_thresh1 = 1024 net.ipv6.neigh.default.gc_thresh2 = 2048 net.ipv6.neigh.default.gc_thresh3 = 4096)sysctl 修复了错误消息。
2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.