Linux-Routing-Fehler?

9

Ich habe seit einiger Zeit mit diesem nicht leicht reproduzierbaren Problem zu kämpfen. Ich verwende den Linux-Kernel v3.1.0 und manchmal funktioniert das Routing zu einigen IP-Adressen nicht. Was zu passieren scheint, ist, dass der Kernel anstelle des Sendens des Pakets an das Gateway die Zieladresse als lokal behandelt und versucht, seine MAC-Adresse über ARP abzurufen.

Zum Beispiel ist meine aktuelle IP-Adresse jetzt 172.16.1.104/24, das Gateway ist 172.16.1.254:

# ifconfig eth0 eth0      Link encap:Ethernet  HWaddr 00:1B:63:97:FC:DC
          inet addr:172.16.1.104  Bcast:172.16.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:230772 errors:0 dropped:0 overruns:0 frame:0
          TX packets:171013 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:191879370 (182.9 Mb)  TX bytes:47173253 (44.9 Mb)
          Interrupt:17

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.16.1.254    0.0.0.0         UG    0      0        0 eth0
172.16.1.0      0.0.0.0         255.255.255.0   U     1      0        0 eth0

Ich kann ein paar Adressen anpingen, aber nicht 172.16.0.59:

# ping -c1 172.16.1.254
PING 172.16.1.254 (172.16.1.254) 56(84) bytes of data.
64 bytes from 172.16.1.254: icmp_seq=1 ttl=64 time=0.383 ms

--- 172.16.1.254 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.383/0.383/0.383/0.000 ms
root@pozsybook:~# ping -c1 172.16.0.1
PING 172.16.0.1 (172.16.0.1) 56(84) bytes of data.
64 bytes from 172.16.0.1: icmp_seq=1 ttl=63 time=5.54 ms

--- 172.16.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 5.545/5.545/5.545/0.000 ms
root@pozsybook:~# ping -c1 172.16.0.2
PING 172.16.0.2 (172.16.0.2) 56(84) bytes of data.
64 bytes from 172.16.0.2: icmp_seq=1 ttl=62 time=7.92 ms

--- 172.16.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 7.925/7.925/7.925/0.000 ms
root@pozsybook:~# ping -c1 172.16.0.59
PING 172.16.0.59 (172.16.0.59) 56(84) bytes of data.
From 172.16.1.104 icmp_seq=1 Destination Host Unreachable

--- 172.16.0.59 ping statistics ---
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms

Beim Versuch, 172.16.0.59 zu pingen, kann ich in tcpdump sehen, dass eine ARP-Anforderung gesendet wurde:

# tcpdump -n -i eth0|grep ARP
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
15:25:16.671217 ARP, Request who-has 172.16.0.59 tell 172.16.1.104, length 28

und / proc / net / arp hat einen unvollständigen Eintrag für 172.16.0.59:

# grep 172.16.0.59 /proc/net/arp
172.16.0.59      0x1         0x0         00:00:00:00:00:00     *        eth0

Bitte beachten Sie, dass 172.16.0.59 über dieses LAN von anderen Computern aus zugänglich ist .

Hat jemand eine Vorstellung davon, was los ist? Vielen Dank.

Update: Antworten auf die folgenden Kommentare:

  • außer eth0 und lo gibt es keine schnittstellen
  • Die ARP-Anforderung ist am anderen Ende nicht zu sehen, aber so sollte es funktionieren. Das Hauptproblem besteht darin, dass eine ARP-Anforderung nicht einmal an erster Stelle gesendet werden sollte
  • Das Problem besteht auch dann, wenn ich eine explizite Route mit dem Befehl "route add -host 172.16.0.59 gw 172.16.1.254 dev eth0" hinzufüge.
