Ping semua node IPv6 pada saluran

Beberapa hari tersisa sampai dimulainya aliran baru di jalur tersebut "Insinyur Jaringan" dari OTUS. Dalam hal ini, kami ingin berbagi dengan Anda terjemahan materi bermanfaat tentang topik tersebut.

Ping semua node IPv6 pada saluran

Serangkaian postingan blog tentang tips dan trik untuk mengatasi masalah ping IPv6 (ICMPv6 Echo Request/Echo Reply)

Harap dicatat bahwa saya menggunakan Linux (khususnya Fedora 31), namun sintaks perintah ping untuk sistem operasi lain semoga sangat mirip.

Ping semua node IPv6 pada saluran

Tip pertama dan paling sederhana adalah melakukan ping ke semua node IPv6 pada link.

IPv6 menggunakan alamat multicast untuk semua jenis komunikasi satu-ke-banyak. Tidak ada alamat IPv6 siaran (atau siaran). Hal ini membedakan IPv6 dengan IPv4, dimana terdapat beberapa jenis alamat siaran, misalnya alamat “siaran terbatas” 255.255.255.255 [RFC1122].

Namun, ada alamat IPv6 “all-nodes multicast”, jadi kami akan menggunakannya untuk melakukan ping ke semua node IPv6 pada tautan. (Alamat "siaran" sebenarnya hanyalah alamat multicast yang diberi nama khusus, yang merupakan grup multicast yang mencakup semua node. Perhatikan bahwa, misalnya, "grup" atau bit alamat multicast diaktifkan di alamat siaran Ethernet pada lapisan tautan ).

Alamat IPv6 multicast semua node untuk saluran: ff02::1. ff menunjukkan alamat IPv6 multicast. 0 berikutnya adalah bagian dari bendera dengan bit yang tidak disetel.

Selanjutnya 2 mendefinisikan area grup multicast. Tidak seperti alamat IPv4 multicast, alamat IPv6 multicast memiliki cakupan. Nilai cakupan menunjukkan bagian jaringan di mana paket multicast diperbolehkan untuk diteruskan. Setelah sebuah paket mencapai batas cakupan yang ditentukan, paket tersebut harus dibuang, terlepas dari apakah bidang Hop Count-nya bukan nol. Tentu saja, jika jumlah hop mencapai nol sebelum mencapai batas grup multicast yang ditentukan, maka akan segera direset. Berikut adalah daftar lengkap cakupan multicast IPv6.

Akhirnya, ::1 menentukan grup multicast semua node.

Tentang alamatnya ff02::1 Perlu dicatat bahwa ini ambigu. Pada host IPv6 dengan banyak antarmuka, seperti router atau host multihome, alamatnya ff02::1 tidak ada tempat di mana Anda dapat menentukan antarmuka mana yang akan mengirim permintaan gema ICMPv6 atau berharap menerima balasan gema ICMPv6 ketika permintaan tersebut tiba. ff02::1 valid dan dapat digunakan pada antarmuka dan saluran mana pun yang terpasang pada node multi-antarmuka.

Jadi ketika kita melakukan ping ke semua node IPv6 pada sebuah tautan, kita juga perlu memberi tahu utilitasnya ping untuk IPv6, antarmuka mana yang akan digunakan.

Mendefinisikan Antarmuka - Opsi Baris Perintah

Seperti yang telah kita lihat, alamat multicast semua node yang ingin kita gunakan adalah - ff02::1 - tidak memberikan informasi apa pun mengenai antarmuka mana yang akan mengirim dan menerima permintaan gema ICMPv6 dan paket balasan gema.

Jadi, bagaimana kita menentukan antarmuka yang akan digunakan untuk ruang alamat multicast atau ruang alamat Link-Lokal unicast?

Cara pertama dan paling jelas adalah dengan menyediakannya sebagai parameter pada aplikasi yang kita gunakan.

Untuk utilitas ping kami menyediakannya melalui opsi -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 ~]$

Dengan menggunakan ping multicast semua node ini, kami menerima respons dari 6 node IPv6. Respons datang dari alamat node Link-Lokal IPv6, dimulai dengan awalan fe80::/10.

Bahwa ping tidak terus mengirimkan permintaan gema ICMPv6 tanpa batas waktu hingga kami menghentikannya, kami biasanya menentukan jumlah paket yang akan dikirim melalui opsi -c. Namun, ini juga mencegah ping menerima dan menampilkan lebih dari satu balasan gema ICMPv6 saat mengirim permintaan gema ICMPv6 multicast. Sebagai gantinya, kami menggunakan opsi -w untuk menentukan bahwa ping harus selesai setelah 1 detik, tidak peduli berapa banyak permintaan gema ICMPv6 atau balasan gema yang dikirim atau diterima.

Hal lain yang perlu diperhatikan adalah (DUP!) keluaran pada jawaban kedua dan selanjutnya. Paket-paket ini diidentifikasi sebagai respons duplikat karena mereka memiliki nilai urutan ICMP yang sama dengan permintaan gema ICMPv6 individual yang dikirimkan pertama kali. Mereka muncul karena permintaan gema multicast ICMPv6 menghasilkan beberapa respons unicast individual. Jumlah duplikat juga ditunjukkan dalam ringkasan statistik.

Mendefinisikan Antarmuka - ID Zona

Cara lain untuk mengekspos antarmuka untuk digunakan adalah sebagai bagian dari parameter alamat IPv6.

Kita dapat melihat contohnya pada keluaran ping, di mana alamat host IPv6 yang merespons juga memiliki akhiran %enp3s2, misalnya:

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

