Preostalo je samo nekoliko dana do početka novog ciklusa tečaja od OTUS-a. U tom smislu želimo s vama podijeliti prijevod korisnog materijala na temu.

Serija članaka na blogu posvećenih savjetima i preporukama za rješavanje problema povezanih s pingom IPv6 (ICMPv6 Echo Request/Echo Reply)
Imajte na umu da koristim Linux (konkretno Fedora 31), no sintaksa naredbe ping za druge operacijske sustave bi trebala biti vrlo slična.
Ping svih čvorova IPv6 na kanalu
Prvi i najjednostavniji savjet je pingati sve IPv6 čvorove na kanalu.
IPv6 koristi multicast adrese za sve tipove «jedan prema mnogima» komunikacije. Ne postoje broadcast (ili širokoproširene) IPv6 adrese. To IPv6 razlikuje od IPv4, gdje postoje različite vrste broadcast adresa, na primjer, adresa «limited broadcast» 255.255.255.255 [RFC1122].
Međutim, postoji „all-nodes multicast“ (opšti multicast) IPv6 adresa, tako da ćemo je koristiti za pinganje svih IPv6 čvorova na kanalu. („Širokoproširena“ adresa zapravo je samo posebno imenovana multicast adresa koja je grupa multicast razmjene koja uključuje sve čvorove. Imajte na umu da npr. bit „grupe“ ili multicast adrese ulazi u broadcast adrese Ethernet na razini kanala).
All-nodes multicast IPv6 adresa za kanal: ff02::1. ff označava multicast IPv6 adresu. Sljedeća nula predstavlja dio zastavice s nepostavljenim bitovima.
Dalje 2 određuje opseg multicast grupe. Za razliku od multicast IPv4 adresa, multicast IPv6 adrese imaju opseg (scope). Vrijednost opsega označava dio mreže unutar kojeg je dozvoljeno prosljeđivanje multicast paketa. Kada paket dosegne granicu određenog opsega, paket se mora odbaciti bez obzira na to je li mu polje broja prijelaza (Hop Count) različito od nule. Naravno, ako brojač prijelaza dosegne nulu prije nego što dođe do navedene granice multicast grupe, on se također odmah odbacuje. Ovo je potpuni popis multicast opsega IPv6.
Na kraju, ::1 određuje all-nodes multicast grupu.
O adresi ff02::1 treba napomenuti da je on dvosmislen. Na IPv6 čvoru s više sučelja, kao što su usmjerivač ili multi-network host, u adresi ff02::1 nema ništa gdje bi se moglo navesti kojem sučelju slati ICMPv6 echo zahtjeve ili čekati dolazak ICMPv6 echo odgovora. ff02::1 valjan je i može se koristiti na bilo kojem od sučelja i kanala povezanih s višesučeljnim čvorom.
Stoga, kada pingamo sve IPv6 čvorove na kanalu, trebamo nekako obavijestiti alat ping za IPv6, koje sučelje koristiti.
Definiranje sučelja - parametar naredbenog retka
Kao što smo već vidjeli, all-nodes multicast adresa koju želimo koristiti - ff02::1 ne pruža nikakve informacije o tome kojim sučeljem slati i primati ICMPv6 echo zahtjeve i odgovore.
Dakle, kako možemo navesti sučelje koje će se koristiti za multicast adrese ili unicast Link-Local adrese?
Prvi i najočigledniji način je pružiti ga kao parametar aplikaciji koju koristimo.
Za alat ping daje se putem opcije -I.
[mark@opy ~]$ ping -w 1 -I enp3s2 ff02::1
ping: Upozorenje: izvorna adresa možda će biti odabrana na drugom uređaju osim: enp3s2
PING ff02::1(ff02::1) s :: enp3s2: 56 bajtova podataka
64 bajta s fe80::1d36:1fff:fefd:82be%enp3s2: icmp_seq=1 ttl=64 vrijeme=0.438 ms
64 bajta s fe80::f31c:ccff:fe26:a6d9%enp3s2: icmp_seq=1 ttl=64 vrijeme=0.589 ms (DUP!)
64 bajta s fe80::7e31:f5ff:fe1b:9fdb%enp3s2: icmp_seq=1 ttl=64 vrijeme=5.15 ms (DUP!)
64 bajta s fe80::f7f8:15ff:fe6f:be6e%enp3s2: icmp_seq=1 ttl=64 vrijeme=58.0 ms (DUP!)
64 bajta s fe80::877d:4ff:fe1a:b881%enp3s2: icmp_seq=1 ttl=64 vrijeme=62.3 ms (DUP!)
64 bajta s fe80::877d:4ff:fe1a:ad79%enp3s2: icmp_seq=1 ttl=64 vrijeme=62.8 ms (DUP!)
--- ff02::1 ping statistike ---
1 paket poslan, 1 primljen, +5 duplikata, 0% gubitak paketa, vrijeme 0ms
rtt min/avg/max/mdev = 0.438/31.544/62.786/29.566 ms
[mark@opy ~]$Korištenjem ovog all-nodes multicast pinga dobili smo odgovore od 6 IPv6 čvorova. Odgovori su došli s Link-Local IPv6 adresa čvorova, počevši s prefiksom fe80::/10.
Da ping nismo nastavili beskonačno slati ICMPv6 echo zahtjeve dok ih ne prekinemo, obično navodimo broj paketa za slanje putem opcije -c. Međutim, to također ne omogućava ping-u da primi i prikaže više od jednog ICMPv6 echo odgovora prilikom slanja multicast ICMPv6 echo zahtjeva. Umjesto toga koristili smo parametar -w kako bismo naveli da ping mora završiti nakon 1 sekunde, bez obzira na to koliko ICMPv6 echo zahtjeva ili odgovora bilo je poslanih ili primljenih.
Još jedna stvar na koju treba obratiti pozornost je (DUP!) prikaz u drugom i kasnijim odgovorima. Ovi paketi se identificiraju kao duplici odgovora, jer imaju istu ICMP sekvencu, kao i pojedinačni ICMPv6 eho zahtjevi koji su prvotno poslani. Pojavljuju se jer multikast ICMPv6 eho zahtjev dovodi do više individualnih unicast odgovora. Broj duplicata također se navodi u sažetku statistike.
Definicija sučelja — Zone ID
Još jedan način pružanja sučelja za korištenje je kao dio IPv6 adrese.
Možemo promatrati primjer toga u ispisu pinga, gdje adrese odgovarajućih IPv6 čvorova također imaju sufiks %enp3s2, na primjer:
64 bajta od fe80::1d36:1fff:fefd:82be%enp3s2: icmp_seq=1 ttl=64 vrijeme=0.438 msOvaj način definiranja sučelja formalno je opisan u [RFC4007], „Arhitektura s dodijeljenim IPv6 adresama“. Iako ih obično nazivaju sučeljem operativnog sustava, zapravo definiraju nešto općenitije — „zonu“ ili „opseg“.
Razlog postojanja općenitijih zona ili scope zona je taj što, kao što se spominje u [RFC4007], IPv6 čvor može imati više različitih IPv6 sučelja povezanih na istu mrežu. Ova sučelja su članovi jedne zone.
Mora biti moguće grupirati više sučelja unutar zone pod operativnim sustavom; trenutno ne znam je li to moguće na Linuxu i kako to učiniti.
Koristeći sufiks %, možemo ukloniti opciju s komandne linije -I ping.
[mark@opy ~]$ ping -w 1 ff02::1%enp3s2
PING ff02::1%enp3s2(ff02::1%enp3s2) 56 podataka bajtova
64 bajta od fe80::2392:6213:a15b:66ff%enp3s2: icmp_seq=1 ttl=64 vrijeme=0.106 ms
64 bajta od fe80::1d36:1fff:fefd:82be%enp3s2: icmp_seq=1 ttl=64 vrijeme=0.453 ms (DUP!)
64 bajta od fe80::f31c:ccff:fe26:a6d9%enp3s2: icmp_seq=1 ttl=64 vrijeme=0.606 ms (DUP!)
64 bajta od fe80::7e31:f5ff:fe1b:9fdb%enp3s2: icmp_seq=1 ttl=64 vrijeme=6.23 ms (DUP!)
64 bajta od fe80::f7f8:15ff:fe6f:be6e%enp3s2: icmp_seq=1 ttl=64 vrijeme=157 ms (DUP!)
64 bajta od fe80::877d:4ff:fe1a:ad79%enp3s2: icmp_seq=1 ttl=64 vrijeme=159 ms (DUP!)
64 bajta od fe80::877d:4ff:fe1a:b881%enp3s2: icmp_seq=1 ttl=64 vrijeme=161 ms (DUP!)
64 bajta od fe80::23d:e8ff:feec:958c%enp3s2: icmp_seq=1 ttl=64 vrijeme=179 ms (DUP!)
--- ff02::1%enp3s2 statistika pinga ---
1 paketi poslani, 1 primljen, +7 duplicata, 0% gubitak paketa, vrijeme 0ms
rtt min/avg/max/mdev = 0.106/82.858/179.216/81.281 ms
[mark@opy ~]$Odgovori Link-Local adresa
Od ovog all-nodes multicast pinga primili smo ukupno 6 jedinstvenih odgovora.
Ovi odgovori su proizvedeni od unicast Link-Local adresa IPv6 čvorova. Na primjer, evo prvog odgovora:
64 bajta od fe80::2392:6213:a15b:66ff%enp3s2: icmp_seq=1 ttl=64 vrijeme=0.106 msLink-Local IPv6 adrese su potrebne na svim sučeljima koja podržavaju IPv6 [RFC4291], "Arhitektura adresiranja IP verzije 6". Razlog za to je što IPv6 čvor uvijek automatski ima unicast IPv6 adresu koju može koristiti, barem za komunikaciju s drugim čvorovima putem izravno povezanih kanala. To uključuje komunikaciju s aplikacijama drugih hostova putem Link-Local adresa hostova.
To pojednostavljuje razvoj i implementaciju protokola kao što su IPv6 Neighbor Discovery i OSPFv3. Također omogućuje aplikacijama krajnjih korisnika na hostovima razmjenu podataka putem kanala, ne zahtijevajući dodatnu infrastrukturu za podršku IPv6 na kanalu. Za izravnu komunikaciju povezanih hostova IPv6 nije potreban IPv6 usmjerivač ili DHCPv6 poslužitelj u vezi.
Link-Local adrese počinju s 10-bitnim prefiksom fe80, koji slijedi 54 nula, a zatim 64-bitni identifikator sučelja (IID). U danom prvom odgovoru 2392:6213:a15b:66ff — to je 64-bitni IID.
Učka Multicast
Po defaultu, multicast paketi se vraćaju interno čvoru koji ih šalje. To se događa za IPv6 i IPv4 adresacije.
Uzrok ovog defaultnog ponašanja je to što, kada se šalju multicast paketi, može postojati i aplikacija lokalnog multicast slušanja koja radi na samom šaljatelju, kao i negdje u mreži. Ova lokalna aplikacija također treba primati multicast pakete.
Ovaj multicast lokalni ciklus možemo vidjeti u našem ping izlazu:
[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!)
...Prvi i najbrži odgovor (0,106 ms u usporedbi s 0,453 ms) dolazi od Link-Local adrese postavljene na sučelju enp3s2.
[mark@opy ~]$ ip addr show dev enp3s2 | grep fe80
inet6 fe80::2392:6213:a15b:66ff/64 scope link noprefixroute
[mark@opy ~]$Alat ping osigurava način za suzbijanje lokalne povratne informacije multicast emitiranja pomoću opcije -L. Ako pošaljemo ping all-nodes multicast s ovom oznakom, odgovori se ograničavaju na udaljene čvorove. Ne primamo odgovor od Link-Local adrese sučelja pošiljatelja.
[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-Local Adresa
Kao što možete pretpostaviti, unicast Link-Local adrese same po sebi također ne pružaju dovoljno informacija kako bi se odredio koji interfejs koristiti za njihov pristup. Kao i u slučaju all-nodes multicast pinga, također moramo odrediti interfejs kao parametar komandne linije ping ili zone ID s adresom prilikom pinga Link-Local adresa.
Ovog puta možemo koristiti -c, kako bismo ograničili broj paketa i odgovora koji se šalju i primaju ping, budući da vršimo 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 ~]$Pingovati (sve) druge IPv6 adrese?
U ovom članku smo videli kako pingovati sve IPv6 čvorove u mreži koristeći all-nodes multicast IPv6 adresu ff02::1. Također smo videli kako odrediti koji interfejs koristiti s all-nodes multicast IPv6 adresom, pošto sama adresa ne može pružiti te informacije. Koristili smo ili parametar komandne linije ping, ili smo odredili interfejs preko suffixa %.
Zatim smo saznali o unicast Link-Local adresama, koje se koriste za odgovore na all-nodes multicast ICMPv6 echo request.
Također smo videli kako multicast paketi vraćaju na čvor pošiljaoca po difoltu i kako to isključiti za alat ping.
Na kraju, pingovali smo jedinstvenu Link-Local adresu koristeći suffiks %, budući da Link-Local adrese same po sebi također ne pružaju informacije o ulaznom interfejsu.
Šta je s pingovanjem svih ostalih čvorova i dobijanjem njihovih globalnih unicast adresa (GUA) (tj. njihovih javnih adresa na Internetu) ili njihovih jedinstvenih lokalnih unicast adresa (ULA)? To ćemo razmotriti u sledećem članku na blogu.
To je to.
Saznajte više o našem kursu u.
Izvor: habr.com