Balázs Pozsár
quelle
Ich denke, dies ist eine Art Standardverhalten. Sehen wir uns auch die ARP-Tabelle an. Die Arp-Tabelle des anderen Endes kann hier nützlich sein.
SpacemanSpiff
Wie behebt man das? Funktioniert das Setzen einer hostspezifischen Route wieder? Ich frage mich, ob Sie irgendwie eine ICMP-Umleitung erhalten, die den Host glauben lässt, das Ziel sei lokal.
Paul
Es scheint, als würde die Antwort von arp nicht zurückkommen. Können Sie tcpdump auf dem 172.16.0.59-Host? Ist das ein VM-Gast? Überprüfen Sie auch den Netzwerkverkehr auf dem Host.
AndreasM
Können Sie bitte die Ausgabe von posten ifconfig -a? Haben Sie diesem Host andere Schnittstellen / IPs zugewiesen?
Khaled
Ich habe die Frage mit den Antworten aktualisiert
Balázs Pozsár

Antworten:

7

Es ist in der Tat ein Linux-Kernel-Fehler, wahrscheinlich seit Version 2.6.39. Ich habe die Frage in lkml- und netdev-Listen gepostet (siehe den Thread unter https://lkml.org/lkml/2011/11/18/191 ) und sie wurde gerade in einem anderen netdev-Thread unter http: // www besprochen .spinics.net / lists / netdev / msg179687.html

Die aktuelle Lösung ist jetzt entweder ein Neustart oder das Löschen aller Routen und das Warten von 10 Minuten, bis die icmp-Weiterleitungen ablaufen. Um zu verhindern, dass es erneut passiert,

echo 0 >/proc/sys/net/ipv4/conf/eth0/accept_redirects

hilft.

Balázs Pozsár
quelle
Leider scheint das oben genannte nicht zu helfen ..
Sivann
Versuchen Sie es für alle Schnittstellen: find / proc / sys / net-name accept_redirects | while read x; echo -n 0> $ x; fertig oder vielleicht haben Sie einen anderen Fehler
Balázs Pozsár
Danke, ich hatte es bereits für alle Schnittstellen aktiviert. Die IPs stammen aus IPSEC-Tunneln (diese Maschine hat Hunderte von ihnen) und es sind immer 5-10 von ihnen (172.x) in der arp-Tabelle in der eth0-Schnittstelle aufgeführt, die mit (unvollständiger) HWaddress und fehlendem HW-Typ aufgelistet ist. Diese scheinen abzulaufen und neue treten an ihre Stelle, aber manchmal ist ein Neustart erforderlich.
Sivann
-1

Die Standard-Subnetzmaske 172.16.XX ist 255.255.0.0. Sie haben sie auf 255.255.255.0 neu konfiguriert. Die Hosts-Dinge 172.16.0.x und 172.16.1.x befinden sich also in verschiedenen Subnetzen. Daher wird versucht, es durch das Standard-Gateway zu leiten.

Wenn Sie Ihre Subnetzmaske auf 255.255.0.0 ändern, wird das Problem behoben.

Können Sie ein Diagramm bereitstellen? Wenn Sie kein Netzwerk zeichnen können, kann es nicht repariert werden (altes Netzwerkingenieur-Sprichwort ... von mir!).

Prost,

Der Unix-Hausmeister
quelle
Welche Web-App oder leichte Desktop-App würden Sie zum Zeichnen von Netzwerkdiagrammen empfehlen?
Belmin Fernandez
es hat nichts mit der "Standard" -Netzmaske zu tun. Wie auch immer, siehe meine Antwort oben.
Balázs Pozsár
Danke für die Bewertung. Warum generiert der Router Ihrer Meinung nach ICMP-Weiterleitungen?
Der Unix-Hausmeister
Der Router generiert Weiterleitungen, da der Host ein anderes Gateway verwenden sollte. Ich denke, Ihr Verständnis des Problems ist ein Fehler. Es sei denn, Sie möchten mich anders erziehen
The Unix Janitor
Bitte lesen Sie die Themen in der akzeptierten Antwort verlinkt. Das Problem ist, dass diese Routing-Informationen nicht verworfen werden, obwohl dies der Fall sein sollte. Es ist kein Problem mit dem Router / Gateway.
Balázs Pozsár