Ping alle IPv6-noder pÄ en kanal

Det gjenstÄr noen dager til starten av en ny strÞmning med hastigheten "NettverksingeniÞr" fra OTUS. I denne forbindelse vil vi gjerne dele med deg en oversettelse av nyttig materiale om emnet.

Ping alle IPv6-noder pÄ en kanal

En serie blogginnlegg om tips og triks for feilsĂžking av IPv6-pingproblemer (ICMPv6 Echo Request/Echo Reply)

VÊr oppmerksom pÄ at jeg bruker Linux (spesifikt Fedora 31), men ping-kommandosyntaksen for andre operativsystemer bÞr forhÄpentligvis vÊre veldig lik.

Ping alle IPv6-noder pÄ en kanal

Det fÞrste og enkleste tipset er Ä pinge alle IPv6-noder pÄ lenken.

IPv6 bruker multicast-adresser for alle typer en-til-mange-kommunikasjon. Det er ingen kringkasting (eller kringkasting) IPv6-adresser. Dette skiller IPv6 fra IPv4, hvor det finnes flere typer kringkastingsadresser, for eksempel "limited broadcast"-adressen 255.255.255.255 [RFC1122].

Imidlertid er det en "all-nodes multicast" IPv6-adresse, sÄ vi vil bruke den til Ä pinge alle IPv6-noder pÄ lenken. (En "broadcast"-adresse er egentlig bare en spesielt navngitt multicast-adresse, som er en multicast-gruppe som inkluderer alle noder. Merk at for eksempel "gruppe"- eller multicast-adressebiten er slÄtt pÄ i Ethernet-kringkastingsadresser pÄ lenkelaget ).

All-nodes multicast IPv6-adresse for kanalen: ff02::1. ff angir en multicast IPv6-adresse. Den neste 0-en er delen av flagget med ikke-innstilte biter.

Neste 2 definerer omrÄdet til en multicast-gruppe. I motsetning til multicast IPv4-adresser, har multicast IPv6-adresser et omfang. Omfangsverdien angir den delen av nettverket som en multicast-pakke tillates videresendt over. NÄr en pakke nÄr grensen til det spesifiserte omfanget, mÄ pakken droppes, uavhengig av om dens Hop Count-felt ikke er null. SelvfÞlgelig, hvis hopptellingen nÄr null fÞr den nÄr den spesifiserte multicast-gruppegrensen, tilbakestilles den ogsÄ umiddelbart. Her er en komplett liste over IPv6 multicast-omfang.

Til slutt, den ::1 spesifiserer en multicast-gruppe med alle noder.

Om adressen ff02::1 Det skal bemerkes at det er tvetydig. PÄ en IPv6-vert med flere grensesnitt, for eksempel en ruter eller multihomed vert, adressen ff02::1 det er ingenting der du kan spesifisere hvilket grensesnitt du skal sende ICMPv6 ekkoforespÞrsler til eller forvente Ä motta ICMPv6 ekkosvar nÄr de kommer. ff02::1 er gyldig og kan brukes pÄ alle grensesnittene og kanalene som er knyttet til multigrensesnittnoden.

SÄ nÄr vi pinger alle IPv6-noder pÄ en lenke, mÄ vi pÄ en eller annen mÄte ogsÄ fortelle verktÞyet ping for IPv6, hvilket grensesnitt som skal brukes.

Definere grensesnitt - Kommandolinjealternativ

Som vi allerede har sett, er all-nodes multicast-adressen vi Ăžnsker Ă„ bruke − ff02::1 - gir ingen informasjon om hvilket grensesnitt som skal sende og motta ICMPv6 ekkoforespĂžrsel og ekkosvarpakker.

SÄ hvordan spesifiserer vi grensesnittet som skal brukes for multicast-adresseomrÄdet eller unicast Link-Local-adresseomrÄdet?

Den fÞrste og mest Äpenbare mÄten er Ä gi den som en parameter til applikasjonen vi bruker.

For nytte ping vi gir det gjennom alternativet -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 ~]$

Ved Ă„ bruke dette multicast-pinget med alle noder, mottok vi svar fra 6 IPv6-noder. Svarene kom fra Link-Local IPv6-nodeadresser, som starter med prefikset fe80::/10.

At ping fortsetter ikke Ä sende ICMPv6 ekkoforespÞrsler pÄ ubestemt tid fÞr vi avbryter det, spesifiserer vi vanligvis antall pakker som skal sendes via -c-alternativet. Dette forhindrer imidlertid ogsÄ at ping godtar og viser mer enn ett ICMPv6 ekkosvar nÄr du sender en multicast ICMPv6 ekkoforespÞrsel. I stedet brukte vi alternativet -w for Ä spesifisere at ping skal fullfÞres etter 1 sekund, uansett hvor mange ICMPv6 ekkoforespÞrsler eller ekkosvar som ble sendt eller mottatt.

En annen ting Ä vÊre oppmerksom pÄ er (DUP!) utgang pÄ andre og pÄfÞlgende svar. Disse pakkene identifiseres som dupliserte svar fordi de har samme ICMP-sekvensverdi som de individuelle ICMPv6-ekkoforespÞrslene som ble sendt i utgangspunktet. De vises fordi en ICMPv6 multicast ekkoforespÞrsel resulterer i flere individuelle unicast-svar. Antall duplikater er ogsÄ angitt i statistikksammendraget.

Definere grensesnitt - Sone ID

En annen mÄte Ä eksponere et grensesnitt for bruk pÄ er som en del av en IPv6-adresseparameter.

Vi kan se et eksempel pÄ dette i ping-utgangen, der adressene til de svare IPv6-vertene ogsÄ har suffikset %enp3s2, for eksempel:

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

