Bir kanaldaki tüm IPv6 düğümlerine ping işlemi uygulayın

Bu oranda yeni bir akışın başlamasına birkaç gün kaldı "Ağ Mühendisi" OTUS'tan. Bu bağlamda, konuyla ilgili faydalı materyalin bir çevirisini sizlerle paylaşmak istiyoruz.

Bir kanaldaki tüm IPv6 düğümlerine ping işlemi uygulayın

IPv6 ping sorunlarını gidermeye yönelik ipuçları ve püf noktaları hakkında bir dizi blog yazısı (ICMPv6 Yankı İsteği/Yankı Yanıtı)

Lütfen Linux (özellikle Fedora 31) kullandığımı unutmayın, ancak diğer işletim sistemleri için ping komutu sözdiziminin çok benzer olacağını umuyorum.

Bir kanaldaki tüm IPv6 düğümlerine ping işlemi uygulayın

İlk ve en basit ipucu, bağlantıdaki tüm IPv6 düğümlerine ping atmaktır.

IPv6, tüm birden çoğa iletişim türleri için çok noktaya yayın adreslerini kullanır. Yayın (veya yayın) IPv6 adresi yok. Bu, IPv6'yı, çeşitli türde yayın adreslerinin bulunduğu IPv4'ten ayırır; örneğin, "sınırlı yayın" adresi 255.255.255.255 [RFC1122].

Ancak, "tüm düğümlere çok noktaya yayın" IPv6 adresi vardır, dolayısıyla bunu bağlantıdaki tüm IPv6 düğümlerine ping atmak için kullanacağız. (Bir "yayın" adresi aslında tüm düğümleri içeren bir çok noktaya yayın grubu olan özel olarak adlandırılmış çok noktaya yayın adresidir. Örneğin, bağlantı katmanındaki Ethernet yayın adreslerinde "grup" veya çok noktaya yayın adresi bitinin açık olduğunu unutmayın. ).

Kanalın tüm düğümlere çok noktaya yayın IPv6 adresi: ff02::1. ff çok noktaya yayın IPv6 adresini belirtir. Sonraki 0, bayrağın ayarlanmamış bitleri olan kısmıdır.

İleri 2 çok noktaya yayın grubunun alanını tanımlar. Çok noktaya yayın IPv4 adreslerinin aksine, çok noktaya yayın IPv6 adreslerinin bir kapsamı vardır. Kapsam değeri, çok noktaya yayın paketinin iletilmesine izin verilen ağ bölümünü belirtir. Bir paket belirtilen kapsamın sınırına ulaştığında, Atlama Sayısı alanının sıfırdan farklı olup olmadığına bakılmaksızın paketin bırakılması gerekir. Tabii ki, eğer atlama sayısı belirlenen çoklu yayın grup sınırına ulaşmadan önce sıfıra ulaşırsa, o da hemen sıfırlanır. Burada IPv6 çok noktaya yayın kapsamının tam listesi bulunmaktadır.

Son olarak, ::1 tüm düğümlerden oluşan çok noktaya yayın grubunu belirtir.

Adres hakkında ff02::1 Bunun belirsiz olduğunu belirtmek gerekir. Yönlendirici veya birden çok ana bilgisayara bağlı ana bilgisayar gibi birden çok arabirime sahip bir IPv6 ana bilgisayarında, adres ff02::1 ICMPv6 yankı isteklerini hangi arayüze göndereceğinizi veya geldiğinde ICMPv6 yankı yanıtlarını almayı bekleyeceğinizi belirtebileceğiniz hiçbir şey yoktur. ff02::1 geçerlidir ve çoklu arayüz düğümüne bağlı herhangi bir arayüz ve kanalda kullanılabilir.

Dolayısıyla bir bağlantıdaki tüm IPv6 düğümlerine ping işlemi uyguladığımızda, bunu bir şekilde yardımcı programa da bildirmemiz gerekir. ping IPv6 için hangi arayüzün kullanılacağı.

Arayüzleri Tanımlama - Komut Satırı Seçeneği

Daha önce gördüğümüz gibi, kullanmak istediğimiz tüm düğümlere çok noktaya yayın adresi – ff02::1 - ICMPv6 yankı isteği ve yankı yanıt paketlerinin hangi arayüzden gönderilip alınacağına ilişkin herhangi bir bilgi sağlamaz.

Peki, çok noktaya yayın adres alanı veya tek noktaya yayın Bağlantı-Yerel adres alanı için kullanılacak arayüzü nasıl belirleyeceğiz?

İlk ve en belirgin yol, bunu kullandığımız uygulamaya parametre olarak sağlamaktır.

Fayda için ping seçeneği aracılığıyla sağlıyoruz -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 ~]$

Bu tüm düğümlere çok noktaya yayın ping'ini kullanarak 6 IPv6 düğümünden yanıt aldık. Yanıtlar, önekle başlayarak Yerel Bağlantı IPv6 düğüm adreslerinden geldi fe80::/10.

O ping biz onu kesene kadar ICMPv6 yankı isteklerini süresiz olarak göndermeye devam etmez, genellikle gönderilecek paket sayısını -c seçeneğiyle belirtiriz. Ancak bu aynı zamanda ping'in çok noktaya yayın ICMPv6 yankı isteği gönderirken birden fazla ICMPv6 yankı yanıtını kabul etmesini ve görüntülemesini de engeller. Bunun yerine, kaç tane ICMPv1 yankı isteği veya yankı yanıtı gönderilir veya alınırsa alınsın, ping'in 6 saniye sonra tamamlanması gerektiğini belirtmek için -w seçeneğini kullandık.

Dikkat edilmesi gereken bir diğer husus ise (DUP!) ikinci ve sonraki cevapların çıktısı. Bu paketler, ilk etapta gönderilen bireysel ICMPv6 yankı istekleriyle aynı ICMP dizi değerine sahip oldukları için yinelenen yanıtlar olarak tanımlanır. Bir ICMPv6 çok noktaya yayın yankı isteğinin birden çok bireysel tek noktaya yayın yanıtıyla sonuçlanması nedeniyle görünürler. Tekrarların sayısı istatistik özetinde de belirtilir.

Arayüzleri Tanımlama - Bölge Kimliği

Bir arayüzü kullanıma sunmanın başka bir yolu da IPv6 adres parametresinin bir parçası olmaktır.

Bunun bir örneğini, yanıt veren IPv6 ana bilgisayarlarının adreslerinin de son eke sahip olduğu ping çıkışında görebiliriz. %enp3s2Örneğin:

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

Arayüzleri belirlemeye yönelik bu yöntem resmi olarak [RFC4007], "IPv6 Tanımlı Adres Mimarisi"nde açıklanmıştır. Genellikle işletim sistemi arayüzü olarak adlandırılsalar da aslında daha genel bir şeyi tanımlarlar: "bölge" veya "kapsam".

Daha genel bölgelere veya kapsam bölgelerine sahip olmanın nedeni, [RFC4007]'de bahsedildiği gibi, bir IPv6 düğümünün aynı kanala bağlı birkaç farklı IPv6 arayüzüne sahip olabilmesidir. Bu arayüzler aynı bölgenin üyeleridir.

İşletim sistemi altındaki bir bölgede birden çok arabirimi gruplandırmak mümkün olmalıdır; Şu anda bunun Linux altında mümkün olup olmadığını veya nasıl yapılacağını bilmiyorum.

Son eki kullanma %<zone_id>komut satırı seçeneğini kaldırabiliriz -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 ~]$

Bağlantı-Yerel Adres Yanıtları

Bu tüm düğümlere çok noktaya yayın pinginden toplam 6 benzersiz yanıt aldık.

Bu yanıtlar tek noktaya yayın Bağlantı Yerel IPv6 ana bilgisayar adreslerinden geldi. Mesela ilk cevap şu:

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

Tek Noktaya Yayın Bağlantısı-Yerel IPv6 adresleri tüm IPv6 özellikli arayüzlerde gereklidir [RFC4291], “IP Sürüm 6 Adresleme Mimarisi”. Bunun nedeni, bir IPv6 düğümünün her zaman otomatik olarak tek noktaya yayın IPv6 adresine sahip olmasıdır; bu adresi en azından doğrudan bağlı bağlantılarındaki diğer düğümlerle iletişim kurmak için kullanabilir. Buna, Yerel Bağlantı ana bilgisayar adresleri aracılığıyla diğer ana bilgisayarlardaki uygulamalarla iletişim kurmak da dahildir.

Bu, IPv6 Komşu Keşfi ve OSPFv3 gibi protokollerin tasarımını ve uygulanmasını basitleştirir. Ayrıca ana bilgisayarlardaki son kullanıcı uygulamalarının, kanalda başka bir destekleyici IPv6 altyapısına ihtiyaç duymadan kanal üzerinden iletişim kurmasına olanak tanır. Bağlı IPv6 ana bilgisayarları arasındaki doğrudan iletişim, bağlantıda bir IPv6 yönlendiricisine veya DHCPv6 sunucusuna ihtiyaç duymaz.

Yerel Bağlantı adresleri 10 bitlik bir önekle başlar fe80, ardından 54 sıfır bit ve ardından 64 bitlik bir arayüz tanımlayıcı (IID). Yukarıdaki ilk cevapta 2392:6213:a15b:66ff 64 bitlik bir IID'dir.

Döngülü Çok Noktaya Yayın

Varsayılan olarak çok noktaya yayın paketleri, onları gönderen düğüme dahili olarak döndürülür. Bu hem IPv6 hem de IPv4 adresleme için gerçekleşir.

Bu varsayılan davranışın nedeni, çok noktaya yayın paketleri gönderildiğinde, gönderen ana bilgisayarın kendisinde ve ağ üzerinde bir yerde çalışan, dinleyen bir yerel çok noktaya yayın uygulamasının da bulunabilmesidir. Bu yerel uygulamanın aynı zamanda çok noktaya yayın paketleri alması gerekir.

Bu çok noktaya yayın yerel döngüsünü ping çıktımızda görebiliriz:

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

İlk ve en hızlı yanıt (0,106 ms'ye kıyasla 0,453 ms), arayüzün kendisinde yapılandırılan Yerel Bağlantı adresinden gelir. enp3s2.

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

Yarar ping parametresini kullanarak yerel çok noktaya yayın geri bildirimini bastırmanın bir yolunu sağlar -L. Bu bayrakla tüm düğümlere çok noktaya yayın pingi gönderirsek yanıtlar uzak düğümlerle sınırlıdır. Gönderen arayüzün Link-Local adresinden yanıt alamıyoruz.

[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 Bağlantısı-Yerel Adresler

Tahmin edebileceğiniz gibi tek noktaya yayın Bağlantı-Yerel adresleri, onlara ulaşmak için hangi arayüzün kullanılacağını belirtmek için tek başına yeterli bilgi sağlamaz. Tüm düğümlere çok noktaya yayın ping'inde olduğu gibi, arayüzü de bir komut satırı parametresi olarak belirtmemiz gerekir. ping veya Yerel Bağlantı adreslerine ping işlemi yapılırken adresli bölge kimliği.

Bu sefer kullanabiliriz -cgönderilen ve alınan paketlerin ve yanıtların sayısını sınırlamak için ping, tek noktaya yayın pingi gerçekleştirdiğimiz için.

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

Diğer IPv6 adreslerine (tümü) ping atılsın mı?

Bu makalede, tüm düğümlere çok noktaya yayın IPv6 adresi kullanarak bir kanaldaki tüm IPv6 düğümlerine nasıl ping atacağımızı gördük. ff02::1. Ayrıca, adresin kendisi bu bilgiyi sağlayamadığı için tüm düğümlere çok noktaya yayın IPv6 adresiyle hangi arayüzün kullanılacağını nasıl belirleyeceğimizi de gördük. Komut satırı seçeneğini kullandık ping, veya son eki kullanarak arayüzü belirttiniz %<zone_id>.

Daha sonra, tüm düğümlerin çok noktaya yayın ICMPv6 yankı isteklerine yanıt vermek için kullanılan adresler olan tek noktaya yayın Bağlantı-Yerel adreslerini öğrendik.

Ayrıca çok noktaya yayın paketlerinin varsayılan olarak gönderen düğüme nasıl döndürüldüğünü ve yardımcı program için bunun nasıl devre dışı bırakılacağını da gördük. ping.

Son olarak, son eki kullanarak tek bir Yerel Bağlantı adresine ping işlemi uyguladık. %<zone_id>Yerel Bağlantı adreslerinin kendisi de giden arayüz hakkında bilgi sağlamadığından.

Peki diğer tüm düğümlere ping atıp küresel tek noktaya yayın adreslerini (GUA'lar) (yani İnternet'teki genel adresleri) veya benzersiz yerel tek noktaya yayın adreslerini (ULA'lar) almaya ne dersiniz? Bir sonraki blog yazısında buna bakacağız.

Hepsi bu.

Kursumuz hakkında daha fazla bilgiyi şu adreste bulabilirsiniz: açık gün notları.

Kaynak: habr.com

Yorum ekle