Pingez tous les nƓuds IPv6 sur un canal

Il reste quelques jours avant le dĂ©but d'un nouveau flux au rythme "IngĂ©nieur rĂ©seau" de l'OTUS. À cet Ă©gard, nous aimerions partager avec vous une traduction de documents utiles sur le sujet.

Pingez tous les nƓuds IPv6 sur un canal

Une série d'articles de blog sur des trucs et astuces pour résoudre les problÚmes de ping IPv6 (ICMPv6 Echo Request/Echo Reply)

Veuillez noter que j'utilise Linux (plus prĂ©cisĂ©ment Fedora 31), cependant la syntaxe de la commande ping pour les autres systĂšmes d'exploitation devrait ĂȘtre trĂšs similaire.

Pingez tous les nƓuds IPv6 sur un canal

Le premier et le plus simple conseil consiste Ă  envoyer une requĂȘte ping Ă  tous les nƓuds IPv6 sur le lien.

IPv6 utilise des adresses de multidiffusion pour tous les types de communications un-Ă -plusieurs. Il n’y a pas d’adresses IPv6 de diffusion (ou de diffusion). Cela distingue IPv6 d'IPv4, oĂč il existe plusieurs types d'adresses de diffusion, par exemple l'adresse de « diffusion limitĂ©e » 255.255.255.255 [RFC1122].

Cependant, il existe une adresse IPv6 « multidiffusion sur tous les nƓuds », nous l'utiliserons donc pour envoyer une requĂȘte ping Ă  tous les nƓuds IPv6 sur la liaison. (Une adresse de « diffusion » est en fait simplement une adresse de multidiffusion spĂ©cialement nommĂ©e, qui est un groupe de multidiffusion qui inclut tous les nƓuds. Notez que, par exemple, le bit « groupe » ou d'adresse de multidiffusion est activĂ© dans les adresses de diffusion Ethernet au niveau de la couche liaison. ).

Adresse IPv6 de multidiffusion sur tous les nƓuds pour le canal : ff02::1. ff dĂ©signe une adresse IPv6 de multidiffusion. Le 0 suivant est la partie du drapeau avec les bits non dĂ©finis.

Suivant 2 dĂ©finit la zone d'un groupe multicast. Contrairement aux adresses IPv4 de multidiffusion, les adresses IPv6 de multidiffusion ont une portĂ©e. La valeur de portĂ©e indique la partie du rĂ©seau sur laquelle un paquet de multidiffusion peut ĂȘtre transmis. Une fois qu'un paquet atteint la limite de la portĂ©e spĂ©cifiĂ©e, le paquet doit ĂȘtre abandonnĂ©, que son champ Hop Count soit diffĂ©rent de zĂ©ro ou non. Bien entendu, si le nombre de sauts atteint zĂ©ro avant d’atteindre la limite spĂ©cifiĂ©e du groupe de multidiffusion, il est Ă©galement immĂ©diatement rĂ©initialisĂ©. Voici une liste complĂšte des portĂ©es de multidiffusion IPv6.

Enfin, le ::1 spĂ©cifie un groupe de multidiffusion composĂ© de tous les nƓuds.

À propos de l'adresse ff02::1 Il convient de noter que c'est ambigu. Sur un hĂŽte IPv6 dotĂ© de plusieurs interfaces, tel qu'un routeur ou un hĂŽte multirĂ©sident, l'adresse ff02::1 il n'y a rien oĂč vous pouvez spĂ©cifier Ă  quelle interface envoyer les demandes d'Ă©cho ICMPv6 ou vous attendre Ă  recevoir des rĂ©ponses d'Ă©cho ICMPv6 Ă  leur arrivĂ©e. ff02::1 est valide et peut ĂȘtre utilisĂ© sur n’importe quelle interface et canal attachĂ© au nƓud multi-interface.

Ainsi, lorsque nous pingons tous les nƓuds IPv6 sur une liaison, nous devons Ă©galement informer l'utilitaire ping pour IPv6, quelle interface utiliser.

Définition des interfaces - Option de ligne de commande

Comme nous l'avons dĂ©jĂ  vu, l'adresse de multidiffusion de tous les nƓuds que nous souhaitons utiliser est - ff02::1 - ne fournit aucune information sur l'interface sur laquelle envoyer et recevoir les paquets de demande d'Ă©cho et de rĂ©ponse d'Ă©cho ICMPv6.

Alors, comment spĂ©cifier l'interface Ă  utiliser pour l'espace d'adressage multicast ou l'espace d'adressage Link-Local unicast ?

