Ping semua host IPv6 di saluran

Beberapa hari tersisa sampai dimulainya aliran baru pada kursus "Network Engineer" dari OTUS. Dalam hal ini, kami ingin membagikan terjemahan materi yang bermanfaat kepada Anda.




Serangkaian artikel blog tentang tips dan trik pemecahan masalah ping IPv6 (Permintaan Echo ICMPv6 / Balasan Echo)

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

Ping semua host IPv6 di saluran


Tip pertama dan termudah adalah melakukan ping semua host IPv6 di saluran.

IPv6 menggunakan alamat multicast untuk semua jenis komunikasi satu-ke-banyak. Tidak ada alamat IPv6 Siaran (atau Siaran). Ini membedakan IPv6 dari IPv4, di mana ada beberapa jenis alamat broadcast, misalnya, alamat "broadcast terbatas" 255.255.255.255 [RFC1122].

Namun, ada alamat IPv6 “semua-simpul multicast”, jadi kami akan menggunakannya untuk melakukan ping semua node IPv6 di saluran. (Alamat "broadcast" sebenarnya hanya alamat multicast bernama khusus, yang merupakan grup multicast yang mencakup semua node. Perhatikan bahwa, misalnya, bit "grup" atau alamat multicast termasuk dalam Alamat Siaran Ethernet di level tautan).

All-node multicast alamat IPv6 untuk saluran: ff02::1. ffmenunjukkan alamat IPv6 multicast. 0 berikutnya adalah bagian dari flag dengan bit yang tidak disetel.

Selanjutnya 2mendefinisikan area grup multicast. Tidak seperti alamat multicast IPv4, alamat multicast IPv6 memiliki cakupan. Nilai lingkup menunjukkan bagian jaringan di mana paket multicast diizinkan. Setelah paket mencapai batas ruang lingkup yang ditentukan, paket harus dibuang, terlepas dari apakah bidang Hop Count-nya bukan nol. Tentu saja, jika penghitung konversi mencapai nol sebelum mencapai batas yang ditentukan dari grup multicast, itu juga akan segera diatur ulang. Berikut adalah daftar lengkap lingkup multicast IPv6.

Terakhir, ::1tunjukkan grup multicast semua-simpul.

Tentang alamat ff02::1itu harus dicatat bahwa itu ambigu. Pada host IPv6 dengan banyak antarmuka, seperti router atau host multihomed, ff02::1tidak ada dalam alamat di mana Anda dapat menentukan antarmuka mana untuk mengirim ping ICMPv6 ke atau menunggu ping ICMPv6 ketika mereka tiba. ff02::1valid dan dapat digunakan pada antarmuka dan saluran mana saja yang terpasang pada simpul multi-antarmuka.

Oleh karena itu, ketika kita melakukan ping semua node IPv6 pada saluran, kita juga perlu memberi tahu utilitas pinguntuk IPv6 antarmuka mana yang digunakan.

Definisi Antarmuka - Opsi Baris Perintah


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

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

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

Untuk utilitas, pingkami 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 ~]$


Menggunakan ping multicast semua-simpul ini, kami menerima tanggapan dari 6 simpul IPv6. Tanggapan datang dari alamat host-IPv6 tuan rumah, dimulai dengan awalan fe80::/10.

Untuk pingmencegah permintaan gema ICMPv6 terus berlanjut tanpa henti hingga kami membatalkannya, 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 menunjukkan bahwa ping harus selesai setelah 1 detik, terlepas dari berapa banyak ping atau ping ICMPv6 yang dikirim atau diterima.

Hal lain yang perlu diperhatikan adalah (DUP!) kesimpulan pada jawaban kedua dan selanjutnya. Paket-paket ini diidentifikasi sebagai duplikat dari respons, karena mereka memiliki nilai urutan ICMP yang sama dengan ping ICMPv6 individu yang dikirim terlebih dahulu. Mereka muncul karena ICMPv6 multicast echo request menghasilkan beberapa respons unicast individu. Jumlah duplikat juga ditunjukkan dalam ringkasan statistik.

Definisi Antarmuka - ID Zona


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

