Ping visiem IPv6 mezgliem kanālā

AtlikuÅ”as dažas dienas lÄ«dz jaunas plÅ«smas sākumam ar ātrumu "TÄ«kla inženieris" no OTUS. Å ajā sakarā mēs vēlamies dalÄ«ties ar jums noderÄ«ga materiāla tulkojumu par Å”o tēmu.

Ping visiem IPv6 mezgliem kanālā

Emuāra ziņu sērija par padomiem un trikiem IPv6 ping problēmu novērÅ”anai (ICMPv6 Echo Request/Echo Reply)

LÅ«dzu, ņemiet vērā, ka es izmantoju Linux (Ä«paÅ”i Fedora 31), tomēr citu operētājsistēmu ping komandas sintaksei, cerams, vajadzētu bÅ«t ļoti lÄ«dzÄ«gai.

Ping visiem IPv6 mezgliem kanālā

Pirmais un vienkārŔākais padoms ir ping visiem IPv6 mezgliem saitē.

IPv6 izmanto multiraides adreses visu veidu saziņai viens pret daudziem. Nav apraides (vai apraides) IPv6 adreÅ”u. Tas atŔķir IPv6 no IPv4, kur ir vairāki apraides adreÅ”u veidi, piemēram, ā€œierobežotā apraidesā€ adrese 255.255.255.255 [RFC1122].

Tomēr ir ā€œvisu mezglu multiraidesā€ IPv6 adrese, tāpēc mēs to izmantosim, lai ping visiem IPv6 mezgliem saitē. ("Apraides" adrese patiesÄ«bā ir tikai Ä«paÅ”i nosaukta multiraides adrese, kas ir multiraides grupa, kas ietver visus mezglus. Ņemiet vērā, ka, piemēram, "grupas" vai multiraides adreses bits ir ieslēgts Ethernet apraides adresēs saites slānÄ«. ).

Visu mezglu multiraides IPv6 adrese kanālam: ff02::1. ff apzīmē multiraides IPv6 adresi. Nākamais 0 ir karoga daļa ar atiestatītiem bitiem.

Tālāk 2 definē multiraides grupas apgabalu. AtŔķirÄ«bā no multiraides IPv4 adresēm, multiraides IPv6 adresēm ir darbÄ«bas joma. Tvēruma vērtÄ«ba norāda tÄ«kla daļu, pa kuru ir atļauts pārsÅ«tÄ«t multiraides paketi. Kad pakete sasniedz norādÄ«tās darbÄ«bas jomas robežu, pakete ir jāatmet neatkarÄ«gi no tā, vai tās apgriezienu skaita lauks nav nulle. Protams, ja apiņu skaits sasniedz nulli pirms noteiktās multiraides grupas robežas sasniegÅ”anas, tas arÄ« tiek nekavējoties atiestatÄ«ts. Å eit ir pilns IPv6 multiraides tvēruma saraksts.

Visbeidzot, ::1 norāda visu mezglu multiraides grupu.

Par adresi ff02::1 JāatzÄ«mē, ka tas ir neskaidrs. Adrese IPv6 resursdatorā ar vairākām saskarnēm, piemēram, marÅ”rutētājā vai daudzvietÄ«gā resursdatorā ff02::1 nav nekā, kur jÅ«s varat norādÄ«t, kuram interfeisam nosÅ«tÄ«t ICMPv6 atbalss pieprasÄ«jumus vai sagaidÄ«t ICMPv6 atbalss atbilžu saņemÅ”anu, kad tās pienāk. ff02::1 ir derÄ«gs un to var izmantot jebkurā no saskarnēm un kanāliem, kas pievienoti vairāku interfeisu mezglam.

Tātad, kad mēs piesūtām visus IPv6 mezglus saitei, mums kaut kā jāpaziņo arī utilītai ping IPv6, kuru interfeisu izmantot.

Saskarņu definÄ“Å”ana ā€” komandrindas opcija

Kā mēs jau redzējām, visu mezglu multiraides adrese, kuru vēlamies izmantot, ir āˆ’ ff02::1 - nesniedz nekādu informāciju par to, ar kuru saskarni nosÅ«tÄ«t un saņemt ICMPv6 atbalss pieprasÄ«jumu un atbalss atbildes paketes.

Tātad, kā norādīt interfeisu, kas jāizmanto multiraides adreŔu telpai vai unicast Link-Local adreŔu telpai?

