Überlauf der Nachbartabelle auf Linux-Hosts im Zusammenhang mit Bridging und IPv6

9

Hinweis: Ich habe bereits eine Problemumgehung für dieses Problem (wie unten beschrieben), daher handelt es sich nur um eine Frage, die Sie wissen möchten.

Ich habe ein produktives Setup mit ungefähr 50 Hosts, einschließlich Blades mit Xen 4 und Equallogics, die iscsi bereitstellen. Alle xen dom0s sind fast einfach Debian 5. Das Setup enthält mehrere Bridges auf jedem dom0, um xen Bridged Networking zu unterstützen. Insgesamt gibt es zwischen 5 und 12 Brücken auf jedem Dom0, die jeweils einen VLAN bedienen. Keiner der Hosts hat das Routing aktiviert.

Zu einem bestimmten Zeitpunkt haben wir einen der Computer auf eine neue Hardware einschließlich eines RAID-Controllers verschoben und daher einen Upstream-Kernel 3.0.22 / x86_64 mit Xen-Patches installiert. Auf allen anderen Computern wird der Debian-Xen-Dom0-Kernel ausgeführt.

Seitdem haben wir auf allen Hosts im Setup alle ~ 2 Minuten die folgenden Fehler festgestellt:

[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.

Die arp-Tabelle (arp -n) zeigte nie mehr als 20 Einträge auf jeder Maschine. Wir haben die offensichtlichen Verbesserungen ausprobiert und die erhöht

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

Werte. Endlich bis 16384 Einträge, aber keine Auswirkung. Nicht einmal das Intervall von ~ 2 Minuten hat sich geändert, was mich zu dem Schluss führte, dass dies völlig unabhängig ist. tcpdump zeigte auf keiner Schnittstelle ungewöhnlichen IPv4-Verkehr. Das einzig interessante Ergebnis von tcpdump waren IPv6-Pakete, die wie folgt platzten:

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

Das brachte mich auf die Idee, dass das Problem möglicherweise mit IPv6 zusammenhängt, da wir in diesem Setup keine IPv6-Dienste haben.

Der einzige andere Hinweis war das Zusammentreffen des Host-Upgrades mit dem Beginn der Probleme. Ich habe den fraglichen Host ausgeschaltet und die Fehler waren verschwunden. Dann habe ich anschließend die Brücken auf dem Host heruntergefahren und als ich eine bestimmte Brücke heruntergefahren habe (ifconfig down):

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

Die Fehler gingen wieder weg. Wie Sie sehen können, enthält die Bridge keine IPv4-Adresse und ihr einziges Mitglied ist eth0.2159, sodass kein Datenverkehr sie überqueren sollte. Brücke und Schnittstelle .2159 / .2157 / .2158, die bis auf das VLAN, mit dem sie verbunden sind, in allen Aspekten identisch sind, hatten beim Herunterfahren keine Auswirkung. Jetzt habe ich ipv6 auf dem gesamten Host über sysctl net.ipv6.conf.all.disable_ipv6 deaktiviert und neu gestartet. Danach treten auch bei aktivierter Bridge br-vlan2159 keine Fehler mehr auf.

Ideen sind willkommen.

tim
quelle

Antworten:

5

Ich glaube, Ihr Problem liegt an einem Kernel-Fehler, der behoben wurde net-next.

Multicast-Snooping wird deaktiviert, wenn die Bridge aufgrund eines Fehlers beim erneuten Aufbereiten der Tabelle initialisiert wird. IGMP-Snooping verhindert, dass die Bridge jede HBH ICMPv6-Multicast-Abfrageantwort weiterleitet, was dazu führt, dass die Nachbartabelle mit ff02::Nachbarn aus Multicast-Antworten gefüllt wird , die nicht angezeigt werden sollten (Versuch ip -6 neigh show nud all).

Die richtige Problemumgehung besteht darin, zu versuchen, das Snooping wie folgt wieder zu aktivieren : echo 1 > /sys/class/net/eth0/bridge/multicast_snooping. Die Alternative besteht darin, die Schwellenwerte für die gc der Nachbartabelle größer als die Anzahl der Hosts in der Broadcast-Domäne zu machen.

Der Patch ist da .

dbavatar
quelle
Was ich tun musste echo 1 > /sys/class/net/br0/bridge/multicast_snooping.
Adrian Heine
3

Was ist die Rückkehr, ip route show cache table allwenn dieser Fehler auftritt?

arp -noder ip neigh showzeigt nur einige der Einträge im Cache an.

ip route show cache table all wird viel detaillierter sein (und viele v6-bezogene Einträge enthalten).

Wir haben die offensichtlichen Verbesserungen ausprobiert und / proc / sys / net / ipv4 / neigh / default / gc_thresh * ausgelöst.

Hast du dasselbe für ipv6 gemacht? das hat das problem für uns gelöst

Tschüss,

- creis

creis
quelle
1
ip route show cache table alle enthüllten nicht viel mehr Einträge. Ich habe die Fehlermeldungen durch Einstellen net.ipv6.neigh.default.gc_thresh1 = 1024 net.ipv6.neigh.default.gc_thresh2 = 2048 net.ipv6.neigh.default.gc_thresh3 = 4096)über sysctl behoben .
Tim