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.
quelle
ifconfig -a
? Haben Sie diesem Host andere Schnittstellen / IPs zugewiesen?Antworten:
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,
hilft.
quelle
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,
quelle