Pirmais un acÄ«mredzamākais veids ir nodroÅ”ināt to kā parametru lietojumprogrammai, kuru mēs izmantojam.

Par lietderÄ«bu ping mēs to nodroÅ”inām, izmantojot opciju -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 ~]$

Izmantojot Å”o visu mezglu multiraides ping, mēs saņēmām atbildes no 6 IPv6 mezgliem. Atbildes tika saņemtas no Link-Local IPv6 mezglu adresēm, sākot ar prefiksu fe80::/10.

Ka ping neturpina sÅ«tÄ«t ICMPv6 atbalss pieprasÄ«jumus bezgalÄ«gi, lÄ«dz mēs to pārtraucam, mēs parasti norādām nosÅ«tāmo pakeÅ”u skaitu, izmantojot opciju -c. Tomēr tas arÄ« neļauj pingam pieņemt un parādÄ«t vairāk nekā vienu ICMPv6 atbalss atbildi, nosÅ«tot multiraides ICMPv6 atbalss pieprasÄ«jumu. Tā vietā mēs izmantojām opciju -w, lai norādÄ«tu, ka ping jāpabeidz pēc 1 sekundes neatkarÄ«gi no tā, cik ICMPv6 atbalss pieprasÄ«jumu vai atbalss atbilžu tika nosÅ«tÄ«ts vai saņemts.

Vēl viena lieta, kurai jāpievērÅ” uzmanÄ«ba, ir (DUP!) izvade uz otro un turpmākajām atbildēm. Å Ä«s paketes tiek identificētas kā atbildes dublikāti, jo tām ir tāda pati ICMP secÄ«bas vērtÄ«ba kā atseviŔķiem ICMPv6 atbalss pieprasÄ«jumiem, kas tika nosÅ«tÄ«ti vispirms. Tie parādās, jo ICMPv6 multiraides atbalss pieprasÄ«jums rada vairākas atseviŔķas unicast atbildes. Dublikātu skaits norādÄ«ts arÄ« statistikas apkopojumā.

Saskarņu definÄ“Å”ana ā€” zonas ID

Vēl viens veids, kā atklāt saskarni lietoÅ”anai, ir daļa no IPv6 adreses parametra.

Piemēru var redzēt ping izvadē, kur atbildīgo IPv6 saimniekdatoru adresēm ir arī sufikss %enp3s2, piemēram:

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

Å Ä« saskarņu norādÄ«Å”anas metode ir formāli aprakstÄ«ta [RFC4007], "IPv6 definētās adreses arhitektÅ«ra". Lai gan tos parasti sauc par operētājsistēmas interfeisu, tie patiesÄ«bā definē kaut ko vispārÄ«gāku ā€” "zonu" vai "tvērumu".

Iemesls vispārÄ«gāku zonu vai darbÄ«bas jomu zonu izveidei ir tāds, ka, kā minēts [RFC4007], IPv6 mezglam var bÅ«t vairākas atŔķirÄ«gas IPv6 saskarnes, kas savienotas ar vienu un to paÅ”u kanālu. Å Ä«s saskarnes ir vienas zonas dalÄ«bnieki.

JābÅ«t iespējai grupēt vairākas saskarnes operētājsistēmas zonā; PaÅ”laik es nezinu, vai tas ir iespējams ar Linux vai kā to izdarÄ«t.

Izmantojot piedēkli %<zone_id>, mēs varam noņemt komandrindas opciju -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 ~]$

Saites vietējās adreses atbildes

No Ŕī visu mezglu multiraides ping mēs saņēmām kopumā 6 unikālas atbildes.

Å Ä«s atbildes tika saņemtas no unicast Link-Local IPv6 resursdatora adresēm. Piemēram, Å”eit ir pirmā atbilde:

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

Unicast Link-Local IPv6 adreses ir nepiecieÅ”amas visās saskarnēs, kurās iespējots IPv6 [RFC4291], ā€œIP 6. versijas adresÄ“Å”anas arhitektÅ«raā€. Iemesls tam ir tāds, ka IPv6 mezglam vienmēr automātiski ir unicast IPv6 adrese, ko tas var vismaz izmantot, lai sazinātos ar citiem mezgliem tā tieÅ”i savienotajās saitēs. Tas ietver saziņu ar lietojumprogrammām citos saimniekdatoros, izmantojot Link-Local resursdatora adreses.

