Суваг дээрх бүх IPv6 зангилааг ping хийх

Шинэ урсгал эхлэхэд хэдхэн хоног үлдлээ "Сүлжээний инженер" OTUS-аас. Үүнтэй холбогдуулан бид та бүхэнтэй энэ сэдвээр хэрэгтэй материалын орчуулгыг хуваалцахыг хүсч байна.

Суваг дээрх бүх IPv6 зангилааг ping хийх

IPv6 пингийн асуудлыг шийдвэрлэх зөвлөмж, аргачлалын талаархи цуврал блог нийтлэлүүд (ICMPv6 Echo Request/Echo Reply)

Би Linux (ялангуяа Fedora 31) ашиглаж байгааг анхаарна уу, гэхдээ бусад үйлдлийн системүүдийн ping командын синтакс нь маш төстэй байх ёстой гэж найдаж байна.

Суваг дээрх бүх IPv6 зангилааг ping хийх

Эхний бөгөөд хамгийн энгийн зөвлөгөө бол холбоос дээрх бүх IPv6 зангилааг ping хийх явдал юм.

IPv6 нь бүх төрлийн нэгээс олон харилцаанд multicast хаягуудыг ашигладаг. Өргөн нэвтрүүлгийн (эсвэл өргөн нэвтрүүлгийн) IPv6 хаяг байхгүй. Энэ нь IPv6-г IPv4-ээс ялгадаг бөгөөд энд хэд хэдэн төрлийн өргөн нэвтрүүлгийн хаягууд байдаг, жишээлбэл, "хязгаарлагдмал өргөн нэвтрүүлгийн" хаяг 255.255.255.255 [RFC1122].

Гэсэн хэдий ч, "бүх зангилааны олон дамжуулалт" IPv6 хаяг байгаа тул бид холбоос дээрх бүх IPv6 зангилаанд ping хийхдээ үүнийг ашиглана. ("Өргөн нэвтрүүлгийн" хаяг нь үнэндээ зүгээр л тусгайлан нэрлэгдсэн олон дамжуулалтын хаяг бөгөөд энэ нь бүх зангилааг багтаасан олон дамжуулалтын бүлэг юм. Жишээлбэл, "бүлэг" эсвэл олон дамжуулалтын хаягийн бит нь Ethernet өргөн нэвтрүүлгийн хаягуудын холбоосын давхаргад асаалттай байгааг анхаарна уу. ).

Сувгийн бүх зангилааны олон дамжуулалтын IPv6 хаяг: ff02::1. ff multicast IPv6 хаягийг илэрхийлдэг. Дараагийн 0 нь тохируулаагүй бит бүхий тугны хэсэг юм.

цаашид 2 multicast бүлгийн талбайг тодорхойлдог. Олон дамжуулалтын IPv4 хаягуудаас ялгаатай нь олон дамжуулалтын IPv6 хаягууд нь хамрах хүрээтэй байдаг. Хамрах хүрээний утга нь сүлжээний олон дамжуулалтын багцыг дамжуулахыг зөвшөөрсөн хэсгийг заана. Пакет нь заасан хамрах хүрээний хил хязгаарт хүрмэгц түүний Hop Count талбар нь тэгээс ялгаатай эсэхээс үл хамааран пакетыг орхих ёстой. Мэдээжийн хэрэг, заасан олон дамжуулалтын бүлгийн хил хязгаарт хүрэхээс өмнө хоп тоо тэг хүрвэл тэр даруй дахин тохируулагдана. Энд IPv6 multicast хамрах хүрээний бүрэн жагсаалт байна.

Эцэст нь хэлэхэд ::1 бүх зангилааны олон дамжуулалтын бүлгийг зааж өгнө.

Хаягийн тухай ff02::1 Энэ нь хоёрдмол утгатай гэдгийг тэмдэглэх нь зүйтэй. Чиглүүлэгч эсвэл олон гэрт хост гэх мэт олон интерфейстэй IPv6 хост дээр хаяг ff02::1 ICMPv6 цуурайны хүсэлтийг аль интерфэйс рүү илгээхийг зааж өгөх эсвэл ирэх үед ICMPv6 цуурайны хариу хүлээж авах боломжтой юу ч байхгүй. ff02::1 хүчинтэй бөгөөд олон интерфейсийн зангилаатай холбогдсон аль ч интерфэйс болон суваг дээр ашиглагдаж болно.

Тиймээс бид холбоос дээрх бүх IPv6 зангилаануудыг ping хийхдээ ямар нэгэн байдлаар хэрэгсэлд хэлэх хэрэгтэй ping IPv6-д ямар интерфейсийг ашиглах вэ.

