IPv6 sÔlmede pingi kontrollimine kanalil

Uue kursuse voogude alguseni jÀÀb veel vaid paar pĂ€eva „VĂ”rguhaldur“ OTUS-elt. Seoses sellega soovime teiega jagada kasuliku materjali tĂ”lget teemal.

IPv6 sÔlmede pingi kontrollimine kanalil

Artiklite seeria blogis, mis on pĂŒhendatud seotud probleemide tĂ”rkeotsimise nĂ€punĂ€idetele ja soovitustele, mis kĂ€sitlevad IPv6 pingi (ICMPv6 Echo Request/Echo Reply) kĂŒsimusi

Pange tĂ€hele, et kasutan Linuxit (nimelt Fedora 31), kuid ping-kĂ€skluse sĂŒntaks teiste operatsioonisĂŒsteemide jaoks peaks olema loodetavasti vĂ€ga sarnane.

IPv6 sÔlmede pingi kontrollimine kanalil

Esimene ja kÔige lihtsam soovitus on pingida kÔik IPv6 sÔlmed kanalil.

IPv6 kasutab multicasti aadresse kĂ”ikide ĂŒks-ĂŒhele ja ĂŒks-ĂŒhele suhtlemise liikide jaoks. IPv6 aadresse ei ole, seega puuduvad saadetised (broadcast) nagu IPv4-s, kus on mitu tĂŒĂŒpi saadetiste aadresse, nĂ€iteks „limited broadcast“ aadress 255.255.255.255 [RFC1122].

Kuid olemas on 'all-nodes multicast' (ĂŒhine multikas) IPv6-aadress, seega kasutame seda, et pingida kĂ”iki IPv6 sĂ”lmi kanalil. ('Laiaulatuslik' aadress on tegelikult lihtsalt spetsiaalselt nimetatud multikas-aadress, mis on rĂŒhm multimeedia jaotust, mis hĂ”lmab kĂ”iki sĂ”lmi. Pange tĂ€hele, et nĂ€iteks 'grupi' vĂ”i multikas-aadressi bitti on kaasatud Etherneti kihtide tasemel laiaulatuslikesse aadressidesse.)

Kanalile kuuluv all-nodes multicast IPv6-aadress: ff02::1. ff tÀhistab multikas IPv6-aadressi. JÀrgmine 0 on osa lipust, kus bitid on seadistamata.

SeejĂ€rel 2 mÀÀrab multicast-grupi ulatuse. Erinevalt IPv4 multicast-aadressidest, IPv6 multicast-aadressid omavad ulatust (scope). Ulatuse vÀÀrtus nĂ€itab vĂ”rguosa, mille kaudu multicast-paketti tohib edastada. Kui pakett jĂ”uab mÀÀratud ulatuse piirile, peab pakett olema diskvalifitseeritud, sĂ”ltumata sellest, kas tema ĂŒleminekute arvu vĂ€li (Hop Count) on null. Loomulikult, kui ĂŒleminekute arv saavutab nulli enne, kui mÀÀratud multicast-grupi piirini on jĂ”utud, tĂŒhistatakse see samuti koheselt. Siin on tĂ€ielik IPv6 multicast ulatuste nimekiri.

LÔpuks, ::1 nÀitab all-nodes multicast gruppi.

Aadressist ff02::1 tuleb mĂ€rkida, et see on mitm nghÄ©a. IPv6 sĂ”lmes, millel on mitu liidest, nagu ruuter vĂ”i multi-vĂ”rgu host, aadressil ff02::1 ei ole midagi, kus oleks vĂ”imalik nĂ€idata, millisele liidesele saata ICMPv6 echo-requests vĂ”i oodata ICMPv6 echo-vastasid, kui need saabuvad. ff02::1 kehtib ja seda vĂ”ib kasutada igast liidesest ja kanalist, mis on ĂŒhendatud multi-liidese sĂ”lmega.

SeetÔttu, kui me pingime kÔiki IPv6 sÔlmi kanalil, peame teavitama utiliiti ka kuidagi. ping IPv6 puhul, millist liidest kasutada.

Liideste mÀÀratlemine - kÀskluste rida

Nagu me juba nÀgime, all-nodes multicast aadress, mida soovime kasutada - ff02::1 - ei anna mingeid andmeid selle kohta, millisele liidesele saata ja vastu vÔtta ICMPv6 echo-pÀringute ja echo-vastuste pakette.

