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ı?

| Bilgi | Örnek | Nereden? |
|---|---|---|
| IPv6 adresi ve önek uzunluğu | 2001:db8:1234::10/64 | Sağlayıcı paneli veya destek |
| Ağ geçidi (gateway) | 2001:db8:1234::1 veya fe80::1 | Sağlayıcı paneli veya destek |
| Ağ arayüzü adı | eth0, ens3, enp1s0 | ip -br link komutu |
| Yapılandırma yöntemi | Statik, SLAAC (RA) veya DHCPv6 | Sağlayıcının belgesi |
Bazı ortamlarda IPv6 adresi Router Advertisement (SLAAC) ile otomatik gelir ve ek ayar gerekmez. Önce mevcut durumu kontrol edin:
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:
ls -l /etc/netplan/
sudo cp /etc/netplan/50-cloud-init.yaml /root/50-cloud-init.yaml.yedek
sudo netplan getcloud-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.
echo "network: {config: disabled}" | sudo tee /etc/cloud/cloud.cfg.d/99-disable-network-config.cfgIPv6 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.
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:
routes:
- to: default
via: "fe80::1"
on-link: trueNetplan güvenlik belgesi, /etc/netplan altındaki YAML dosyalarının yalnızca root tarafından okunup yazılabilmesini (chmod 600) önerir:
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:
sudo netplan generate
sudo netplan try
# Bağlantı kopmadıysa ENTER ile onaylayın
# Kalıcı uygulamak için
sudo netplan applyIPv6 Bağlantısını Test Etme

# 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| Belirti | Olası sebep | Kontrol |
|---|---|---|
| Yalnızca fe80:: adres var | Adres atanmamış veya YAML uygulanmamış | sudo netplan get, ip -6 addr |
| Adres var, ping "Network is unreachable" | Varsayılan IPv6 rotası yok | ip -6 route show default |
| Rota var, paket gitmiyor | Yanlış ağ geçidi veya on-link eksik | Sağ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ışıyor | Güvenlik duvarı veya servis yalnızca IPv4 dinliyor | sudo 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.
ornek.com.tr. 3600 IN AAAA 2001:db8:1234::10
www.ornek.com.tr. 3600 IN AAAA 2001:db8:1234::10dig AAAA ornek.com.tr +short
curl -6 -I https://ornek.com.trSunucunuz 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:
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
}sudo nginx -t && sudo systemctl reload nginx
sudo ss -tlnp | grep nginx
# Hem 0.0.0.0:80 hem [::]:80 görmelisinizdefault_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

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.
grep IPV6 /etc/default/ufw
sudo ufw status verboseIPV6=noise UFW, IPv6 trafiğini yalnızca loopback arayüzünde kabul eder; değeriyesyapıpsudo 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 servisiss -tlnpile 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 --ipv6veya Compose'daenable_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 generatehatayı 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