Ubuntu DNS Değiştirme
Ubuntu’da DNS ayarlarını değiştirmek için internette bulacağınız rehberlerin büyük kısmı hâlâ /etc/resolv.conf dosyasını düzenlemeyi öneriyor. Bu yöntem yıllar önce doğruydu, ancak güncel Ubuntu sürümlerinde yapılan değişiklik kısa süre içinde kendiliğinden siliniyor. Bunun nedeni, Ubuntu’nun DNS yönetimini artık farklı bir sistem üzerinden yapması.
Bu rehberde Ubuntu’da DNS’in bugün nasıl yönetildiğini, masaüstü ve sunucu sürümlerinde DNS değiştirmenin doğru yollarını, sistem genelinde şifreli DNS kurulumunu ve karşılaşabileceğiniz sorunların çözümlerini adım adım anlatıyoruz. Anlatım Ubuntu 22.04 ve 24.04 LTS gibi güncel sürümler esas alınarak hazırlanmıştır.
Ubuntu’da DNS Nasıl Yönetiliyor?
Güncel Ubuntu sürümlerinde DNS işlemleri üç bileşenin birlikte çalışmasıyla yürür:
- systemd-resolved: Sistemin DNS çözümleyicisidir. Tüm DNS sorgularını karşılar, önbelleğe alır ve uygun DNS sunucusuna iletir.
- NetworkManager: Masaüstü sürümlerinde ağ bağlantılarını yönetir ve her bağlantının DNS ayarlarını systemd-resolved’a bildirir.
- Netplan: Özellikle sunucu sürümlerinde ağ yapılandırmasını YAML dosyalarıyla tanımlamaya yarar.
Neden resolv.conf Düzenlenmemeli?
Güncel Ubuntu’da /etc/resolv.conf dosyasına baktığınızda genellikle tek bir satır görürsünüz:
nameserver 127.0.0.53
Bu adres, bilgisayarınızın kendi içinde çalışan systemd-resolved hizmetine aittir. Yani uygulamalar DNS sorgularını önce bu yerel hizmete gönderir, o da sorguları gerçek DNS sunucularına iletir. resolv.conf dosyası da aslında systemd-resolved tarafından otomatik oluşturulan bir bağlantıdır. Bu dosyayı elle düzenlerseniz, değişiklikleriniz ağ bağlantısı yenilendiğinde veya bilgisayar yeniden başladığında üzerine yazılır.
Kalıcı bir değişiklik için aşağıdaki yöntemlerden birini kullanmanız gerekir.
Hangi DNS’i Seçmelisiniz?
| Hizmet | Birincil | İkincil | DNS over TLS ana makine adı |
|---|---|---|---|
| Cloudflare | 1.1.1.1 | 1.0.0.1 | cloudflare-dns.com |
| 8.8.8.8 | 8.8.4.4 | dns.google | |
| Quad9 | 9.9.9.9 | 149.112.112.112 | dns.quad9.net |
Diğer seçenekler için DNS adresleri sayfamıza göz atabilirsiniz.
Yöntem 1: Ubuntu Masaüstü Ayarları (Grafik Arayüz)
Terminal kullanmadan DNS değiştirmenin en kolay yoludur.
- Ekranın sağ üst köşesindeki sistem menüsüne tıklayın ve Ayarlar‘ı açın.
- Sol menüden Ağ (kablolu bağlantı için) veya Wi-Fi bölümüne girin.
- Kullandığınız bağlantının yanındaki dişli simgesine tıklayın. Wi-Fi’da bu simge bağlı olduğunuz ağın yanında yer alır.
- Açılan pencerede IPv4 sekmesine geçin.
- DNS bölümündeki Otomatik anahtarını kapatın.
- DNS alanına adresleri virgülle ayırarak yazın:
1.1.1.1, 1.0.0.1 - Bağlantınız IPv6 destekliyorsa IPv6 sekmesinde de aynı işlemi IPv6 adresleriyle yapın.
- Sağ üstteki Uygula‘ya tıklayın.
Değişikliğin hemen geçerli olması için bağlantıyı kapatıp yeniden açın: Ağ ayarlarında bağlantının anahtarını kapatıp tekrar açmanız yeterlidir.
Otomatik anahtarını kapatmak önemlidir. Kapatmazsanız Ubuntu, sizin yazdığınız adreslerin yanında modemden gelen DNS adreslerini de kullanmaya devam eder.
Yöntem 2: Terminal ile NetworkManager (nmcli)
Uzaktan bağlandığınız bir masaüstü sistemde veya komut satırını tercih ediyorsanız nmcli aracını kullanabilirsiniz. Terminali Ctrl + Alt + T kısayoluyla açın.
Önce bağlantılarınızın adını öğrenin:
nmcli connection show
“NAME” sütunundaki bağlantı adını not edin. Kablolu bağlantılar genellikle “Wired connection 1” veya “Kablolu bağlantı 1”, Wi-Fi bağlantıları ise ağın adıyla görünür.
DNS adreslerini ayarlayın ve otomatik DNS’i devre dışı bırakın:
sudo nmcli connection modify "Kablolu bağlantı 1" ipv4.dns "1.1.1.1 1.0.0.1" ipv4.ignore-auto-dns yes
Değişikliği uygulamak için bağlantıyı yeniden başlatın:
sudo nmcli connection up "Kablolu bağlantı 1"
IPv6 için aynı işlemi ipv6.dns ve ipv6.ignore-auto-dns parametreleriyle yapabilirsiniz.
Otomatik DNS’e geri dönmek için:
sudo nmcli connection modify "Kablolu bağlantı 1" ipv4.dns "" ipv4.ignore-auto-dns no
sudo nmcli connection up "Kablolu bağlantı 1"
Yöntem 3: systemd-resolved ile Sistem Genelinde DNS ve Şifreleme
Bu yöntem, bağlantıdan bağımsız olarak sistem genelinde DNS belirlemenizi sağlar ve en önemli avantajı, DNS over TLS ile şifreli DNS’i doğrudan açabilmenizdir.
Yapılandırma dosyasını açın:
sudo nano /etc/systemd/resolved.conf
[Resolve] bölümünün altındaki ilgili satırların başındaki # işaretini kaldırıp şu şekilde düzenleyin:
[Resolve]
DNS=1.1.1.1#cloudflare-dns.com 1.0.0.1#cloudflare-dns.com
FallbackDNS=
Domains=~.
DNSOverTLS=yes
Bu satırların anlamı şöyledir:
- DNS: Kullanılacak sunucular.
#işaretinden sonraki ad, şifreli bağlantıda sunucunun kimliğinin doğrulanması için kullanılır. - FallbackDNS: Boş bırakıldığında, sunucularınıza ulaşılamazsa Ubuntu’nun varsayılan yedek sunuculara geçmesi engellenir.
- Domains=~. Tüm DNS sorgularının öncelikle bu genel ayar üzerinden çözülmesini sağlar. Bu satır olmadan systemd-resolved, bağlantıdan gelen DNS sunucularını da kullanmaya devam edebilir.
- DNSOverTLS=yes: Sorguların şifreli gönderilmesini zorunlu kılar. Şifreli bağlantı kurulamadığında şifresiz sorguya geçilmesini isterseniz
opportunisticdeğerini kullanabilirsiniz.
Dosyayı kaydedip (nano’da Ctrl + O, ardından Ctrl + X) hizmeti yeniden başlatın:
sudo systemctl restart systemd-resolved
Yöntem 4: Ubuntu Server’da Netplan
Ubuntu Server’da ağ ayarları genellikle /etc/netplan/ klasöründeki YAML dosyalarıyla yönetilir. Dosya adı kurulumdan kuruluma değişebilir (örneğin 50-cloud-init.yaml veya 01-netcfg.yaml).
Klasördeki dosyaları görmek için:
ls /etc/netplan/
Dosyayı açın:
sudo nano /etc/netplan/50-cloud-init.yaml
İlgili ağ arayüzünün altına nameservers bölümünü ekleyin veya düzenleyin:
network:
version: 2
ethernets:
eth0:
dhcp4: true
dhcp4-overrides:
use-dns: false
nameservers:
addresses: [1.1.1.1, 1.0.0.1]
use-dns: false satırı, DHCP’den gelen DNS adreslerinin sizin belirlediğiniz adreslere eklenmesini engeller. Arayüz adınız eth0 yerine ens3, enp0s3 gibi farklı olabilir; ip a komutuyla kontrol edebilirsiniz.
YAML dosyalarında girinti hayati önem taşır; sekme yerine boşluk kullanın. Değişikliği uygulamadan önce test etmek için:
sudo netplan try
Bu komut ayarları geçici olarak uygular ve 120 saniye içinde onaylamazsanız eski ayarlara döner. Uzaktan bağlandığınız bir sunucuda bağlantınızı kaybetme riskine karşı bu komutu kullanmanız önemlidir. Her şey yolundaysa Enter’a basarak onaylayın ya da doğrudan uygulayın:
sudo netplan apply
Bulut sağlayıcılarında çalışan sunucularda 50-cloud-init.yaml dosyası yeniden başlatmada cloud-init tarafından yeniden oluşturulabilir. Bu durumda ayarlarınızı ayrı bir Netplan dosyasına yazmanız veya cloud-init’in ağ yapılandırmasını devre dışı bırakmanız gerekir.
Değişikliği Doğrulama
Hangi yöntemi kullanırsanız kullanın, sonucu şu komutla kontrol edebilirsiniz:
resolvectl status
Çıktıda Global bölümünde ve kullandığınız bağlantının bölümünde DNS Servers satırlarında yeni adresleri görmelisiniz. DNS over TLS açtıysanız Protocols satırında +DNSOverTLS ifadesi yer alır.
Belirli bir alan adının hangi sunucu üzerinden çözüldüğünü görmek için:
resolvectl query ip-adres.com
DNS önbelleğini temizlemek için:
resolvectl flush-caches
Eski sürümlerde bu komut sudo systemd-resolve --flush-caches şeklindedir. Diğer işletim sistemleri için önbellek temizleme adımlarını [DNS önbelleği temizleme] sayfamızda bulabilirsiniz.
Sık Karşılaşılan Sorunlar
resolv.conf’a yazdığım DNS siliniyor: Bu beklenen bir davranıştır. Dosya systemd-resolved tarafından yönetilir. Yukarıdaki yöntemlerden birini kullanın.
DNS değiştirdim ama modemin DNS’i de kullanılıyor: Masaüstünde Otomatik anahtarını kapattığınızdan, nmcli’de ignore-auto-dns yes, Netplan’da use-dns: false ayarını yaptığınızdan emin olun.
DNS over TLS açınca internet çalışmıyor: Bazı ağlar, şifreli DNS’in kullandığı 853 numaralı portu engelleyebilir. DNSOverTLS=opportunistic değerini deneyin.
Netplan apply hata veriyor: Hata mesajı genellikle YAML girinti hatasını gösterir. Satırların hizasını ve sekme yerine boşluk kullandığınızı kontrol edin.
VPN açıkken DNS değişiyor: VPN bağlantıları kendi DNS sunucularını systemd-resolved’a bildirir. Bu genellikle istenen bir davranıştır; resolvectl status çıktısında VPN arayüzünün DNS ayarlarını görebilirsiniz.
Engelli siteler hâlâ açılmıyor: Günümüzde erişim engelleri büyük ölçüde DNS değil, bağlantı ve IP düzeyinde uygulandığı için DNS değiştirmek bu tür engellerde sonuç vermez.
Sık Sorulan Sorular
Hangi yöntemi kullanmalıyım?
Masaüstü kullanıcıları için grafik arayüz veya nmcli, şifreli DNS isteyenler için systemd-resolved, sunucular için Netplan en uygun yöntemdir.
Bu adımlar diğer Linux dağıtımlarında da geçerli mi?
Linux Mint, Pop!_OS ve Debian tabanlı birçok dağıtımda NetworkManager ve systemd-resolved benzer şekilde çalışır. Ancak bazı dağıtımlar systemd-resolved kullanmaz; bu durumda dağıtımın kendi belgelerine bakmanız gerekir.
DNS değişikliği için yeniden başlatma gerekir mi?
Hayır. Bağlantıyı veya ilgili hizmeti yeniden başlatmanız yeterlidir.
Ubuntu’da şifreli DNS kullanmak performansı etkiler mi?
İlk bağlantıda çok küçük bir gecikme olabilir, ancak önbellek sayesinde günlük kullanımda fark edilmez.