Ping vseh vozlišč IPv6 na kanalu

Осталось всего несколько дней до начала нового потока курса «Сетевой инженер» от OTUS. В связи с этим мы хотим поделиться с вами переводом полезного материала по теме.

Ping vseh vozlišč IPv6 na kanalu

Серия статей в блоге, посвященных советам и рекомендациям по устранению неполадок, связанных с пингом IPv6 (ICMPv6 Echo Request/Echo Reply)

Обратите внимание, что я использую Linux (в частности, Fedora 31), однако синтаксис команды ping для других операционных систем, надеюсь, должен быть очень похожим.

Ping vseh vozlišč IPv6 na kanalu

Первый и самый простой совет — пропинговать все узлы IPv6 на канале.

IPv6 использует мультикаст-адреса для всех типов связи «один ко многим». Не существует бродкастных (или широковещательных) IPv6-адресов. Это отличает IPv6 от IPv4, где имеются несколько типов бродкастных адресов, например, «limited broadcast» адрес 255.255.255.255 [RFC1122].

Тем не менее существует «all-nodes multicast» (общий мультикаст) IPv6-адрес, поэтому мы будем использовать его для пинга всех узлов IPv6 в канале. («Широковещательный» адрес на самом деле является просто специально названным мультиакастным адресом, который представляет собой группу многоадресной рассылки, включающую все узлы. Обратите внимание, что, например, бит «группы» или мультикастного адреса включен в бродкастных адресах Ethernet на канальном уровне).

All-nodes multicast IPv6-адрес для канала: ff02::1. ff означает мультикастовый IPv6-адрес. Следующий 0 — это часть флага с неустановленными битами.

Naprej 2 определяет область мультикастовой группы. В отличие от мультикаст IPv4-адресов, мультикаст IPv6-адреса имеют область видимости (scope). Значение scope указывает часть сети, по которой разрешено пересылать мультикастный пакет. Как только пакет достигает границы указанного scope, он должен быть отброшен, независимо от того, является ли его поле счетчика переходов (Hop Count) ненулевым. Разумеется, если счетчик переходов достигает нуля до достижения указанной границы мультикастовой группы, он также немедленно сбрасывается. Вот полный список мультикаст scope IPv6.

Finally, ::1 указывает на группу all-nodes multicast.

Об адресе ff02::1 следует заметить, что он неоднозначен. На узле IPv6 с несколькими интерфейсами, такими как маршрутизатор или многосетевой хост, в адресе ff02::1 Ničevo ne ukazuje na to kojem sučelju treba slati ICMPv6 echo zahtjeve ili očekivati pristizanje ICMPv6 echo odgovora kada stignu. ff02::1 Važi i može se koristiti na bilo kojem od sučelja i kanala priključenih na višesučeljski čvor.

Dakle, kada pingujemo sve IPv6 čvorove na kanalu, moramo nekako obavestiti alat ping koji sučelje koristiti za IPv6.

Određivanje sučelja - parametar komandne linije

Kao što smo videli, multicast adresa za sve čvorove koju želimo koristiti - ff02::1 ne pruža nikakve informacije o tome na koje sučelje slati i primati echo zahtjeve i ICMPv6 echo odgovore.

Kako da navedemo sučelje koje će se koristiti za multicast adrese ili unicast Link-Local adrese?

Prvi i najjasniji način je da ga navedemo kao parametar za aplikaciju koju koristimo.

Za alatku ping navodimo ga putem opcije -I.

[mark@opy ~]$ ping -w 1 -I enp3s2 ff02::1
ping: Upozorenje: izvorna adresa može biti odabrana na uređaju koji nije: enp3s2
PING ff02::1(ff02::1) iz :: enp3s2: 56 bajtova podataka
64 bajta od fe80::1d36:1fff:fefd:82be%enp3s2: icmp_seq=1 ttl=64 vreme=0.438 ms
64 bajta od fe80::f31c:ccff:fe26:a6d9%enp3s2: icmp_seq=1 ttl=64 vreme=0.589 ms (DUP!)
64 bajta od fe80::7e31:f5ff:fe1b:9fdb%enp3s2: icmp_seq=1 ttl=64 vreme=5.15 ms (DUP!)
64 bajta od fe80::f7f8:15ff:fe6f:be6e%enp3s2: icmp_seq=1 ttl=64 vreme=58.0 ms (DUP!)
64 bajta od fe80::877d:4ff:fe1a:b881%enp3s2: icmp_seq=1 ttl=64 vreme=62.3 ms (DUP!)
64 bajta od fe80::877d:4ff:fe1a:ad79%enp3s2: icmp_seq=1 ttl=64 vreme=62.8 ms (DUP!)
 
