IPv6 Bağlantı Sorunlarını Giderme: Adım Adım Rehber
IPv6’ya geçiş artık “ileride yaparız” olmaktan çıktı. Veri merkezleri, bulut sağlayıcılar ve ISP’lerin büyük kısmı çift yığın (dual-stack) mimariye geçmiş durumda. Ama IPv6 bağlantı sorunları, IPv4’ten çok daha sinir bozucu olabiliyor çünkü çoğu sysadmin hala IPv4 kafasıyla düşünüyor. Bu yazıda IPv6 bağlantı sorunlarını sistematik bir şekilde nasıl gidereceğinizi, gerçek dünya senaryolarıyla birlikte anlatacağım.
IPv6’da Sorun Gidermenin Temel Felsefesi
IPv4’te bir şeyler çalışmıyorsa genellikle IP adresi yok, gateway yanlış veya DNS bozuk gibi basit senaryolar aklınıza gelir. IPv6’da ise işin içine link-local adresler, SLAAC, DHCPv6, NDP (Neighbor Discovery Protocol) ve prefix delegation gibi kavramlar giriyor. Bunların her biri ayrı bir hata kaynağı olabiliyor.
Önce şunu netleştirelim: IPv6 bağlantı sorunları genellikle şu kategorilere düşer.
- Adres yapılandırma sorunları (SLAAC veya DHCPv6 çalışmıyor)
- NDP sorunları (ARP’ın IPv6 karşılığı)
- Routing sorunları (default route yok veya yanlış)
- Firewall/ip6tables kuralları bloklama yapıyor
- MTU sorunları (IPv6’da fragmentasyon farklı çalışır)
- DNS sorunları (AAAA kaydı çözümlenemiyor)
- Çift yığın öncelik sorunları (Happy Eyeballs mekanizması)
Temel Durum Tespiti
Her şeyden önce mevcut durumu anlamamız gerekiyor. İlk çalıştıracağınız komutlar bunlar olmalı.
# Mevcut IPv6 adreslerini listele
ip -6 addr show
# Tüm arayüzlerdeki IPv6 durumu
ip -6 addr show scope global
ip -6 addr show scope link
# IPv6 routing tablosunu gör
ip -6 route show
# Default IPv6 route var mı?
ip -6 route show default
Bu çıktıda dikkat etmeniz gereken birkaç şey var. scope link adresler sadece yerel ağda geçerli link-local adreslerdir ve her zaman fe80:: ile başlar. Bunların olması normal. Asıl mesele scope global adreslerinin olup olmadığı. Eğer sadece fe80:: adresleri görüyorsanız, global adres dağıtımında bir sorun var demektir.
Bağlantı Tipi Kontrolü
# NDP (Neighbor Discovery) önbellekini kontrol et - ARP tablosunun IPv6 karşılığı
ip -6 neigh show
# Router Advertisement alındı mı kontrol et
rdisc6 eth0
# IPv6 istatistikleri
ip -6 -s link show eth0
rdisc6 çıktısında bir router advertisement (RA) paketi görüyorsanız, router’ınız IPv6 prefix’i duyuruyor demektir. Hiçbir şey görmüyorsanız sorun router tarafında veya RA paketlerinin bloklandığı yerdedir.
SLAAC Sorunlarını Giderme
SLAAC (Stateless Address Autoconfiguration), IPv6’nın en güzel özelliklerinden biri. Router, ağa bir prefix duyuruyor ve cihazlar kendi adreslerini otomatik oluşturuyor. Ama bu mekanizma bozulduğunda can sıkıcı olabiliyor.
Senaryo: Sunucu Yeniden Başladıktan Sonra IPv6 Adresi Almıyor
Bu durumla çok sık karşılaşılıyor. Özellikle containerlar veya VM’ler söz konusu olduğunda.
# Kernel'in IPv6 için RA kabul edip etmediğini kontrol et
sysctl net.ipv6.conf.eth0.accept_ra
sysctl net.ipv6.conf.all.accept_ra
# Forwarding açıksa RA kabul etmez (router gibi davranır)
sysctl net.ipv6.conf.all.forwarding
# Forwarding açık ama RA da lazımsa bu değeri 2 yap
sysctl -w net.ipv6.conf.eth0.accept_ra=2
Kritik nokta: Eğer net.ipv6.conf.all.forwarding=1 ayarlanmışsa (yani sunucu routing yapıyorsa), sistem varsayılan olarak RA paketlerini reddeder. Bu Docker veya Kubernetes kullanan sistemlerde çok yaygın bir sorun. Çözüm accept_ra=2 yapmak, ama bunu kalıcı hale getirmeyi unutmayın.
# /etc/sysctl.d/99-ipv6.conf dosyasına ekle
echo "net.ipv6.conf.eth0.accept_ra = 2" >> /etc/sysctl.d/99-ipv6.conf
sysctl --system
DHCPv6 Sorunları
Bazı ağlar SLAAC yerine DHCPv6 kullanıyor. DHCPv6’da sorun varsa şunlara bakın.
# DHCPv6 client loglarını kontrol et
journalctl -u dhcpcd -n 50
journalctl -u NetworkManager -n 50 | grep -i ipv6
# Manuel DHCPv6 isteği gönder (debug modunda)
dhclient -6 -v eth0
# systemd-networkd kullanıyorsanız
networkctl status eth0
NDP (Neighbor Discovery Protocol) Sorunları
NDP, IPv4’teki ARP’ın yerini tutuyor. IPv6’da iki cihazın aynı ağda birbirini bulabilmesi için NDP çalışmak zorunda.
Senaryo: Aynı Ağdaki IPv6 Hostlarına Ulaşılamıyor
# NDP önbelleğini kontrol et - hedef adres var mı?
ip -6 neigh show
# NDP önbelleğini temizle ve tekrar dene
ip -6 neigh flush dev eth0
# Manuel NDP isteği gönder
ndisc6 2001:db8::1 eth0
# Wireshark/tcpdump ile NDP trafiğini izle
tcpdump -i eth0 -n "icmp6 and (ip6[40] == 135 or ip6[40] == 136)"
Komutta ip6[40] == 135 Neighbor Solicitation, ip6[40] == 136 Neighbor Advertisement paketlerini filtreler. Eğer solicitation gönderiliyor ama advertisement gelmiyorsa, karşı tarafta bir sorun var demektir.
Senaryo: IPv6 ile Ping Çalışıyor Ama Uygulama Bağlantısı Yok
Bu genellikle MTU sorunudur. IPv6’da minimum MTU 1280 byte ve fragment yapmak router’ın değil host’un işi.
# Path MTU Discovery testi
tracepath6 2001:4860:4860::8888
# MTU sorununu test et
ping6 -M do -s 1452 2001:4860:4860::8888
# Arayüzün MTU değerini kontrol et
ip link show eth0
# MTU'yu zorla düşür (test amaçlı)
ip link set eth0 mtu 1280
tracepath6 çıktısında “pmtu 1500” gibi değerler görürsünüz. Eğer bu değer düşükse veya “!F” (fragmentation needed) işareti çıkıyorsa MTU sorunuyla karşı karşıyasınız demektir.
Firewall Sorunları
IPv6 bağlantı sorunlarının büyük bir kısmı aslında firewall kaynaklı. Sistem yöneticileri IPv4 için ip6tables kurallarını ayrıca yazmayı unutuyor.
# ip6tables kurallarını listele
ip6tables -L -n -v --line-numbers
# Tüm zincirler dahil kontrol et
ip6tables -L -n -v -t filter
ip6tables -L -n -v -t mangle
# NFTables kullanıyorsanız
nft list ruleset | grep -A5 "ip6"
Senaryo: IPv4 Çalışıyor Ama IPv6 Belirli Portlara Ulaşamıyor
# ICMPv6'nın tümüyle bloklanıp bloklanmadığını kontrol et
ip6tables -L INPUT -n -v | grep icmpv6
# ICMPv6'yı açmak için kritik kurallar
ip6tables -A INPUT -p icmpv6 --icmpv6-type echo-request -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbor-solicitation -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbor-advertisement -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type router-advertisement -j ACCEPT
# Established bağlantılara izin ver
ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Önemli uyarı: IPv6’da ICMPv6’yı tamamen bloklamak ciddi sorunlara yol açar. NDP, Router Discovery ve Path MTU Discovery hepsi ICMPv6 üzerinden çalışır. IPv4’te ICMP’yi bloklamak kötü bir pratik, IPv6’da ICMPv6’yı bloklamak ise felaket.
UFW ile IPv6 Firewall Kontrolü
Ubuntu/Debian sistemlerde UFW kullanıyorsanız:
# UFW'nun IPv6 durumunu kontrol et
grep IPV6 /etc/default/ufw
# IPv6=yes olduğundan emin ol, sonra
ufw status verbose
# UFW'yu yeniden yükle
ufw disable && ufw enable
/etc/default/ufw dosyasında IPV6=yes yazıyorsa UFW otomatik olarak hem IPv4 hem IPv6 kuralı oluşturur. Eğer bu satır yoksa veya no ise IPv6 trafiği yönetilmez.
DNS ve AAAA Kaydı Sorunları
Bağlantı katmanında her şey yolunda ama hala IPv6 ile bağlanamıyorsanız, DNS’e bakma vakti gelmiş demektir.
# IPv6 ile DNS sorgula
dig AAAA google.com
dig AAAA google.com @2001:4860:4860::8888
# Sistemin hangi DNS sunucusunu kullandığına bak
resolvectl status
cat /etc/resolv.conf
# IPv6 DNS sunucusuna ulaşabilir misin?
ping6 2001:4860:4860::8888
# nslookup ile hızlı test
nslookup -type=AAAA google.com
Senaryo: AAAA Kaydı Var Ama Bağlantı Kurulamıyor
Bu durumda Happy Eyeballs algoritması devreye giriyor. Tarayıcılar ve modern uygulamalar IPv6 üzerinden bağlanamadıklarında hızlıca IPv4’e düşer. Ama bu geçiş bazen 20-30 saniye gecikmeye yol açabilir.
# curl ile IPv6 kullanımını zorla
curl -6 -v https://google.com
# Sadece IPv4 ile test et
curl -4 -v https://google.com
# IPv6 reachability testi
curl -6 --max-time 10 https://ipv6.google.com
# nc ile port testi
nc -6 -zv google.com 443
curl -6 -v çıktısında Connected to google.com (2a00:1450:...) gibi bir satır görüyorsanız IPv6 bağlantısı çalışıyor demektir.
Gelişmiş Teşhis: tcpdump ve Wireshark
Yukarıdaki adımlar sorunu çözmediyse, paket seviyesinde inceleme zamanı.
# Tüm IPv6 trafiğini yakala
tcpdump -i eth0 -n ip6
# Belirli bir host ile trafiği izle
tcpdump -i eth0 -n ip6 and host 2001:db8::1
# ICMPv6 router advertisement ve solicitation
tcpdump -i eth0 -n "icmp6"
# DHCPv6 trafiğini izle (UDP 546 ve 547)
tcpdump -i eth0 -n "udp and (port 546 or port 547)"
# Belirli prefix'ten gelen trafiği filtrele
tcpdump -i eth0 -n "ip6 and src net 2001:db8::/32"
Bir Router Solicitation paketi gönderiyor ama Router Advertisement almıyorsanız, router’da bir sorun var veya RA paketleri bir yerde bloklanıyor. Bu özellikle cloud ortamlarında (AWS, Azure, GCP) sık görülür. Bazı cloud providerlar RA paketlerini güvenlik nedeniyle filtreleyebilir.
Cloud Ortamlarında IPv6
Cloud ortamlarında IPv6 sorunları biraz farklı bir boyut kazanıyor.
AWS’de IPv6 Sorun Giderme
AWS’de IPv6 için subnet ve VPC bazında ayrıca etkinleştirme gerekiyor. Sık karşılaşılan sorun şu: IPv6 adresi atanmış ama internet gateway’de IPv6 routing eksik.
# AWS Linux 2 / AL2023'te IPv6 yapılandırması
cat /etc/sysconfig/network-scripts/ifcfg-eth0 | grep -i ipv6
# Hangi adreslerin atandığına bak
curl -s http://169.254.169.254/latest/meta-data/network/interfaces/macs/$(cat /sys/class/net/eth0/address)/ipv6s
# IPv6 routing tablosunu kontrol et
ip -6 route show
# Default route ekle (manuel gerekirse)
ip -6 route add default via fe80::router-link-local-addr dev eth0
Docker ve IPv6
Docker, varsayılan olarak IPv6’yı devre dışı bırakır. Bu Docker içindeki uygulamaların IPv6 ile bağlanamamasına yol açar.
# Docker daemon IPv6 desteğini kontrol et
cat /etc/docker/daemon.json
# IPv6 etkinleştirme için daemon.json örneği
cat > /etc/docker/daemon.json << 'EOF'
{
"ipv6": true,
"fixed-cidr-v6": "fd00::/80"
}
EOF
# Docker'ı yeniden başlat
systemctl restart docker
# Container içinde IPv6 test et
docker run --rm alpine ping6 -c4 ipv6.google.com
Çift Yığın (Dual-Stack) Öncelik Sorunları
Bazı durumlarda sistem hem IPv4 hem IPv6 adresine sahip ama hep IPv4’ü tercih ediyor ya da tam tersi oluyor. Bu /etc/gai.conf ile kontrol edilir.
# Mevcut adres seçim politikasını gör
cat /etc/gai.conf
# Hangi adresi tercih ettiğini test et
getent ahosts google.com
# IPv6'yı öncelikli yapmak için gai.conf düzenle
# Şu satırı uncomment yap veya ekle:
# precedence ::ffff:0:0/96 100
# Bu satırı comment yap:
# label 2002::/16 2
Gerçek dünya senaryosu: Bir web sunucusu hem A hem AAAA kaydına sahip ama bazı kullanıcılar IPv6 üzerinden bağlanırken zaman aşımı yaşıyor. Sorun genellikle sunucu tarafında IPv6’nın aktif olması ama firewall’da ilgili portların açılmamasından kaynaklanıyor.
# Web sunucusunun IPv6'yı dinleyip dinlemediğini kontrol et
ss -tlnp6 | grep :443
netstat -tlnp6 | grep :443
# nginx veya apache IPv6 listener kontrolü
grep -r "listen.*[::]" /etc/nginx/
grep -r "Listen.*:" /etc/apache2/
Sistem Genelinde IPv6 Durumu Raporu
Hızlı bir sağlık kontrolü için şu scripti kullanabilirsiniz.
#!/bin/bash
echo "=== IPv6 Durum Raporu ==="
echo ""
echo "--- Global Adresler ---"
ip -6 addr show scope global
echo ""
echo "--- Default Route ---"
ip -6 route show default
echo ""
echo "--- NDP Önbelleği ---"
ip -6 neigh show
echo ""
echo "--- Bağlantı Testi ---"
ping6 -c2 -W2 2001:4860:4860::8888 > /dev/null 2>&1 &&
echo "Google DNS IPv6: ULASILABILIR" ||
echo "Google DNS IPv6: ULASILAMIYOR"
echo ""
echo "--- DNS AAAA Testi ---"
dig +short AAAA google.com @2001:4860:4860::8888
echo ""
echo "--- ip6tables Kural Sayisi ---"
ip6tables -L | grep -c "^"
Sık Karşılaşılan Hata Mesajları ve Çözümleri
“Network is unreachable”: IPv6 default route yok.
ip -6 route add default via <gateway-adresi> dev eth0
“No route to host”: NDP çözümlemesi başarısız veya firewall bloğu var. ip -6 neigh show ile NDP önbelleğine, ip6tables -L ile firewall kurallarına bakın.
“connect: Connection refused”: Servis IPv6’yı dinlemiyor. ss -tlnp6 ile kontrol edin.
“Temporary failure in name resolution”: DNS sunucusuna IPv6 üzerinden ulaşılamıyor olabilir. /etc/resolv.conf içindeki nameserver adreslerini ve onlara bağlantıyı test edin.
“ping6: sendmsg: Operation not permitted”: ip6tables bloğu. ip6tables -L OUTPUT ve ip6tables -L INPUT kontrolü yapın.
Kalıcı Yapılandırma Notları
Sorunları tespit edip geçici çözümler uyguladıktan sonra bunları kalıcı hale getirmeyi unutmayın.
- sysctl değerleri için
/etc/sysctl.d/altına dosya ekleyin - ip6tables kuralları için
ip6tables-save > /etc/ip6tables.rulesve boot scriptine yükleme komutu ekleyin - NetworkManager kullanan sistemlerde değişiklikleri
nmcliveyanmtuiile yapın, doğrudan dosya düzenlemeyin - systemd-networkd için
/etc/systemd/network/altındaki.networkdosyalarını düzenleyin - Cloud ortamlarında yapılan değişiklikler instance yeniden başladığında silinebilir,
cloud-initve user-data scriptlerini güncellemeyi ihmal etmeyin
Sonuç
IPv6 sorun giderme, IPv4’e göre daha fazla katmanı olan bir süreç. SLAAC, NDP, ICMPv6 ve DHCPv6’nın birbirleriyle nasıl etkileştiğini anlamak, sorunları çok daha hızlı çözmenizi sağlıyor. En sık yapılan hatalar şunlar: ICMPv6’yı tamamen bloklamak, IPv6 forwarding açıkken RA kabulünü unutmak ve ip6tables kurallarını IPv4 kurallarıyla senkronize tutmamak.
Sistematik yaklaşımı unutmayın: önce adres var mı, sonra route var mı, sonra firewall bloğu var mı, sonra DNS çalışıyor mu sırası genellikle sorunun kaynağını hızlıca ortaya çıkarır. ip -6 addr, ip -6 route, ip6tables -L ve tcpdump icmp6 dörtlüsü IPv6 sorun gidermenin temel araçları. Geri kalan her şey bu temelin üzerine inşa ediliyor.