La premiĂšre et la plus Ă©vidente consiste Ă  le fournir comme paramĂštre Ă  l’application que nous utilisons.

Pour l'utilité ping nous le fournissons via l'option -I.

[mark@opy ~]$ ping -w 1 -I enp3s2 ff02::1
ping: Warning: source address might be selected on device other than: enp3s2
PING ff02::1(ff02::1) from :: enp3s2: 56 data bytes
64 bytes from fe80::1d36:1fff:fefd:82be%enp3s2: icmp_seq=1 ttl=64 time=0.438 ms
64 bytes from fe80::f31c:ccff:fe26:a6d9%enp3s2: icmp_seq=1 ttl=64 time=0.589 ms (DUP!)
64 bytes from fe80::7e31:f5ff:fe1b:9fdb%enp3s2: icmp_seq=1 ttl=64 time=5.15 ms (DUP!)
64 bytes from fe80::f7f8:15ff:fe6f:be6e%enp3s2: icmp_seq=1 ttl=64 time=58.0 ms (DUP!)
64 bytes from fe80::877d:4ff:fe1a:b881%enp3s2: icmp_seq=1 ttl=64 time=62.3 ms (DUP!)
64 bytes from fe80::877d:4ff:fe1a:ad79%enp3s2: icmp_seq=1 ttl=64 time=62.8 ms (DUP!)
 
--- ff02::1 ping statistics ---
1 packets transmitted, 1 received, +5 duplicates, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.438/31.544/62.786/29.566 ms
[mark@opy ~]$

En utilisant ce ping multicast sur tous les nƓuds, nous avons reçu des rĂ©ponses de 6 nƓuds IPv6. Les rĂ©ponses provenaient des adresses de nƓuds Link-Local IPv6, en commençant par le prĂ©fixe fe80::/10.

Que ping ne continue pas Ă  envoyer des requĂȘtes d'Ă©cho ICMPv6 indĂ©finiment jusqu'Ă  ce que nous l'interrompions, nous spĂ©cifions gĂ©nĂ©ralement le nombre de paquets Ă  envoyer via l'option -c. Cependant, cela empĂȘche Ă©galement le ping d'accepter et d'afficher plusieurs rĂ©ponses d'Ă©cho ICMPv6 lors de l'envoi d'une demande d'Ă©cho ICMPv6 multidiffusion. Au lieu de cela, nous avons utilisĂ© l'option -w pour spĂ©cifier que le ping doit se terminer aprĂšs 1 seconde, quel que soit le nombre de demandes d'Ă©cho ou de rĂ©ponses d'Ă©cho ICMPv6 envoyĂ©es ou reçues.

Une autre chose Ă  laquelle il faut faire attention est (DUP!) sortie sur la deuxiĂšme rĂ©ponse et les suivantes. Ces paquets sont identifiĂ©s comme des rĂ©ponses en double car ils ont la mĂȘme valeur de sĂ©quence ICMP que les demandes d'Ă©cho ICMPv6 individuelles envoyĂ©es en premier lieu. Ils apparaissent car une demande d'Ă©cho de multidiffusion ICMPv6 entraĂźne plusieurs rĂ©ponses individuelles de monodiffusion. Le nombre de doublons est Ă©galement indiquĂ© dans la synthĂšse des statistiques.

Définition des interfaces - ID de zone

Une autre façon d’exposer une interface Ă  utiliser consiste Ă  l’intĂ©grer Ă  un paramĂštre d’adresse IPv6.

Nous pouvons en voir un exemple dans la sortie ping, oĂč les adresses des hĂŽtes IPv6 rĂ©pondants portent Ă©galement le suffixe %enp3s2, Par exemple:

64 bytes from fe80::1d36:1fff:fefd:82be%enp3s2: icmp_seq=1 ttl=64 time=0.438 ms

Cette mĂ©thode de spĂ©cification des interfaces est formellement dĂ©crite dans la [RFC4007], « Architecture d'adresse dĂ©finie IPv6 ». Bien qu’elles soient gĂ©nĂ©ralement appelĂ©es interface du systĂšme d’exploitation, elles dĂ©finissent en rĂ©alitĂ© quelque chose de plus gĂ©nĂ©ral : une « zone » ou une « portĂ©e ».

La raison pour laquelle il y a des zones plus gĂ©nĂ©rales ou des zones de portĂ©e est que, comme mentionnĂ© dans la [RFC4007], un nƓud IPv6 peut avoir plusieurs interfaces IPv6 diffĂ©rentes connectĂ©es au mĂȘme canal. Ces interfaces sont membres de la mĂȘme zone.