Tas vienkārÅ”o tādu protokolu kā IPv6 Neighbor Discovery un OSPFv3 izstrādi un ievieÅ”anu. Tas arÄ« ļauj galalietotāju lietojumprogrammām resursdatoros sazināties pa kanālu, neprasot kanālā nekādu citu atbalstoÅ”u IPv6 infrastruktÅ«ru. TieÅ”ai saziņai starp pievienotajiem IPv6 resursdatoriem savienojumam nav nepiecieÅ”ams IPv6 marÅ”rutētājs vai DHCPv6 serveris.

Link-Local adreses sākas ar 10 bitu prefiksu fe80, kam seko 54 nulles biti un pēc tam 64 bitu interfeisa identifikators (IID). IepriekÅ” minētajā pirmajā atbildē 2392:6213:a15b:66ff ir 64 bitu IID.

Looped Multicast

Pēc noklusējuma multiraides paketes tiek iekŔēji atgrieztas mezglā, kas tās nosÅ«tÄ«jis. Tas notiek gan IPv6, gan IPv4 adresÄ“Å”anai.

Å Ä«s noklusējuma darbÄ«bas iemesls ir tas, ka, nosÅ«tot multiraides paketes, var bÅ«t arÄ« klausÄ«Å”anās vietējā multiraides lietojumprogramma, kas darbojas paŔā sÅ«tÄ«tāja resursdatorā, kā arÄ« kaut kur tÄ«klā. Å ai vietējai lietojumprogrammai ir jāsaņem arÄ« multiraides paketes.

Mēs varam redzēt Å”o multiraides lokālo loku mÅ«su ping izvadē:

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

Pirmā un ātrākā atbilde (0,106 ms salÄ«dzinājumā ar 0,453 ms) nāk no Link-Local adreses, kas konfigurēta paŔā saskarnē enp3s2.

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

LietderÄ«ba ping nodroÅ”ina veidu, kā apspiest vietējo multiraides atgriezenisko saiti, izmantojot parametru -L. Ja mēs nosÅ«tām visu mezglu multiraides ping ar Å”o karogu, atbildes ir ierobežotas ar attāliem mezgliem. Mēs nesaņemam atbildi no sÅ«tÄ«Å”anas saskarnes Link-Local adreses.

[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 saites vietējās adreses

Kā jÅ«s varētu nojaust, unicast Link-Local adreses paÅ”as par sevi arÄ« nesniedz pietiekami daudz informācijas, lai norādÄ«tu, kuru saskarni izmantot, lai tās sasniegtu. Tāpat kā visu mezglu multiraides ping, mums ir jānorāda arÄ« interfeiss kā komandrindas parametrs ping vai zonas ID ar adresi, pingot Link-Local adreses.

Å oreiz mēs varam izmantot -clai ierobežotu nosÅ«tÄ«to un saņemto pakeÅ”u un atbilžu skaitu ping, jo mēs veicam 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 ~]$

Vai pārbaudīt (visas) citas IPv6 adreses?

Å ajā rakstā mēs redzējām, kā ping visiem IPv6 mezgliem kanālā, izmantojot visu mezglu multiraides IPv6 adresi. ff02::1. Mēs arÄ« redzējām, kā norādÄ«t, kuru saskarni izmantot ar visu mezglu multiraides IPv6 adresi, jo pati adrese nevar sniegt Å”o informāciju. Mēs izmantojām vai nu komandrindas opciju ping, vai norādÄ«jis interfeisu, izmantojot sufiksu %<zone_id>.

Pēc tam mēs uzzinājām par unicast Link-Local adresēm, kuras tiek izmantotas, lai atbildētu uz visu mezglu multiraides ICMPv6 atbalss pieprasījumiem.

Mēs arÄ« redzējām, kā multiraides paketes pēc noklusējuma tiek atgrieztas sÅ«tÄ«Å”anas mezglā un kā to atspējot utilÄ«tai ping.

Visbeidzot, mēs piekodinājām vienu Link-Local adresi, izmantojot sufiksu %<zone_id>, jo paÅ”as Link-Local adreses arÄ« nesniedz informāciju par izejoÅ”o interfeisu.

Tātad, kā ar ping visiem pārējiem mezgliem un iegūt to globālās unicast adreses (GUA) (tas ir, publiskās adreses internetā) vai unikālās vietējās unicast adreses (ULA)? Mēs to aplūkosim nākamajā emuāra ierakstā.

Tas ir viss.

Vairāk par mūsu kursu varat uzzināt vietnē atvērto durvju dienas piezīmes.

Avots: www.habr.com

Pievieno komentāru