Kita dapat melihat contohnya di hasil ping, di mana alamat dari simpul IPv6 yang menanggapi juga memiliki akhiran %enp3s2, misalnya:

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


Metode mendefinisikan antarmuka secara formal dijelaskan dalam [RFC4007], "Arsitektur dengan Alamat IPv6 Ditentukan." Meskipun mereka biasanya disebut antarmuka sistem operasi, mereka sebenarnya mendefinisikan sesuatu yang lebih umum - "zona" atau "ruang lingkup".

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

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

Dengan menggunakan suffix %<zone_id>, kita bisa menghapus parameter 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 ~]$



Tanggapan Alamat Tautan-Lokal


Dari ping multicast semua-simpul ini kami menerima total 6 tanggapan unik.

Tanggapan ini datang dari alamat host Unicast Link-Local IPv6. Misalnya, inilah jawaban pertama:

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


Unicast Link-Local IPv6 Addresses Diperlukan pada Semua IPv6-Enfaces Diaktifkan [RFC4291], IP Version 6 Addressing Architecture. Alasannya adalah bahwa host IPv6 selalu secara otomatis memiliki alamat IPv6 unicast, yang dapat digunakannya, setidaknya untuk berkomunikasi dengan host lain melalui saluran yang terhubung langsung. Ini termasuk komunikasi dengan aplikasi host lain melalui alamat host Link-Local.

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

Alamat tautan-lokal dimulai dengan awalan 10-bit fe80, diikuti oleh 54 nol bit, diikuti oleh pengenal antarmuka 64-bit (IID). Pada jawaban pertama di atas 2392:6213:a15b:66ff, ini adalah IID 64-bit.

Looped multicast


Secara default, paket multicast dikembalikan secara internal ke node yang mengirimkannya. Ini terjadi untuk alamat IPv6 dan IPv4.

Alasan perilaku default ini adalah bahwa ketika mengirim paket multicast, 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 bisa melihat loop lokal multicast ini di hasil ping kami:

[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 dengan 0,453 ms) berasal dari alamat Link-Local 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 ~]$


Utilitas ini pingmenyediakan cara untuk menekan umpan balik lokal dari pengiriman multicast menggunakan parameter -L. Jika kami mengirim ping semua node multicast dengan flag ini, maka responsnya terbatas pada node jarak jauh. Kami tidak menerima respons dari alamat Tautan-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 bisa Anda tebak, alamat Link-Lokal unicast sendiri juga tidak memberikan informasi yang cukup untuk menunjukkan antarmuka mana yang digunakan untuk menjangkau mereka. Seperti dalam kasus semua node multicast ping, kita juga perlu menentukan antarmuka sebagai parameter baris perintah pingatau ID zona dengan alamat saat melakukan ping ke alamat Tautan-Alamat lokal.

Kali ini kita dapat menggunakan -cuntuk membatasi jumlah paket dan respons yang dikirim dan diterima ping, karena kita 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, kami melihat cara melakukan ping semua node IPv6 pada saluran menggunakan alamat multicast IPv6 semua-node ff02::1. Kami juga melihat cara menentukan antarmuka mana yang akan digunakan dengan semua-simpul alamat IPv6 multicast, karena alamat itu saja tidak dapat memberikan informasi ini. Kami menggunakan parameter baris perintah pingatau menentukan antarmuka melalui akhiran %<zone_id>.

Kemudian kami belajar tentang alamat Link-Local unicast, yang merupakan alamat yang digunakan untuk menanggapi semua-gema permintaan ICMPv6 multicast semua node.

Kami juga melihat bagaimana paket multicast kembali ke host pengirim secara default dan cara menonaktifkannya untuk utilitas ping.

Akhirnya, kami melakukan ping satu alamat Link-Local menggunakan suffix%<zone_id>karena alamat Tautan-Lokal saja tidak memberikan informasi tentang antarmuka keluar.

Jadi bagaimana dengan mem-ping semua node lain dan mendapatkan alamat Unicast global mereka (yaitu, alamat Internet publik mereka) atau alamat Unicast lokal unik mereka (ULA)? Kami akan membahas ini di posting blog berikutnya.

Itu saja.

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

All Articles