Интерфейсийг тодорхойлох - Командын мөрийн сонголт

Бидний ашиглахыг хүссэн бүх зангилааны олон дамжуулалтын хаяг нь − юм ff02::1 - ICMPv6 echo хүсэлт болон цуурай хариу пакетуудыг ямар интерфейсээр илгээх, хүлээн авах талаар ямар ч мэдээлэл өгөхгүй.

Тэгэхээр бид олон дамжуулалтын хаягийн орон зай эсвэл unicast Link-Local хаягийн орон зайд ашиглах интерфейсийг хэрхэн тодорхойлох вэ?

Эхний бөгөөд хамгийн ойлгомжтой арга бол үүнийг бидний ашиглаж буй програмын параметр болгон өгөх явдал юм.

Хэрэглээний хувьд ping Бид үүнийг сонголтоор хангадаг -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 ~]$

Энэ бүх зангилааны олон дамжуулалтын ping ашиглан бид 6 IPv6 зангилаанаас хариулт авсан. Хариултууд нь угтвараас эхлээд Link-Local IPv6 зангилааны хаягуудаас ирсэн fe80::/10.

гэж ping нь ICMPv6 echo хүсэлтийг тасалдуулах хүртэл тодорхойгүй хугацаагаар үргэлжлүүлэн илгээдэггүй, бид ихэвчлэн -c сонголтоор илгээх багцын тоог тодорхойлдог. Гэсэн хэдий ч энэ нь олон дамжуулалттай ICMPv6 echo хүсэлтийг илгээх үед ping нь нэгээс олон ICMPv6 цуурайны хариуг хүлээн авч харуулахаас сэргийлдэг. Үүний оронд бид ICMPv1 echo хүсэлт, цуурайны хариуг илгээсэн эсвэл хүлээн авсан эсэхээс үл хамааран ping нь 6 секундын дараа дуусах ёстой гэдгийг зааж өгөхийн тулд -w сонголтыг ашигласан.

Өөр нэг анхаарах зүйл бол (DUP!) хоёр дахь болон дараагийн хариултуудын гаралт. Эдгээр пакетууд нь анх илгээсэн ICMPv6 цуурайны хүсэлттэй ижил ICMP дарааллын утгатай тул давхардсан хариултууд гэж тодорхойлогддог. Эдгээр нь ICMPv6 multicast echo хүсэлт нь олон бие даасан unicast хариу өгдөг учраас гарч ирдэг. Давхардсан тоог статистикийн хураангуйд мөн зааж өгсөн болно.

Интерфейсийг тодорхойлох - бүсийн ID

Интерфэйсийг ашиглах өөр нэг арга бол IPv6 хаягийн параметрийн нэг хэсэг юм.

Үүний жишээг бид хариулж буй IPv6 хостуудын хаягууд нь дагавартай байдаг пинг гаралтаас харж болно. %enp3s2Жишээ нь:

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

Интерфейсийг тодорхойлох энэ аргыг [RFC4007], "IPv6 тодорхойлсон хаягийн архитектур"-д албан ёсоор тайлбарласан болно. Хэдийгээр тэдгээрийг ихэвчлэн үйлдлийн системийн интерфейс гэж нэрлэдэг ч үнэндээ "бүс" эсвэл "хамрах хүрээ" гэсэн илүү ерөнхий зүйлийг тодорхойлдог.

Илүү ерөнхий бүс эсвэл хамрах хүрээний бүстэй байх болсон шалтгаан нь [RFC4007]-д дурдсанчлан IPv6 зангилаа нь нэг сувагт холбогдсон хэд хэдэн өөр IPv6 интерфэйстэй байж болно. Эдгээр интерфейсүүд нь нэг бүсийн гишүүд юм.

Үйлдлийн системийн хүрээнд хэд хэдэн интерфейсийг бүлэглэх боломжтой байх ёстой; Одоогоор би үүнийг Линукс дээр хийх боломжтой эсэхийг мэдэхгүй байна.

Дагаврыг ашиглан %<zone_id>, бид тушаалын мөрийн сонголтыг устгаж болно -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 ~]$

Холбоос-Орон нутгийн хаягийн хариултууд

Энэ бүх зангилааны олон дамжуулалтаас бид нийт 6 өвөрмөц хариултыг хүлээн авсан.

Эдгээр хариулт нь unicast Link-Local IPv6 хост хаягуудаас ирсэн. Жишээлбэл, эхний хариулт энд байна:

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