--- ff02::1 ping statistika ---
1 paket poslat, 1 primljen, +5 duplikata, 0% gubitak paketa, vreme 0ms
rtt min/avg/max/mdev = 0.438/31.544/62.786/29.566 ms
[mark@opy ~]$

Uz ovaj all-nodes multicast ping dobili smo odgovore od 6 IPv6 čvorova. Odgovori su stigli od čvornih Link-Local IPv6 adresa, počevši od prefiksa fe80::/10.

Da ping nije nastavljao beskrajno slati ICMPv6 echo zahtjeve dok ne prekinemo, obično navodimo broj paketa za slanje putem opcije -c. Međutim, to takođe ne omogućava ping-u da primi i prikaže više od jednog ICMPv6 echo odgovora prilikom slanja multicast ICMPv6 echo zahtjeva. Umesto toga, koristili smo opciju -w da navedemo da ping treba da završi nakon 1 sekunde, bez obzira na to koliko ICMPv6 echo zahtjeva ili odgovora je poslato ili primljeno.

Još jedna stvar na koju treba obratiti pažnju je (DUP!) izhod na drugem in nadaljnjih odgovorih. Ti paketi so identificirani kot podvojeni odgovori, ker imajo enako vrednost zaporedja ICMP, kot posamezni ICMPv6 eho zahtevki, ki so bili najprej poslani. Pojavijo se, ker multicast eho zahtevek ICMPv6 privede do več posameznih unicast odgovorov. Število podvojenih je prav tako navedeno v povzetku statistike.

Opredelitev vmesnikov — ID cone

Še en način zagotavljanja vmesnika za uporabo je del parametra naslova IPv6.

Primer tega lahko opazimo v izhodu ping, kjer naslovi odgovarjajočih IPv6 vozlišč prav tako vsebujejo pripono %enp3s2, na primer:

64 bajtov od fe80::1d36:1fff:fefd:82be%enp3s2: icmp_seq=1 ttl=64 čas=0.438 ms

Ta način določanja vmesnikov je formalno opisan v [RFC4007], 'Arhitektura z določenimi naslovi IPv6'. Čeprav se običajno imenuje vmesnik operacijskega sistema, pravzaprav določajo nekaj bolj splošnega — 'zona' ali 'območje delovanja'.

Razlog za obstoj širših območij ali območij delovanja je v tem, da, kot omenjajo v [RFC4007], lahko vozlišče IPv6 ima več različnih IPv6 vmesnikov, povezanih z istim kanalom. Ti vmesniki so člani iste cone.

Moralo bi biti mogoče združiti več vmesnikov v okviru cone pod operacijskim sistemom; trenutno ne vem, ali je to mogoče v Linuxu in kako to storiti.

Z uporabo pripone %, lahko odstranimo parameter ukazne vrstice -I ping.

[mark@opy ~]$ ping -w 1 ff02::1%enp3s2
PING ff02::1%enp3s2(ff02::1%enp3s2) 56 podatkovni bajti
64 bajtov od fe80::2392:6213:a15b:66ff%enp3s2: icmp_seq=1 ttl=64 čas=0.106 ms
64 bajtov od fe80::1d36:1fff:fefd:82be%enp3s2: icmp_seq=1 ttl=64 čas=0.453 ms (DUP!)
64 bajtov od fe80::f31c:ccff:fe26:a6d9%enp3s2: icmp_seq=1 ttl=64 čas=0.606 ms (DUP!)
64 bajtov od fe80::7e31:f5ff:fe1b:9fdb%enp3s2: icmp_seq=1 ttl=64 čas=6.23 ms (DUP!)
64 bajtov od fe80::f7f8:15ff:fe6f:be6e%enp3s2: icmp_seq=1 ttl=64 čas=157 ms (DUP!)
64 bajtov od fe80::877d:4ff:fe1a:ad79%enp3s2: icmp_seq=1 ttl=64 čas=159 ms (DUP!)
64 bajtov od fe80::877d:4ff:fe1a:b881%enp3s2: icmp_seq=1 ttl=64 čas=161 ms (DUP!)
64 bajtov od fe80::23d:e8ff:feec:958c%enp3s2: icmp_seq=1 ttl=64 čas=179 ms (DUP!)
 
--- ff02::1%enp3s2 ping statistika ---
1 paketi poslani, 1 prejeta, +7 podvojitev, 0% izguba paketov, čas 0ms
rtt min/avg/max/mdev = 0.106/82.858/179.216/81.281 ms
 
[mark@opy ~]$

Odgovori Link-Local naslovov

Iz tega multicast pinganja vseh vozlišč smo dobili skupno 6 unikatnih odgovorov.

Ti odgovori so prišli od unicast Link-Local naslovov IPv6 vozlišč. Na primer, tukaj je prvi odgovor:

