Ping tutti i nodi IPv6 in un canale

Uni pochi ghjorni restanu finu à l'iniziu di un novu flussu à a tarifa "Ingegnere di rete" da OTUS. In questu sensu, vulemu sparte cun voi una traduzzione di materiale utile nantu à u tema.

Ping tutti i nodi IPv6 in un canale

Una serie di post di blog nantu à cunsiglii è trucchi per risolve i prublemi di ping IPv6 (ICMPv6 Echo Request/Echo Reply)

Per piacè nutate chì aghju utilizatu Linux (in particulare Fedora 31), in ogni modu, a sintassi di cumandamentu ping per altri sistemi operativi deve esse sperendu assai simili.

Ping tutti i nodi IPv6 in un canale

U primu cunsigliu più simplice hè di ping tutti i nodi IPv6 nantu à u ligame.

IPv6 usa indirizzi multicast per tutti i tipi di cumunicazioni unu à parechje. Ùn ci hè micca indirizzi IPv6 broadcast (o broadcast). Questu distingue IPv6 da IPv4, induve ci sò parechji tipi di indirizzi broadcast, per esempiu, l'indirizzu "limited broadcast" 255.255.255.255 [RFC1122].

In ogni casu, ci hè un indirizzu IPv6 "all-nodes multicast", cusì avemu aduprà quellu per ping tutti i nodi IPv6 nantu à u ligame. (Un indirizzu "broadcast" hè in realtà solu un indirizzu multicast speciale chjamatu, chì hè un gruppu multicast chì include tutti i nodi. Nota chì, per esempiu, u bit "gruppu" o l'indirizzu multicast hè attivatu in l'indirizzi di trasmissione Ethernet à a capa di ligame. ).

Indirizzu IPv6 multicast di tutti i nodi per u canali: ff02::1. ff denota un indirizzu IPv6 multicast. U prossimu 0 hè a parte di a bandiera cù bits unset.

listing 2 definisce l'area di un gruppu multicast. A cuntrariu di l'indirizzi IPv4 multicast, l'indirizzi IPv6 multicast anu un scopu. U valore di u scopu indica a parte di a reta nantu à quale un pacchettu multicast hè permessu di esse trasmessu. Quandu un pacchettu righjunghji u cunfini di u scopu specificatu, u pacchettu deve esse abbandunatu, indipendentemente da u so campu Hop Count ùn hè micca zero. Di sicuru, se u count hop righjunghji cero prima di ghjunghje à u cunfini di u gruppu multicast specificatu, hè ancu resettatu immediatamente. Eccu una lista cumpleta di IPv6 multicast scope.

Infine ::1 specifica un gruppu multicast di tutti i nodi.

Circa l'indirizzu ff02::1 Hè da nutà chì hè ambiguu. In un host IPv6 cù parechje interfacce, cum'è un router o un host multihome, l'indirizzu ff02::1 ùn ci hè nunda induve pudete specificà quale interfaccia per mandà richieste di eco ICMPv6 o aspittà di riceve risposte di eco ICMPv6 quandu ghjunghjenu. ff02::1 hè validu è pò esse usatu in qualsiasi interfacce è canali attaccati à u node multi-interfaccia.

Allora, quandu avemu ping tutti i nodi IPv6 nantu à un ligame, avemu bisognu di qualcosa di dì ancu l'utilità ping per IPv6, quale interfaccia aduprà.

Definizione di Interfacce - Opzione di Linea di Command

Comu avemu digià vistu, l'indirizzu multicast di tutti i nodi chì vulemu usà hè - ff02::1 - ùn furnisce micca infurmazione nantu à quale interfaccia per mandà è riceve pacchetti di dumanda di ecu ICMPv6 è risposta di eco.

Allora, cumu spicificà l'interfaccia per esse aduprata per u spaziu di indirizzu multicast o spaziu di indirizzu unicast Link-Local?

U modu primu è più ovvi hè di furnisce cum'è un paràmetru à l'applicazione chì avemu aduprà.

Per utilità ping l'avemu furnitu attraversu l'opzione -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 ~]$

Utilizendu stu ping multicast all-nodes, avemu ricevutu risposte da 6 nodi IPv6. I risposti sò vinuti da l'indirizzi di u nodu IPv6 Link-Local, cuminciendu cù u prefissu fe80::/10.

chì ping ùn cuntinueghja à mandà richieste di eco ICMPv6 indefinitu finu à l'interruzzione, di solitu specifichi u numeru di pacchetti per mandà via l'opzione -c. Tuttavia, questu impedisce ancu ping di accettà è di visualizà più di una risposta di eco ICMPv6 quandu invià una dumanda di eco ICMPv6 multicast. Invece, avemu usatu l'opzione -w per specificà chì u ping deve esse cumpletu dopu à 1 secondu, ùn importa quante richieste di eco ICMPv6 o risposti di eco sò stati mandati o ricevuti.

Un'altra cosa à prestà attenzione hè (DUP!) uscita nantu à a seconda è risposte sussegwente. Questi pacchetti sò identificati cum'è risposte duplicate perchè anu u listessu valore di sequenza ICMP cum'è e richieste individuali di eco ICMPv6 chì sò state mandate in u primu locu. Appariscenu perchè una dumanda di eco multicast ICMPv6 risulta in parechje risposte unicast individuali. U numaru di duplicati hè ancu indicatu in u riassuntu di statistiche.

Definizione di l'interfaccia - ID di zona

Un altru modu per espose una interfaccia per l'usu hè cum'è parte di un paràmetru di indirizzu IPv6.

Pudemu vede un esempiu di questu in l'output ping, induve l'indirizzi di l'ospiti IPv6 chì rispondenu anu ancu u suffissu. %enp3s2, per esempiu:

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

Stu metudu di specificà l'interfaccia hè formalmente descrittu in [RFC4007], "Architettura di Indirizzu Definita IPv6". Ancu s'ellu sò generalmente chjamati l'interfaccia di u sistema operatore, in realtà definiscenu qualcosa di più generale - una "zona" o "scopu".

U mutivu di avè zoni più generali o zoni di scopu hè chì, cum'è citatu in [RFC4007], un node IPv6 pò avè parechje interfacce IPv6 differenti cunnessi à u stessu canali. Queste interfacce sò membri di a stessa zona.

Deve esse pussibule di aggrupà parechje interfacce in una zona sottu u sistema operatore; Attualmente ùn sò micca sapè se questu hè pussibule sottu Linux o cumu fà.

Utilizendu u suffissu %<zone_id>, pudemu sguassà l'opzione di linea di cummanda -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 ~]$

Risposte di l'indirizzu Link-Local

Da stu ping multicast all-nodes avemu ricevutu un totale di 6 risposte uniche.

Queste risposte venenu da l'indirizzi d'ospiti IPv6 unicast Link-Local. Per esempiu, quì hè a prima risposta:

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

L'indirizzi IPv6 Unicast Link-Local sò richiesti nantu à tutte l'interfacce IPv6 attivate [RFC4291], "IP Versione 6 Addressing Architecture". U mutivu di questu hè chì un node IPv6 hà sempre automaticamente un indirizzu IPv6 unicast, chì pò almenu aduprà per cumunicà cù altri nodi nantu à i so ligami direttamente cunnessi. Questu include a cumunicazione cù l'applicazioni in altri host via l'indirizzi di l'ospiti Link-Local.

Questu simplifica u disignu è l'implementazione di protokolli cum'è IPv6 Neighbor Discovery è OSPFv3. Permette ancu di l'applicazioni di l'utilizatori finali nantu à l'ospiti per cumunicà nantu à u canale senza avè bisognu di alcuna altra infrastruttura IPv6 di supportu in u canali. A cumunicazione diretta trà l'ospiti IPv6 cunnessi ùn necessita micca un router IPv6 o un servitore DHCPv6 nantu à a cunnessione.

L'indirizzi Link-Local cumincianu cù un prefissu di 10-bit fe80, seguita da 54 zero bit è dopu un identificatore d'interfaccia di 64 bit (IID). In a prima risposta sopra 2392:6213:a15b:66ff è un IID a 64 bit.

Multicast in loop

Per automaticamente, i pacchetti multicast sò tornati internamente à u node chì li hà mandatu. Questu succede per l'indirizzu IPv6 è IPv4.

U mutivu di stu cumpurtamentu predeterminatu hè chì quandu i pacchetti multicast sò mandati, ci pò ancu esse una applicazione multicast locale in ascolta in esecuzione nantu à l'ospitu di u mandamentu stessu, è ancu in un locu in a reta. Questa applicazione locale deve ancu riceve pacchetti multicast.

Pudemu vede stu loop locale multicast in u nostru output 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!)
...

A prima è a risposta più veloce (0,106 ms cumparatu cù 0,453 ms) vene da l'indirizzu Link-Local cunfiguratu nantu à l'interfaccia stessa. enp3s2.

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

Utilità ping furnisce un modu per suppressione u feedback multicast locale utilizendu u paràmetru -L. Se mandemu un ping multicast di tutti i nodi cù questa bandiera, e risposte sò limitate à i nodi remoti. Ùn ricevemu micca una risposta da l'indirizzu Link-Local di l'interfaccia di mandatu.

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

Ping Link-Indirizzi lucali

Comu pudete intuisce, l'indirizzi unicast Link-Local per elli stessi ùn furnisce micca abbastanza informazioni per indicà quale interfaccia aduprà per ghjunghje. Cum'è cù u ping multicast all-nodes, avemu ancu bisognu di specificà l'interfaccia cum'è un paràmetru di linea di cummanda ping o l'ID di zona cù l'indirizzu quandu ping l'indirizzi Link-Local.

Sta volta pudemu usà -cper limità u numeru di pacchetti è risposte mandate è ricevute ping, postu chì facemu 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 (tutti) altri indirizzi IPv6?

In questu articulu, avemu vistu cumu fà ping tutti i nodi IPv6 nantu à un canale utilizendu un indirizzu IPv6 multicast di tutti i nodi. ff02::1. Avemu vistu ancu cumu specificà quale interfaccia per utilizà cù un indirizzu IPv6 multicast di tutti i nodi, postu chì l'indirizzu stessu ùn pò micca furnisce sta informazione. Avemu usatu sia l'opzione di linea di cummanda ping, o specificatu l'interfaccia cù u suffissu %<zone_id>.

Allora avemu amparatu nantu à l'indirizzi unicast Link-Local, chì sò indirizzi utilizati per risponde à e dumande di eco ICMPv6 multicast di tutti i nodi.

Avemu vistu ancu cumu i pacchetti multicast sò tornati à u node di mandatu per automaticamente è cumu disattivà questu per l'utilità. ping.

Infine, avemu ping un unicu indirizzu Link-Local usendu u suffissu %<zone_id>, Siccomu l'indirizzi Link-Local stessi ùn furnisce micca infurmazioni nantu à l'interfaccia in uscita.

Allora chì circate di ping tutti l'altri nodi è uttene i so indirizzi unicast globale (GUA) (vale à dì, i so indirizzi publichi in Internet) o i so indirizzi unicast lucali unichi (ULA)? Fighjeremu questu in u prossimu blog post.

Hè tuttu.

Pudete sapè più nantu à u nostru cursu à note di ghjornu apertu.

Source: www.habr.com

Add a comment