Unicast Link-Local IPv6 хаягууд нь бүх IPv6-г идэвхжүүлсэн интерфэйсүүд [RFC4291], “IP хувилбар 6 хаягжилтын архитектур” дээр шаардлагатай. Үүний шалтгаан нь IPv6 зангилаа үргэлж автоматаар Unicast IPv6 хаягтай байдаг бөгөөд энэ нь ядаж шууд холбогдсон холбоосуудынхаа бусад зангилаатай холбогдоход ашиглаж болно. Үүнд Link-Local хост хаягуудаар дамжуулан бусад хостууд дээрх програмуудтай харилцах багтана.

Энэ нь IPv6 Neighbor Discovery болон OSPFv3 зэрэг протоколуудын дизайн, хэрэгжилтийг хялбаршуулдаг. Энэ нь мөн хостууд дээрх эцсийн хэрэглэгчийн програмуудыг суваг дээр бусад IPv6 дэд бүтцийг дэмжих шаардлагагүйгээр сувгаар харилцах боломжийг олгодог. Холбогдсон IPv6 хостуудын хооронд шууд харилцах нь холболтод IPv6 чиглүүлэгч эсвэл DHCPv6 сервер шаарддаггүй.

Link-Local хаягууд нь 10 битийн угтвараас эхэлдэг fe80, дараа нь 54 тэг бит, дараа нь 64 битийн интерфэйс танигч (IID). Дээрх эхний хариултанд 2392:6213:a15b:66ff нь 64 битийн IID юм.

Давтагдсан олон дамжуулалт

Анхдагч байдлаар, multicast пакетуудыг илгээсэн зангилаа руу дотооддоо буцааж өгдөг. Энэ нь 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 ~]$

Хэрэгсэл ping параметрийг ашиглан орон нутгийн олон дамжуулалтын санал хүсэлтийг дарах арга замыг өгдөг -L. Хэрэв бид энэ тугтай бүх зангилаа multicast ping илгээвэл хариу нь алсын зангилаагаар хязгаарлагдана. Бид илгээж буй интерфейсийн 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 холбоос-Орон нутгийн хаягууд

Таны таамаглаж байгаагаар unicast Link-Local хаягууд нь тэдгээрт холбогдохын тулд ямар интерфейсийг ашиглахыг зааж өгөх хангалттай мэдээлэл өгдөггүй. Бүх зангилааны multicast ping-ийн нэгэн адил бид интерфейсийг тушаалын мөрийн параметр болгон зааж өгөх хэрэгтэй ping эсвэл Link-Local хаягуудыг ping хийх үед хаягтай бүсийн ID.

Энэ удаад бид ашиглаж болно -cилгээсэн болон хүлээн авсан багц болон хариултын тоог хязгаарлах ping, бид 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 ~]$

Бусад IPv6 хаягуудыг ping (бүх)?

Энэ нийтлэлд бид суваг дээрх бүх IPv6 зангилааг бүх зангилааны олон дамжуулалт IPv6 хаяг ашиглан хэрхэн ping хийх талаар үзсэн. ff02::1. Хаяг нь өөрөө энэ мэдээллийг өгөх боломжгүй тул бид бүх зангилааны олон дамжуулалт IPv6 хаягтай ямар интерфэйсийг ашиглахыг хэрхэн зааж өгөхийг олж харсан. Бид командын мөрийн аль нэг сонголтыг ашигласан ping, эсвэл дагаварыг ашиглан интерфейсийг зааж өгсөн %<zone_id>.

Дараа нь бид бүх зангилааны multicast ICMPv6 echo хүсэлтэд хариу өгөх хаягууд болох Unicast Link-Local хаягуудын талаар олж мэдсэн.

Бид мөн олон дамжуулалтын пакетуудыг анхдагчаар илгээх цэг рүү хэрхэн буцаадаг, мөн үүнийг хэрэгсэлд хэрхэн идэвхгүй болгохыг харсан. ping.

Эцэст нь бид дагаварыг ашиглан ганц Link-Local хаяг руу пинг хийсэн %<zone_id>, учир нь Link-Local хаягууд нь өөрөө гарч буй интерфейсийн талаар мэдээлэл өгдөггүй.

Тэгвэл бусад бүх зангилаануудыг ping хийж, тэдний глобал Unicast хаяг (GUA) (өөрөөр хэлбэл Интернэт дэх нийтийн хаяг) эсвэл өвөрмөц орон нутгийн Unicast хаягийг (ULA) авах талаар юу хэлэх вэ? Бид үүнийг дараагийн блог нийтлэлдээ авч үзэх болно.

Ердөө л тэр.

Та манай сургалтын талаар дэлгэрэнгүй мэдээлэл авах боломжтой нээлттэй өдрийн тэмдэглэл.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх