Je lutte depuis longtemps avec ce problème difficile à reproduire. J'utilise le noyau Linux v3.1.0, et parfois le routage vers quelques adresses IP ne fonctionne pas. Ce qui semble se produire, c'est qu'au lieu d'envoyer le paquet à la passerelle, le noyau traite l'adresse de destination comme locale et essaie d'obtenir son adresse MAC via ARP.
Par exemple, maintenant mon adresse IP actuelle est 172.16.1.104/24, la passerelle est 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
Je peux cingler quelques adresses, mais pas 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
Lorsque j'essaie d'envoyer une requête ping à 172.16.0.59, je peux voir dans tcpdump qu'une demande ARP a été envoyée:
# 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
et / proc / net / arp a une entrée incomplète pour 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
Veuillez noter que 172.16.0.59 est accessible depuis ce LAN à partir d'autres ordinateurs.
Quelqu'un a-t-il une idée de ce qui se passe? Merci.
mise à jour: réponses aux commentaires ci-dessous:
- il n'y a pas d'interfaces à part eth0 et lo
- la demande ARP ne peut pas être vue à l'autre bout, mais c'est ainsi que cela devrait fonctionner. le principal problème est qu'une requête ARP ne doit même pas être envoyée en premier lieu
- le problème persiste même si j'ajoute une route explicite avec la commande "route add -host 172.16.0.59 gw 172.16.1.254 dev eth0"
la source
ifconfig -a
? Avez-vous d'autres interfaces / IP attribuées à cet hôte?Réponses:
Il s'agit en effet d'un bug du noyau Linux, probablement depuis la version 2.6.39. J'ai posté la question sur les listes lkml et netdev (voir le fil sur https://lkml.org/lkml/2011/11/18/191 ), et elle vient d'être discutée dans un autre fil netdev sur http: // www .spinics.net / lists / netdev / msg179687.html
La solution actuelle consiste maintenant à redémarrer ou à vider toutes les routes et à attendre 10 minutes pour que les redirections icmp expirent. Pour éviter que cela ne se reproduise,
aide.
la source
Le masque de sous-réseau par défaut 172.16.XX est 255.255.0.0, vous l'avez reconfiguré en 255.255.255.0. Ainsi, les éléments hôtes 172.16.0.x et 172.16.1.x se trouvent sur des sous-réseaux différents. ainsi, il essaiera de le ROUTER via la passerelle par défaut.
Changer votre masque de sous-réseau en 255.255.0.0 résoudra le problème.
Pouvez-vous fournir un diagramme. Si vous ne pouvez pas dessiner un réseau, il ne peut pas être réparé (vieux proverbe des ingénieurs réseau ... par moi!).
À votre santé,
la source