Nii et kuidas me saame nÀidata liidest, mida kasutatakse multikaadresside vÔi unikaalsete Link-Local aadresside jaoks?

Esimene ja ilmselge viis - edastada see rakenduse parameetrina, mida kasutame.

Tööriista jaoks ping edastame me selle valiku kaudu -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 ~]$

Selle all-nodes multicast pingi abil saime mehaaniliselt vastuseid 6 IPv6-sÔlmelt. Vastused anti Link-Local IPv6-aadressidelt, mis algavad prefixesest fe80::/10.

Et ping mitte jĂ€tkama lĂ”putult ICMPv6 ehho-pĂ€ringute saatmist seni, kuni me ei katkesta seda, tavaliselt mĂ€rkime meil pakettide arvu, mida saata, valiku -c kaudu. Kuid see ei vĂ”imalda ka pingil vastu vĂ”tta ja kuvada enam kui ĂŒhte ICMPv6 ehho-vastust ICMPv6 multicast ehho-pĂ€ringu saatmisel. Selle asemel kasutasime parameetrit -w, et nĂ€idata, et ping peaks lĂ”petama 1 sekundi pĂ€rast, olenemata sellest, kui palju ehho-pĂ€ringuid vĂ”i ICMPv6 ehho-vastuseid on saadetud vĂ”i saadud.

Veel ĂŒks asi, millele tĂ€helepanu pöörata, on (DUP!) vĂ€ljund teise ja jĂ€rgneva vastuse puhul. Need paketid tuvastatakse kui vastuse duplikaadid, kuna neil on sama ICMP jĂ€rjestuse vÀÀrtus nagu esmakordselt saadetud individuaalsed ehho-pĂ€ringud ICMPv6. Need ilmuvad, kuna ICMPv6 multicast ehho-pĂ€ring toob kaasa mitmeid individuaalseid unicast vastuseid. Duplikaatide arv on samuti nĂ€idatud statistika kokkuvĂ”ttes.

Liideste mÀÀramine — Zone ID

Veel kasutatavate IPv6 aadresside parameter on sadama piires oleva vahemiku nÀitamine.

Seda nÀeme ping-i vÀljundis, kus vastavate IPv6 sÔlmede aadressidel on samuti sufiks. %enp3s2, nÀiteks:

64 baiti fe80::1d36:1fff:fefd:82be%enp3s2: icmp_seq=1 ttl=64 aeg=0,438 ms

Seda meetodit, millega mÀÀrata liideseid, on ametlikult kirjeldatud [RFC4007], "IPv6 aadresside mÀÀratletud arhitektuur". Kuigi neid nimetatakse sageli operatsioonisĂŒsteemi liideseks, mÀÀratlevad nad tegelikult midagi ĂŒldisemat — "vahemik" vĂ”i "vĂ€ljaulatus".

Üks pĂ”hjus, miks on vaja laiemate vahemike vĂ”i ulatuse tsoone, seisneb selles, et nagu mainitakse [RFC4007], vĂ”ib IPv6 sĂ”lmel olla mitu erinevat IPv6 liidest, mis on ĂŒhendatud ĂŒhe ja sama kanali kaudu. Need liidesed kuuluvad ĂŒhte tsooni.

Tuleb olla vĂ”imalik rĂŒhmastada mitu liidest tsoonis operatsioonisĂŒsteemi piires; hetkel ei tea ma, kas see on Linuxis vĂ”imalik ja kuidas seda teha.

Kasutan sufiksit %, et saaksime eemaldada kÀsurea parameetri -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-Local aadresside vastused

Selle all-nodes multicast ping'i tulemusena saime kokku 6 unikaalset vastust.

Need vastused tulid unikaalsest Link-Local aaddrendi IPv6 sÔlmedelt. NÀiteks esimene vastus:

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

Uniquecast Link-Local IPv6-aadressid on vajalikud kĂ”igil IPv6-toega liidesetel [RFC4291], 'IP versioon 6 aadressimise arhitektuur'. Selle pĂ”hjuseks on see, et IPv6 sĂ”lmel on alati automaatselt unikaalne IPv6-aadress, mida ta saab kasutada vĂ€hemalt otseĂŒhendatud kanalite kaudu teiste sĂ”lmede suhtlemiseks. See hĂ”lmab hostide rakendustega suhtlemist hostide Link-Local aadresside kaudu.