Il devrait ĂȘtre possible de regrouper plusieurs interfaces au sein d'une zone sous un systĂšme d'exploitation ; je ne sais pas actuellement si c'est possible sous [nom du systĂšme d'exploitation]. Linux et comment le faire.

Utiliser le suffixe %<zone_id>, nous pouvons supprimer l'option de ligne de commande -I ping.

[mark@opy ~]$ ping -w 1 ff02::1%enp3s2
PING ff02::1%enp3s2(ff02::1%enp3s2) 56 data bytes
64 bytes from fe80::2392:6213:a15b:66ff%enp3s2: icmp_seq=1 ttl=64 time=0.106 ms
64 bytes from fe80::1d36:1fff:fefd:82be%enp3s2: icmp_seq=1 ttl=64 time=0.453 ms (DUP!)
64 bytes from fe80::f31c:ccff:fe26:a6d9%enp3s2: icmp_seq=1 ttl=64 time=0.606 ms (DUP!)
64 bytes from fe80::7e31:f5ff:fe1b:9fdb%enp3s2: icmp_seq=1 ttl=64 time=6.23 ms (DUP!)
64 bytes from fe80::f7f8:15ff:fe6f:be6e%enp3s2: icmp_seq=1 ttl=64 time=157 ms (DUP!)
64 bytes from fe80::877d:4ff:fe1a:ad79%enp3s2: icmp_seq=1 ttl=64 time=159 ms (DUP!)
64 bytes from fe80::877d:4ff:fe1a:b881%enp3s2: icmp_seq=1 ttl=64 time=161 ms (DUP!)
64 bytes from fe80::23d:e8ff:feec:958c%enp3s2: icmp_seq=1 ttl=64 time=179 ms (DUP!)
 
--- ff02::1%enp3s2 ping statistics ---
1 packets transmitted, 1 received, +7 duplicates, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.106/82.858/179.216/81.281 ms
 
[mark@opy ~]$

Réponses d'adresse lien-local

De ce ping multidiffusion sur tous les nƓuds, nous avons reçu un total de 6 rĂ©ponses uniques.

Ces rĂ©ponses provenaient d’adresses d’hĂŽte IPv6 Link-Local en monodiffusion. Par exemple, voici la premiĂšre rĂ©ponse :

64 bytes from fe80::2392:6213:a15b:66ff%enp3s2: icmp_seq=1 ttl=64 time=0.106 ms

Les adresses IPv6 Unicast Link-Local sont requises sur toutes les interfaces compatibles IPv6 [RFC4291], « Architecture d'adressage IP version 6 ». La raison en est qu'un nƓud IPv6 dispose toujours automatiquement d'une adresse IPv6 unicast, qu'il peut au moins utiliser pour communiquer avec d'autres nƓuds sur ses liens directement connectĂ©s. Cela inclut la communication avec des applications sur d'autres hĂŽtes via des adresses d'hĂŽte Link-Local.

Cela simplifie la conception et la mise en Ɠuvre de protocoles tels que IPv6 Neighbour Discovery et OSPFv3. Il permet Ă©galement aux applications des utilisateurs finaux sur les hĂŽtes de communiquer sur le canal sans nĂ©cessiter aucune autre infrastructure IPv6 de support sur le canal. La communication directe entre les hĂŽtes IPv6 connectĂ©s ne nĂ©cessite pas de routeur IPv6 ou de serveur DHCPv6 sur la connexion.

Les adresses Link-Local commencent par un préfixe de 10 bits fe80, suivi de 54 bits zéro, puis d'un identifiant d'interface (IID) de 64 bits. Dans la premiÚre réponse ci-dessus 2392:6213:a15b:66ff est un IID 64 bits.

Multidiffusion en boucle

Par dĂ©faut, les paquets multicast sont renvoyĂ©s en interne au nƓud qui les a envoyĂ©s. Cela se produit pour l’adressage IPv6 et IPv4.

La raison de ce comportement par dĂ©faut est que lorsque des paquets de multidiffusion sont envoyĂ©s, il peut Ă©galement y avoir une application de multidiffusion locale d'Ă©coute exĂ©cutĂ©e sur l'hĂŽte Ă©metteur lui-mĂȘme, ainsi que quelque part sur le rĂ©seau. Cette application locale doit Ă©galement recevoir des paquets multicast.

Nous pouvons voir cette boucle locale de multidiffusion dans notre sortie ping :

[mark@opy ~]$ ping -w 1 ff02::1%enp3s2
PING ff02::1%enp3s2(ff02::1%enp3s2) 56 data bytes
64 bytes from fe80::2392:6213:a15b:66ff%enp3s2: icmp_seq=1 ttl=64 time=0.106 ms
64 bytes from fe80::1d36:1fff:fefd:82be%enp3s2: icmp_seq=1 ttl=64 time=0.453 ms (DUP!)
...