64 bajtov od fe80::2392:6213:a15b:66ff%enp3s2: icmp_seq=1 ttl=64 čas=0.106 ms

Unicast Link-Local IPv6 адреси се изискува да бъдат на всички интерфейси, поддържащи IPv6 [RFC4291], „Архитектура на адресирането на IP версия 6“. Причината за това е, че IPv6 възел винаги автоматично има unicast IPv6 адрес, който може да използва, поне за свързване с други възли през директно свързани канали. Това включва свързване с приложения на други хостове чрез Link-Local адреси на хостовете.

Това улеснява разработването и реализирането на протоколи, като IPv6 Neighbor Discovery и OSPFv3. То също така позволява на приложенията на крайните потребители на хостовете да обменят данни през канала, без да е необходима друга поддържаща инфраструктура за IPv6 на канала. За директно свързване на свързани хостове, не е необходим рутер IPv6 или DHCPv6 сървър в връзката.

Link-Local адресите започват с 10-битен префикс fe80, последвани от 54 нулеви бита и след това 64-битов идентификатор на интерфейса (IID). В горепосочения първи отговор 2392:6213:a15b:66ff — това е 64-битов IID.

Цикличен Мултикаст

По подразбиране, мултикастовите пакети се връщат обратно вътрешно на възела, който ги изпраща. Това се случва и за IPv6, и за IPv4 адресации.

Причината за това подразбирано поведение е, че при изпращане на мултикаст пакети може да има и локално мултикастово приложение, работещо на същия изпращащ хост, както и някъде в мрежата. Това локално приложение също трябва да получава мултикастовите пакети.

Можем да видим този локален цикъл на мултикаст в нашия изход от 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!)
...

Първият и най-бърз отговор (0,106 мс в сравнение с 0,453 мс) идва от Link-Local адреса, настроен на самия интерфейс enp3s2.

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

Orodje ping предоставя начин за потискане на локалната обратна връзка на мултикастовата разпоредба с помощта на параметър -L. Ако изпратим ping all-nodes multicast с този флаг, отговорите се ограничават до отдалечени възли. Не получаваме отговор от Link-Local адреса на интерфейса на изпращача.

[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 Adresse

Wie Sie sich vorstellen können, bieten unicast Link-Local Adressen für sich genommen nicht genügend Informationen, um anzugeben, welches Interface verwendet werden soll, um sie zu erreichen. Wie beim all-nodes multicast Ping müssen wir auch hier das Interface als Parameter in der Befehlszeile angeben ping oder die Zone-ID mit der Adresse beim Ping der Link-Local Adressen.

Diesmal können wir -c, um die Anzahl der gesendeten und empfangenen Pakete und Antworten zu begrenzen, ping, da wir einen Unicast-Ping durchführen.

[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 Datenbytes
64 Bytes von fe80::f31c:ccff:fe26:a6d9%enp3s2: icmp_seq=1 ttl=64 time=0.395 ms
 
--- fe80::f31c:ccff:fe26:a6d9%enp3s2 Ping-Statistik ---
1 Pakete gesendet, 1 empfangen, 0% Paketverlust, Zeit 0ms
rtt min/avg/max/mdev = 0.395/0.395/0.395/0.000 ms
[mark@opy ~]$

Ping (alle) anderen IPv6-Adressen?

In diesem Artikel haben wir gesehen, wie man alle IPv6-Knoten im Kanal pingen kann, indem wir die all-nodes multicast IPv6-Adresse verwenden. ff02::1Wir haben auch gesehen, wie man angibt, welches Interface man mit der all-nodes multicast IPv6-Adresse verwenden möchte, da die Adresse selbst keine diese Informationen bereitstellen kann. Wir haben entweder den Befehlszeilenparameter verwendet, ping, oder das Interface über den Suffix angegeben. %.

Dann haben wir über unicast Link-Local Adressen erfahren, die Adressen sind, die zur Beantwortung von all-nodes multicast Echo-Anfragen von ICMPv6 verwendet werden.

Wir haben auch gesehen, wie Multicast-Pakete standardmäßig an den sendenden Knoten zurückkehren und wie man dies für die Utility deaktivieren kann. ping.

Schließlich haben wir eine einzelne Link-Local Adresse gepingt, indem wir den Suffix verwendet haben, %, da Link-Local Adressen für sich genommen auch keine Informationen über das ausgehende Interface bereitstellen.

Wie wäre es mit dem Pingen aller anderen Knoten und dem Erhalten ihrer globalen Unicast-Adressen (GUA) (d.h. ihre öffentlichen Adressen im Internet) oder ihrer einzigartigen lokalen Unicast-Adressen (ULA)? Das werden wir im nächsten Blogartikel besprechen.

S tem je vse.

Erfahren Sie mehr über unseren Kurs in der Aufzeichnung des Tags der offenen Tür.

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster