IPv6'ya hazır deneme/hata ayıklama uygulamaları

Sisteminizi IPv6'ya hazırladıktan sonra onu ağ iletişiminde kullanmak isteyeceksiniz. Bunun için ilk olarak bir dinleme (sniffer) programı yardımıyla IPv6 paketlerini sorgulamayı öğrenmelisiniz. Bunu, hata ayıklama/sorun çözme konularında çok zaman kazandırıcı olduğundan şiddetle öneriyorum.

IPv6 ping6

Bu program normal olarak iputils paketine dahildir. Basitçe ICMPv6 echo-request paketlerini gönderip ICMPv6 echo-reply paketlerini alarak aktarım denemeleri yapar.

Kullanımı:

ping6 ipv6adreslikonakismi
ping6 ipv6adresi
ping6 [-I aygıt] yerel-ipv6adresi

Örnek:

# ping6 -c 1 ::1
PING ::1(::1) from ::1 : 56 data bytes
64 bytes from ::1: icmp_seq=0 hops=64 time=292 usec
--- ::1 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max/mdev = 0.292/0.292/0.292/0.000 ms

İpucu

ping6 soket'e alt seviye (raw) erişime, dolayısıyla root yetkilerine ihtiyaç duyar. Bu nedenle eğer root olmayan kullanıcılar eğer ping6 komutunu kullanamıyorlarsa aşağıdaki iki sorundan birisi var demektir:

  • ping6 kullanıcının dosya arama yollarında (path) değildir (ping6 genellikle /usr/sbin dizininde olduğundan kullanıcının dosya arama yollarında yeralmaması büyük olasılıktır, bu dizin kullanıcının yoluna eklenebilir ama tavsiye edilmez).
  • ping6'nın düzgün çalışmamasının sebebi genellikle yeterli izinlere sahip olmamasından kaynaklanır; çözümü: chmod u+s /usr/sbin/ping6

IPv6 ping için arabirimin belirtilmesi

IPv6 ping için yerel-bağlantı adresinin kullanılması durumunda çekirdek hangi fiziksel veya mantıksal arabirimi kullanarak paketleri göndereceğini bilmediğinden aşağıdaki gibi bir hata ortaya çıkar:

# ping6 fe80::212:34ff:fe12:3456
connect: Invalid argument

Böyle bir durumda arabirimi aşağıdaki gibi belirtebilirsiniz:

# ping6 -I eth0 -c 1 fe80::2e0:18ff:fe90:9205
PING fe80::212:23ff:fe12:3456(fe80::212:23ff:fe12:3456) from fe80::212:34ff:fe12:3478 eth0: 56 data bytes
64 bytes from fe80::212:23ff:fe12:3456: icmp_seq=0 hops=64 time=445 usec
--- fe80::2e0:18ff:fe90:9205 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max/mdev = 0.445/0.445/0.445/0.000 ms

Çoğa gönderim adreslerinde ping6 kullanımı

Bir bağlantıdaki etkin IPv6 istemcilerini sınamanın bir yolu ağdaki tüm düğümler için ping6 kullanmaktır:

# ping6 -I eth0 ff02::1
PING ff02::1(ff02::1) from fe80:::2ab:cdff:feef:0123 eth0: 56 data bytes
64 bytes from ::1: icmp_seq=1 ttl=64 time=0.104 ms
64 bytes from fe80::212:34ff:fe12:3450: icmp_seq=1 ttl=64 time=0.549 ms (DUP!)

IPv4'de çoğa gönderim adreslerine ping cevabı gönderilmesi iptal edilebilirken bu işlemi IPv6'da sadece yerel güvenlik duvarı ile yapmak mümkündür.

IPv6 traceroute6

Bu program normal olarak iputils paketine dahildir. IPv4'de kullanılan traceroute programına benzer. Aşağıda örnek bir kullanımı bulunmaktadır:

# traceroute6 www.6bone.net
traceroute to 6bone.net (3ffe:b00:c18:1::10) from 3ffe:ffff:0000:f101::2, 30 hops max, 16 byte packets
 1 localipv6gateway (2001:0db8:0000:f101::1) 1.354 ms 1.566 ms 0.407 ms 
 2 swi6T1-T0.ipv6.switch.ch (3ffe:2000:0:400::1) 90.431 ms 91.956 ms 92.377 ms
 3 3ffe:2000:0:1::132 (3ffe:2000:0:1::132) 118.945 ms 107.982 ms 114.557 ms
 4 3ffe:c00:8023:2b::2 (3ffe:c00:8023:2b::2) 968.468 ms 993.392 ms 973.441 ms
 5 3ffe:2e00:e:c::3 (3ffe:2e00:e:c::3) 507.784 ms 505.549 ms 508.928 ms
 6 www.6bone.net (3ffe:b00:c18:1::10) 1265.85 ms * 1304.74 ms

Not

IPv4 ile kullanılan hem ICMPv4 echo-request paketlerini hem de UDP paketlerini kullanabilen traceroute'un son sürümlerinin aksine, güncel traceroute6 sadece UDP paketlerini gönderebilmektedir. Bildiğiniz gibi güvenlik duvarları veya yönlendiriciler için ICMP echo-request paketleri UDP paketlerine göre daha fazla kabul edilen paketlerdir.

IPv6 tracepath6

Bu program normal olarak iputils paketine dahildir. traceroute6 programına benzer şekilde verilen bir hedefe ulaşmak için gerekli MTU'yu hesaplayarak yolu izler. Aşağıda kullanımına bir örnek verilmiştir:

# tracepath6 www.6bone.net
 1?: [LOCALHOST] pmtu 1480
 1: 3ffe:401::2c0:33ff:fe02:14 150.705ms
 2: 3ffe:b00:c18::5 267.864ms
 3: 3ffe:b00:c18::5 asymm 2 266.145ms pmtu 1280
 3: 3ffe:3900:5::2 asymm 4 346.632ms
 4: 3ffe:28ff:ffff:4::3 asymm 5 365.965ms
 5: 3ffe:1cff:0:ee::2 asymm 4 534.704ms
 6: 3ffe:3800::1:1 asymm 4 578.126ms !N
Resume: pmtu 1280

IPv6 tcpdump

Linux'da paket yakalamak için kullanılan en önemli araç tcpdump'tır. Aşağıda kullanımıyla ilgili örnekler bulacaksınız. IPv6 desteği 3.6 sürümünden itibaren gömülü olarak gelmektedir.

tcpdump gürültüyü (noise) enngellemek için bazı ifadeler kullanır:

  • icmp6: doğal ICMPv6 trafiğini filtreler
  • ip6: doğal IPv6 trafiğini filtreler (ICMPv6 dahil)
  • proto ipv6: tünellenmiş IPv6-in-IPv4 trafiğini filitreler
  • not port ssh: uzak SSH oturumu için akan SSH paketlerini gizler

Daha çok ICMPv6 paketlerini yakalamakta ve paketler hakkında daha fazla bilgi edinmeyi sağlamakta yararlı olan bazı komut satırı seçenekleri de mevcuttur:

  • -s 512: paket yakalamak için kullanılan kopma (snap) uzunluğunu 512 bayta çıkartır.
  • -vv: oldukça ayrıntılı bilgi verilir.
  • -n: adresleri isme çevirmez, eğer ters DNS çözümlemesi iyi çalışmıyorsa faydalıdır.

Örnek 4.1. 2001:0db8:100:f101::1 adresine yerel bir bağlantı üzerinden IPv6 ping

# tcpdump -t -n -i eth0 -s 512 -vv ip6 or proto ipv6
tcpdump: listening on eth0
2001:0db8:100:f101:2e0:18ff:fe90:9205 > 2001:0db8:100:f101::1: icmp6: echo request (len 64, hlim 64)
2001:0db8:100:f101::1 > 2001:0db8:100:f101:2e0:18ff:fe90:9205: icmp6: echo reply (len 64, hlim 64)

Örnek 4.2. 2001:0db8:100::1 adresine IPv6-in-IPv4 tüneli üzerinden yönlendirilmiş IPv6 ping

1.2.3.4 ve 5.6.7.8 adresleri tünelin iki ucunu göstermektedir (elbette adresler örnektir)

# tcpdump -t -n -i ppp0 -s 512 -vv ip6 or proto ipv6
tcpdump: listening on ppp0
1.2.3.4 > 5.6.7.8: 2002:ffff:f5f8::1 > 2001:0db8:100::1: icmp6: echo request (len 64, hlim 64) (DF) (ttl 64, id 0, len 124)
5.6.7.8 > 1.2.3.4: 2001:0db8:100::1 > 2002:ffff:f5f8::1: icmp6: echo reply (len 64, hlim 61) (ttl 23, id 29887, len 124)
1.2.3.4 > 5.6.7.8: 2002:ffff:f5f8::1 > 2001:0db8:100::1: icmp6: echo request (len 64, hlim 64) (DF) (ttl 64, id 0, len 124)
5.6.7.8 > 1.2.3.4: 2001:0db8:100::1 > 2002:ffff:f5f8::1: icmp6: echo reply (len 64, hlim 61) (ttl 23, id 29919, len 124)