Metode penentuan antarmuka ini dijelaskan secara formal di [RFC4007], "Arsitektur Alamat Buatan IPv6". Meskipun biasanya disebut antarmuka sistem operasi, mereka sebenarnya mendefinisikan sesuatu yang lebih umum—sebuah “zona” atau “cakupan.”

Alasan untuk memiliki zona atau zona cakupan yang lebih umum adalah, seperti yang disebutkan dalam [RFC4007], sebuah node IPv6 dapat memiliki beberapa antarmuka IPv6 berbeda yang terhubung ke saluran yang sama. Antarmuka ini adalah anggota dari zona yang sama.

Seharusnya dimungkinkan untuk mengelompokkan beberapa antarmuka dalam satu zona di bawah sistem operasi; Saat ini saya tidak tahu apakah ini mungkin dilakukan di Linux atau bagaimana melakukannya.

Menggunakan akhiran %<zone_id>, kita dapat menghapus opsi baris perintah -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 ~]$

Respons Alamat Tautan-Lokal

Dari ping multicast semua node ini kami menerima total 6 respons unik.

Respons ini datang dari alamat host IPv6 Link-Lokal unicast. Misalnya, inilah jawaban pertama:

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

Alamat IPv6 Unicast Link-Lokal diperlukan pada semua antarmuka yang mendukung IPv6 [RFC4291], “Arsitektur Pengalamatan IP Versi 6”. Alasannya adalah bahwa node IPv6 selalu secara otomatis memiliki alamat IPv6 unicast, yang setidaknya dapat digunakan untuk berkomunikasi dengan node lain pada link yang terhubung langsung. Ini termasuk berkomunikasi dengan aplikasi di host lain melalui alamat host Link-Lokal.

Hal ini menyederhanakan desain dan implementasi protokol seperti IPv6 Neighbor Discovery dan OSPFv3. Hal ini juga memungkinkan aplikasi pengguna akhir pada host untuk berkomunikasi melalui saluran tanpa memerlukan infrastruktur IPv6 pendukung lainnya pada saluran tersebut. Komunikasi langsung antara host IPv6 yang terhubung tidak memerlukan router IPv6 atau server DHCPv6 pada sambungannya.

Alamat Link-Lokal dimulai dengan awalan 10-bit fe80, diikuti oleh 54 bit nol dan kemudian pengidentifikasi antarmuka (IID) 64-bit. Pada jawaban pertama di atas 2392:6213:a15b:66ff adalah IID 64-bit.

Multicast Melingkar

Secara default, paket multicast dikembalikan secara internal ke node yang mengirimkannya. Hal ini terjadi untuk pengalamatan IPv6 dan IPv4.

Alasan untuk perilaku default ini adalah ketika paket multicast dikirim, mungkin juga ada aplikasi multicast lokal yang mendengarkan yang berjalan di host pengirim itu sendiri, serta di suatu tempat di jaringan. Aplikasi lokal ini juga harus menerima paket multicast.

Kita dapat melihat loop lokal multicast ini di keluaran ping kita:

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

Respons pertama dan tercepat (0,106 ms dibandingkan 0,453 ms) berasal dari alamat Link-Lokal yang dikonfigurasi pada antarmuka itu sendiri enp3s2.

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

а ping menyediakan cara untuk menekan umpan balik multicast lokal menggunakan parameter -L. Jika kita mengirimkan ping multicast ke semua node dengan tanda ini, maka responsnya terbatas pada node jarak jauh. Kami tidak menerima respons dari alamat Link-Lokal antarmuka pengirim.

[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-Alamat Lokal

Seperti yang Anda duga, alamat Link-Lokal unicast saja tidak memberikan informasi yang cukup untuk menunjukkan antarmuka mana yang digunakan untuk menjangkau alamat tersebut. Seperti halnya ping multicast semua node, kita juga perlu menentukan antarmuka sebagai parameter baris perintah ping atau ID zona dengan alamat saat melakukan ping ke alamat Link-Lokal.

Kali ini bisa kita gunakan -cuntuk membatasi jumlah paket dan tanggapan yang dikirim dan diterima ping, karena kami melakukan ping unicast.

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

Ping (semua) alamat IPv6 lainnya?

Pada artikel ini, kita melihat cara melakukan ping ke semua node IPv6 pada saluran menggunakan alamat IPv6 multicast semua node ff02::1. Kita juga melihat cara menentukan antarmuka mana yang akan digunakan dengan alamat IPv6 multicast semua node, karena alamat itu sendiri tidak dapat memberikan informasi ini. Kami menggunakan opsi baris perintah ping, atau menentukan antarmuka menggunakan akhiran %<zone_id>.

Kemudian kita belajar tentang alamat Link-Lokal unicast, yang merupakan alamat yang digunakan untuk merespons permintaan gema ICMPv6 multicast semua node.

Kita juga melihat bagaimana paket multicast dikembalikan ke node pengirim secara default dan cara menonaktifkannya untuk utilitas tersebut ping.

Terakhir, kami melakukan ping ke satu alamat Link-Lokal menggunakan akhiran %<zone_id>, karena alamat Link-Lokal sendiri juga tidak memberikan informasi tentang antarmuka keluar.

Jadi bagaimana dengan melakukan ping ke semua node lain dan mendapatkan alamat unicast global (GUA) (yaitu, alamat publik di Internet) atau alamat unicast lokal unik (ULA)? Kita akan melihat ini di posting blog berikutnya.

Itu saja.

Anda dapat mengetahui lebih lanjut tentang kursus kami di catatan hari terbuka.

Sumber: www.habr.com

Tambah komentar