Denne metoden for Ă„ spesifisere grensesnitt er formelt beskrevet i [RFC4007], "IPv6 Defined Address Architecture." Selv om de vanligvis kalles operativsystemgrensesnittet, definerer de faktisk noe mer generelt - en "sone" eller "omfang".

Grunnen til Ă„ ha mer generelle soner eller scope-soner er at, som nevnt i [RFC4007], kan en IPv6-node ha flere forskjellige IPv6-grensesnitt koblet til samme kanal. Disse grensesnittene er medlemmer av samme sone.

Det burde vÊre mulig Ä gruppere flere grensesnitt innenfor en sone under et operativsystem. Jeg vet ikke pÄ dette tidspunktet om dette er mulig under Linux og hvordan man gjÞr det.

Bruker suffikset %<zone_id>, kan vi fjerne kommandolinjealternativet -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 ~]$

Link-lokal adresse-svar

Fra denne all-nodes multicast ping mottok vi totalt 6 unike svar.

Disse svarene kom fra unicast Link-Local IPv6-vertsadresser. For eksempel, her er det fĂžrste svaret:

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

Unicast Link-Local IPv6-adresser kreves pÄ alle IPv6-aktiverte grensesnitt [RFC4291], "IP Version 6 Addressing Architecture". Grunnen til dette er at en IPv6-node alltid automatisk har en unicast IPv6-adresse, som den i det minste kan bruke til Ä kommunisere med andre noder pÄ sine direkte tilkoblede lenker. Dette inkluderer kommunikasjon med applikasjoner pÄ andre verter via Link-Local vertsadresser.

Dette forenkler utformingen og implementeringen av protokoller som IPv6 Neighbour Discovery og OSPFv3. Det lar ogsÄ sluttbrukerapplikasjoner pÄ verter kommunisere over kanalen uten Ä kreve annen stÞttende IPv6-infrastruktur pÄ kanalen. Direkte kommunikasjon mellom tilkoblede IPv6-verter krever ikke en IPv6-ruter eller DHCPv6-server pÄ tilkoblingen.

Link-Local-adresser starter med et 10-biters prefiks fe80, etterfulgt av 54 null biter og deretter en 64-bits grensesnittidentifikator (IID). I det fĂžrste svaret ovenfor 2392:6213:a15b:66ff er en 64-bits IID.

Looped Multicast

Som standard returneres multicast-pakker internt til noden som sendte dem. Dette skjer for bÄde IPv6- og IPv4-adressering.

Årsaken til denne standardoppfĂžrselen er at nĂ„r multicast-pakker sendes, kan det ogsĂ„ vĂŠre en lyttende lokal multicast-applikasjon som kjĂžrer pĂ„ selve avsenderverten, sĂ„ vel som et sted pĂ„ nettverket. Denne lokale applikasjonen mĂ„ ogsĂ„ motta multicast-pakker.

Vi kan se denne multicast-lokalslÞyfen i pingutgangen vÄr:

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

Den fÞrste og raskeste responsen (0,106 ms sammenlignet med 0,453 ms) kommer fra Link-Local-adressen som er konfigurert pÄ selve grensesnittet enp3s2.

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

Nytte ping gir en mÄte Ä undertrykke lokal multicast-tilbakemelding ved Ä bruke parameteren -L. Hvis vi sender et multicast-ping med alle noder med dette flagget, er svarene begrenset til eksterne noder. Vi mottar ikke svar fra Link-Local-adressen til sendergrensesnittet.

[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-lenke-lokale adresser

Som du kanskje gjetter, gir unicast Link-Local-adresser i seg selv heller ikke nok informasjon til Ä indikere hvilket grensesnitt som skal brukes for Ä nÄ dem. Som med all-nodes multicast ping, mÄ vi ogsÄ spesifisere grensesnittet som en kommandolinjeparameter ping eller sone-ID med adresse ved pinging av Link-Local-adresser.

Denne gangen kan vi bruke -cfor Ă„ begrense antall pakker og svar som sendes og mottas ping, siden vi utfĂžrer unicast-ping.

[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 (alle) andre IPv6-adresser?

I denne artikkelen sÄ vi hvordan du pinger alle IPv6-noder pÄ en kanal ved Ä bruke en multicast-IPv6-adresse for alle noder ff02::1. Vi sÄ ogsÄ hvordan man spesifiserer hvilket grensesnitt som skal brukes med en all-nodes multicast IPv6-adresse, siden adressen i seg selv ikke kan gi denne informasjonen. Vi brukte enten kommandolinjealternativet ping, eller spesifisert grensesnittet ved hjelp av suffikset %<zone_id>.

SÄ lÊrte vi om unicast Link-Local-adresser, som er adresser som brukes til Ä svare pÄ multicast ICMPv6-ekkoforespÞrsler med alle noder.

Vi sÄ ogsÄ hvordan multicast-pakker returneres til sendernoden som standard, og hvordan du deaktiverer dette for verktÞyet ping.

Til slutt pinget vi en enkelt Link-Local-adresse ved Ä bruke suffikset %<zone_id>, siden Link-Local-adresser i seg selv heller ikke gir informasjon om det utgÄende grensesnittet.

SÄ hva med Ä pinge alle de andre nodene og fÄ deres globale unicast-adresser (GUAer) (det vil si deres offentlige adresser pÄ Internett) eller deres unike lokale unicast-adresser (ULA)? Vi skal se pÄ dette i neste blogginnlegg.

Det er alt.

Du kan finne ut mer om kurset vÄrt pÄ Äpne dagsnotater.

Kilde: www.habr.com

KjĂžp pĂ„litelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere đŸ”„ KjĂžp pĂ„litelig webhotell med DDoS-beskyttelse, VPS VDS-servere | ProHoster