La premiĂšre et la plus rapide rĂ©ponse (0,106 ms contre 0,453 ms) provient de l'adresse Link-Local configurĂ©e sur l'interface elle-mĂȘme. enp3s2.

[mark@opy ~]$ ip addr show dev enp3s2 | grep fe80
    inet6 fe80::2392:6213:a15b:66ff/64 scope link noprefixroute 
[mark@opy ~]$

Utilitaire ping fournit un moyen de supprimer les commentaires de multidiffusion locale Ă  l'aide du paramĂštre -L. Si nous envoyons un ping multicast Ă  tous les nƓuds avec cet indicateur, alors les rĂ©ponses sont limitĂ©es aux nƓuds distants. Nous ne recevons pas de rĂ©ponse de l'adresse Link-Local de l'interface d'envoi.

[mark@opy ~]$ ping -L -w 1 ff02::1%enp3s2
PING ff02::1%enp3s2(ff02::1%enp3s2) 56 data bytes
64 bytes from fe80::1d36:1fff:fefd:82be%enp3s2: icmp_seq=1 ttl=64 time=0.383 ms
 
64 bytes from fe80::f31c:ccff:fe26:a6d9%enp3s2: icmp_seq=1 ttl=64 time=0.467 ms (DUP!)
...

Adresses locales du lien Ping

Comme vous pouvez le deviner, les adresses Link-Local en monodiffusion ne fournissent pas non plus suffisamment d'informations pour indiquer quelle interface utiliser pour les atteindre. Comme pour le ping multicast sur tous les nƓuds, nous devons Ă©galement spĂ©cifier l'interface en tant que paramĂštre de ligne de commande. ping ou ID de zone avec adresse lors du ping des adresses Link-Local.

Cette fois, nous pouvons utiliser -climiter le nombre de paquets et de réponses envoyés et reçus ping, puisque nous effectuons un ping unicast.

[mark@opy ~]$ ping -c 1 fe80::f31c:ccff:fe26:a6d9%enp3s2
 
PING fe80::f31c:ccff:fe26:a6d9%enp3s2(fe80::fad1:11ff:feb7:3704%enp3s2) 56 data bytes
64 bytes from fe80::f31c:ccff:fe26:a6d9%enp3s2: icmp_seq=1 ttl=64 time=0.395 ms
 
--- fe80::f31c:ccff:fe26:a6d9%enp3s2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.395/0.395/0.395/0.000 ms
[mark@opy ~]$

Ping (toutes) les autres adresses IPv6 ?

Dans cet article, nous avons vu comment envoyer une requĂȘte ping Ă  tous les nƓuds IPv6 sur un canal Ă  l'aide d'une adresse IPv6 de multidiffusion pour tous les nƓuds. ff02::1. Nous avons Ă©galement vu comment spĂ©cifier quelle interface utiliser avec une adresse IPv6 multicast tous nƓuds, puisque l'adresse elle-mĂȘme ne peut pas fournir cette information. Nous avons utilisĂ© soit l'option de ligne de commande ping, ou spĂ©cifiĂ© l'interface Ă  l'aide du suffixe %<zone_id>.

Nous avons ensuite dĂ©couvert les adresses Link-Local unicast, qui sont des adresses utilisĂ©es pour rĂ©pondre aux demandes d'Ă©cho ICMPv6 multicast de tous les nƓuds.

Nous avons Ă©galement vu comment les paquets multicast sont renvoyĂ©s par dĂ©faut au nƓud expĂ©diteur et comment dĂ©sactiver cela pour l'utilitaire. ping.

Enfin, nous avons envoyĂ© une requĂȘte ping Ă  une seule adresse Link-Local en utilisant le suffixe %<zone_id>, puisque les adresses Link-Local elles-mĂȘmes ne fournissent pas non plus d'informations sur l'interface sortante.

Alors, qu'en est-il d'un ping sur tous les autres nƓuds et d'obtenir leurs adresses de monodiffusion globales (GUA) (c'est-à-dire leurs adresses publiques sur Internet) ou leurs adresses de monodiffusion locales uniques (ULA) ? Nous y reviendrons dans le prochain article du blog.

C'est tout.

Vous pouvez en savoir plus sur notre cours sur notes de la journée portes ouvertes.

Source: habr.com

Achetez un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Achetez un hĂ©bergement web fiable avec protection DDoS, serveurs VPS et VDS | ProHoster