IPv6, IPv4 adreslerinin tükenmesine karşı geliştirilen yeni nesil internet protokolüdür ve bugün mobil operatörlerden büyük bulut ağlarına kadar yaygın biçimde kullanılır. Sunucunuza IPv6 adresi atanmış olabilir, ancak bu adresin işletim sisteminde tanımlı olması, DNS'te AAAA kaydının bulunması, web sunucusunun IPv6'da dinlemesi ve güvenlik duvarının bu trafiği doğru filtrelemesi ayrı ayrı adımlardır.

Bu rehberde Ubuntu 24.04 LTS bir sunucuda IPv6'yı netplan ile yapılandırmayı, bağlantıyı test etmeyi, AAAA kaydı eklemeyi, Nginx'i [::] üzerinde dinletmeyi, UFW'nin IPv6 ayarını ve en sık yapılan hataları anlatıyoruz. Sunucunuza IPv6 verilip verilmediğini ve hangi adres bloğunun, hangi ağ geçidinin kullanılacağını sağlayıcınızın panelinden veya destek ekibinden öğrenmeniz gerekir. Örneklerde RFC 3849 ile dokümantasyona ayrılmış 2001:db8::/32 bloğunu kullanıyoruz.

Başlamadan Önce: Elinizde Hangi Bilgiler Olmalı?

Başlamadan Önce: Elinizde Hangi Bilgiler Olmalı? IPv6 adresi ve önek uzunluğu, Ağ geçidi (gateway), Ağ arayüzü adı, Yapılandırma yöntemi
BilgiÖrnekNereden?
IPv6 adresi ve önek uzunluğu2001:db8:1234::10/64Sağlayıcı paneli veya destek
Ağ geçidi (gateway)2001:db8:1234::1 veya fe80::1Sağlayıcı paneli veya destek
Ağ arayüzü adıeth0, ens3, enp1s0ip -br link komutu
Yapılandırma yöntemiStatik, SLAAC (RA) veya DHCPv6Sağlayıcının belgesi

Bazı ortamlarda IPv6 adresi Router Advertisement (SLAAC) ile otomatik gelir ve ek ayar gerekmez. Önce mevcut durumu kontrol edin:

bash
ip -br link
ip -6 addr show
ip -6 route show

Çıktıda yalnızca fe80:: ile başlayan (link-local) bir adres görüyorsanız sunucunun henüz genel bir IPv6 adresi yoktur. scope global ile işaretli bir adres ve default via ile başlayan bir IPv6 rotası görüyorsanız IPv6 zaten çalışıyor olabilir; doğrudan test bölümüne geçin.

Netplan ile Statik IPv6 Yapılandırması

Ubuntu sunucularda ağ ayarları /etc/netplan/ altındaki YAML dosyalarından okunur. Bulut imajlarında bu dosya çoğunlukla cloud-init tarafından üretilir (örneğin 50-cloud-init.yaml). Önce mevcut dosyayı yedekleyin:

bash
ls -l /etc/netplan/
sudo cp /etc/netplan/50-cloud-init.yaml /root/50-cloud-init.yaml.yedek
sudo netplan get

cloud-init dosyayı geri yazıyorsa

cloud-init ağ yapılandırmasını yönetiyorsa yaptığınız değişiklik bir sonraki açılışta üzerine yazılabilir. cloud-init belgesine göre bunu /etc/cloud/cloud.cfg.d/ altındaki bir dosyada network: {config: disabled} ayarıyla kapatabilirsiniz. Bunu yapmadan önce sağlayıcınızın IPv6'yı cloud-init meta verisi üzerinden vermediğinden emin olun; bazı sağlayıcılar adresi bu yolla iletir.

bash
echo "network: {config: disabled}" | sudo tee /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg

IPv6 adresini ve varsayılan rotayı ekleyin

Aşağıdaki örnekte IPv4 DHCP ile gelmeye devam eder, IPv6 adresi ve ağ geçidi elle tanımlanır. Netplan belgesinde gateway6 anahtarı kullanımdan kaldırılmış (deprecated) olarak işaretlidir; yerine routes altında to: default kullanılır. IPv6 adreslerini YAML'da tırnak içine almak, iki nokta işaretlerinin yanlış yorumlanmasını önler.

yaml
network:
  version: 2
  ethernets:
    eth0:
      dhcp4: true
      addresses:
        - "2001:db8:1234::10/64"
      routes:
        - to: default
          via: "2001:db8:1234::1"
      nameservers:
        addresses:
          - "2001:4860:4860::8888"
          - "2606:4700:4700::1111"

Bazı sağlayıcılar ağ geçidi olarak link-local bir adres (sık görülen örnek fe80::1) verir ya da ağ geçidi sizin alt ağınızın dışında kalır. Bu durumda rotaya on-link: true ekleyin; netplan belgesine göre bu, rotanın doğrudan arayüze bağlı olduğunu belirtir:

yaml
      routes:
        - to: default
          via: "fe80::1"
          on-link: true

Netplan güvenlik belgesi, /etc/netplan altındaki YAML dosyalarının yalnızca root tarafından okunup yazılabilmesini (chmod 600) önerir:

bash
sudo chmod 600 /etc/netplan/*.yaml

Önce netplan try, sonra apply

netplan try, yapılandırmayı uygular ve siz onaylamazsanız belirli bir süre sonra geri alır; varsayılan süre 120 saniyedir. Uzak sunucuda kilitlenmemek için önce bunu kullanın:

bash
sudo netplan generate
sudo netplan try
# Bağlantı kopmadıysa ENTER ile onaylayın

# Kalıcı uygulamak için
sudo netplan apply

IPv6 Bağlantısını Test Etme

IPv6 Bağlantısını Test Etme: Yalnızca fe80:: adres var, Adres var, ping "Network is unreachable", Rota var, paket gitmiyor, Hiçbir arayüzde IPv6 yok
bash
# Adres ve rota
ip -6 addr show dev eth0
ip -6 route show default

# Dışarıya erişim
ping -6 -c 4 2001:4860:4860::8888
curl -6 -I https://www.google.com

# DNS çözümlemesi IPv6 üzerinden
dig AAAA ornek.com.tr +short
BelirtiOlası sebepKontrol
Yalnızca fe80:: adres varAdres atanmamış veya YAML uygulanmamışsudo netplan get, ip -6 addr
Adres var, ping "Network is unreachable"Varsayılan IPv6 rotası yokip -6 route show default
Rota var, paket gitmiyorYanlış ağ geçidi veya on-link eksikSağlayıcının verdiği gateway değeri
Hiçbir arayüzde IPv6 yokÇekirdek seviyesinde IPv6 kapatılmışsysctl net.ipv6.conf.all.disable_ipv6 (1 ise kapalı)
Dışarıdan erişilemiyor, içeriden çalışıyorGüvenlik duvarı veya servis yalnızca IPv4 dinliyorsudo ss -tlnp, sudo ufw status

Daha önce bir rehberi izleyerek /etc/sysctl.conf veya /etc/sysctl.d/ altına disable_ipv6 = 1 satırı eklediyseniz önce bu satırı kaldırın ve sudo sysctl --system ile ayarları yeniden yükleyin.

DNS: AAAA Kaydı Ekleme

IPv4 için A kaydı neyse, IPv6 için AAAA kaydı odur. Alan adınızın DNS panelinde sitenizin adı için sunucunuzun IPv6 adresini gösteren bir AAAA kaydı ekleyin. AAAA kaydını ancak sunucuda IPv6 gerçekten çalışırken ekleyin; aksi halde IPv6 kullanan ziyaretçiler önce bozuk adrese bağlanmaya çalışır.

text
ornek.com.tr.       3600  IN  AAAA  2001:db8:1234::10
www.ornek.com.tr.   3600  IN  AAAA  2001:db8:1234::10
bash
dig AAAA ornek.com.tr +short
curl -6 -I https://ornek.com.tr

Sunucunuz mail de gönderiyorsa IPv6 adresi için de ters DNS (PTR) gerekir; ayrıntılar rDNS / PTR kaydı rehberinde.

Nginx'i IPv6'da Dinletmek

Nginx belgesine göre IPv6 adresleri köşeli parantez içinde yazılır (listen [::]:80;). ipv6only parametresi varsayılan olarak açıktır; yani [::] üzerindeki soket yalnızca IPv6 bağlantılarını kabul eder. Bu yüzden her server bloğunda IPv4 ve IPv6 için iki ayrı listen satırı gerekir:

nginx
server {
    listen 80;
    listen [::]:80;
    server_name ornek.com.tr www.ornek.com.tr;
    # ...
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name ornek.com.tr www.ornek.com.tr;
    # ssl_certificate ve diğer ayarlar
}
bash
sudo nginx -t && sudo systemctl reload nginx
sudo ss -tlnp | grep nginx
# Hem 0.0.0.0:80 hem [::]:80 görmelisiniz

default_server parametresi adres:port çiftine göre çalışır; varsayılan sunucu bloğunda bunu IPv6 satırına da ayrıca yazmanız gerekir (listen [::]:80 default_server;). Server block yapısı için Nginx server block rehberine bakın.

UFW ve IPv6

UFW ve IPv6: IPV6=no ise UFW, IPv6 trafiğini yalnızca loopback arayüzünde kabul eder; değeri..., Belirli bir IPv4 adresine izin veren kural (ufw allow from 198.51.100.5 to any...

Ubuntu'nun ufw kılavuz sayfasına göre IPv6 varsayılan olarak etkindir. /etc/default/ufw içinde IPV6=yes olduğunda ufw allow 22 gibi kurallar hem IPv4 hem IPv6 için uygulanır ve ufw status çıktısında (v6) ekiyle görünür.

bash
grep IPV6 /etc/default/ufw
sudo ufw status verbose
  • IPV6=no ise UFW, IPv6 trafiğini yalnızca loopback arayüzünde kabul eder; değeri yes yapıp sudo ufw reload çalıştırın.
  • Belirli bir IPv4 adresine izin veren kural (ufw allow from 198.51.100.5 to any port 22) IPv6 trafiğini kapsamaz; IPv6 kaynak için ayrı kural yazın.
  • IPv6'da komşu keşfi (neighbor discovery) ve router advertisement ICMPv6 ile çalışır; elle yazdığınız kurallarla ICMPv6'yı topluca engellemeyin, aksi halde bağlantı kopabilir.

UFW temelleri için UFW güvenlik duvarı rehberine bakın.

Sık Yapılan Hatalar

  • Servisi yalnızca IPv4'e bağlamak: Uygulama 0.0.0.0 üzerinde dinliyorsa IPv6'dan erişilmez. Bu çoğu zaman istenen bir durumdur (örneğin yalnızca Nginx dışarı açık olmalıdır), ama dışarıya açmak istediğiniz servisi ss -tlnp ile kontrol edin.
  • IPv6'yı açınca korumasız kalan servisler: IPv4 tarafında güvenlik duvarıyla kapattığınız bir portun IPv6 tarafında açık kalmadığından emin olun. IPv6 adresleri de taranır.
  • Docker container'ları: Docker belgesine göre IPv6, ağ oluşturulurken (docker network create --ipv6 veya Compose'da enable_ipv6: true) ayrıca etkinleştirilir. Container'a dışarıdan IPv6 ile erişim gerekmiyorsa Nginx'i ön tarafta IPv6 dinletmek çoğu zaman yeterlidir.
  • Mail sunucusu IPv6 ile çıkıyor: IPv6 açıldıktan sonra Postfix gibi mail yazılımları IPv6 ile göndermeye başlayabilir. IPv6 adresinin PTR'ı yoksa Gmail ret verebilir. Ya PTR tanımlatın ya da mail yazılımını IPv4'e sınırlayın.
  • YAML girinti hatası: Netplan girintiye duyarlıdır ve sekme karakteri kabul etmez. sudo netplan generate hatayı satır numarasıyla gösterir.
  • Erişim hatasını DNS sanmak: Bazı ziyaretçiler bağlanamıyor, bazıları bağlanıyorsa AAAA kaydını ve IPv6 dinlemesini kontrol edin. Genel bağlantı hataları için connection refused / timed out rehberine bakın.

Sık Sorulan Sorular

Sunucumda IPv6 olup olmadığını nasıl anlarım?

ip -6 addr show çıktısında scope global bir adres ve ip -6 route show default çıktısında bir varsayılan rota görmelisiniz. İkisi de yoksa sağlayıcınızdan sunucunuza IPv6 adresi atanıp atanmadığını ve ağ geçidi bilgisini öğrenin.

gateway6 artık çalışmıyor mu?

Netplan belgesinde gateway4 ve gateway6 kullanımdan kaldırılmış olarak işaretlidir. Yeni yapılandırmalarda routes altında to: default ve via kullanın.

AAAA kaydı eklemek zorunlu mu?

Hayır. AAAA kaydı yoksa siteniz IPv4 üzerinden çalışmaya devam eder. Ancak AAAA kaydı ekleyecekseniz sunucuda IPv6'nın, Nginx dinlemesinin ve güvenlik duvarı kurallarının hazır olması gerekir.

IPv6'yı tamamen kapatmak daha mı güvenli?

Kullanmadığınız bir protokolü kapatmak saldırı yüzeyini azaltabilir, ama doğru yapılandırılmış UFW kuralları IPv6'yı da IPv4 kadar korur. Kapatmayı seçerseniz AAAA kaydı bırakmadığınızdan ve servislerin buna hazır olduğundan emin olun. Genel sertleştirme için VPS güvenlik sertleştirme yazısına bakın.

Yazılım ve hizmet adları sahiplerine aittir. Bu yazı bağımsız bir teknik rehberdir; adı geçen projeler veya şirketlerle ortaklık ilişkisi bulunduğu anlamına gelmez.

İlgili içerikler: rDNS / PTR kaydı nedir? · Load average nedir? · Inode doldu hatası · Logrotate rehberi · UFW güvenlik duvarı · Nginx server block · Let's Encrypt SSL kurulumu · VPS güvenlik sertleştirme · Connection refused / timed out