See lihtsustab protokollide, nagu IPv6 naabri avastamine ja OSPFv3, arendamist ja rakendamist. See vĂ”imaldab ka lĂ”ppkasutajate rakendustel hostides vahetada andmeid kanalil, ilma et oleks vaja mingit muud toetavat IPv6 infrastruktuuri. OtseĂŒhendatud IPv6 hostide vahel ei ole vaja IPv6 ruuterit ega DHCPv6 serverit ĂŒhenduses.

Link-Local aadressid algavad 10-bitise prefiksiga fe80, millele jĂ€rgneb 54 null-bitit ja seejĂ€rel 64-bitine liidese identifikaator (IID). Ülaltoodud esimeses vastuses 2392:6213:a15b:66ff — see on 64-bitine IID.

Looped Multicast

Vaikimisi tagastatakse multikaastpaketid siseuudiselt sÔlmele, kes need saatnud on. See toimub nii IPv6 kui ka IPv4 aadresside puhul.

Selle defekti pÔhjus on see, et multicast-pakettide saatmise ajal vÔib samas saatmise hostis töötada ka kuulav kohaliku multicast-rakendus, nagu ka kusagil vÔrgus. See kohaliku rakendus peab samuti multicast-pakette vastu vÔtma.

Me saame nĂ€ha seda multicast-kohalikku tsĂŒklit meie ping-vĂ€ljundis:

[mark@opy ~]$ ping -w 1 ff02::1%enp3s2
PING ff02::1%enp3s2(ff02::1%enp3s2) 56 andme baidi
64 baiti fe80::2392:6213:a15b:66ff%enp3s2: icmp_seq=1 ttl=64 aeg=0.106 ms
64 baiti fe80::1d36:1fff:fefd:82be%enp3s2: icmp_seq=1 ttl=64 aeg=0.453 ms (DUP!)
...

Esimene ja kiirem vastus (0,106 ms vÔrreldes 0,453 ms) tuleb Link-Local aadressilt, mis on seadistatud samal liidesel enp3s2.

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

Tööriist ping pakub viisi lokaalsete multicast jaotuste tagasiside suunamiseks parameetri abil -L. Kui me saadame ping all-nodes multicast selle toggle'ga, siis vastused piirdub vaid kaugete sÔlmedega. Me ei saa vastust saatja liidese Link-Local aadressilt.

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

Link-Local Aadresside pinge

Kuidas arvata vĂ”ite, ĂŒksikadressi Link-Local aadressid iseenesest ei paku piisavalt teavet, et nĂ€idata, millist liidest nende saavutamiseks kasutada. Nagu kĂ”ikide sĂ”lmpunktide multicast-pingil, peame ka liidese nĂ€itama kĂ€surea argumendina. ping vĂ”i zone ID koos aadressiga Link-Local aadresside pingimisel.

Seekord saame kasutada -c, et piirata saadetavate ja vastuvĂ”etavate pakettide arvu. ping, kuna teostame ĂŒksikpinget.

[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 ~]$

Pingida (kÔiki) teisi IPv6-aadresse?

Selles artiklis nÀgime, kuidas pingida kÔiki IPv6-sÔlmi kanalil, kasutades all-nodes multicast IPv6-aadressi. ff02::1. Samuti oleme nÀinud, kuidas nÀidata, millist liidest kasutada all-nodes multicast IPv6-aadressiga, kuna aadress ise ei suuda seda teavet anda. Kasutasime kas kÀsurea parameetrit ping, vÔi nÀitasime liidest sufiksi kaudu %.

. Siis Ôppisime unikast Link-Local aadressidest, mis on aadressid, mida kasutatakse all-nodes multicast ICMPv6 echo-pÀringute vastamiseks.

Olemegi nĂ€inud, kuidas multicast paketid tagastatakse saatvale sĂ”lmele vaikimisi ja kuidas seda utiliidis vĂ€lja lĂŒlitada ping.

. LÔpuks pingerisime ainsa Link-Local aadressi kasutanud sufiksiga %, kuna Link-Local aadressid ise ei anna samuti teavet vÀljuva liidese kohta.

Ent kuidas on olukord kÔigi teiste sÔlmede pingimise ja nende globaalse unikast aadressi (GUA) (st nende avaliku IP-aadressi) vÔi ainulaadse kohaliku unikast aadressiga (ULA) saamisega? RÀÀgime sellest jÀrgmises blogiartiklis.

Sellega on kÔik.

Meie kursuse kohta saate rohkem teada avatud uste pÀevade kÀigust.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster