![]() |
Wireshark uygulaması ile yakalanan, şifrelenmemiş DNS sorgusu içeriği. |
DNS sorgusu incelendiğinde, girilmek istenen sitenin web adresi düz metin olarak kolayca görülebilir. Bu durum bizi DNS Spoofing, trafik takibi ve kayıt altına alma, reklam amaçlı kullanım gibi isteğimiz dışında gerçekleşebilecek problemlere sürükleyebilir. Ücretsiz Wi-Fi bağlantı noktası sunan bir kişi veya işletmenin, reklam verenlere satmak için DNS sorgularınızı kaydettiğini düşünün.
DNS over TLS (DoT), bunun önlemini almak için geliştirilmiş yöntemlerden biridir. Bu yöntemi kullanarak DNS
trafiğimizi şifreleyebiliyoruz. Bazı tarayıcılarla birlikte gömülü halde zaten geliyor (aktifleştirmeniz
gerekebilir). Ancak sadece tarayıcıların değil, sistem genelinde DNS sorgusu gönderen tüm uygulamaların sorgularını
şifrelemek istiyorsanız, aşağıda anlatacağım uygulamalar ile sistem genelinde kullanılır hale
getirebilirsiniz.
Not: Aşağıda anlatılan yöntemler, Debian ve Ubuntu tabanlı Linux dağıtımları için geçerlidir.Ağ işlemleri yürütürken, ağ istatistiklerine sıkça ihtiyaç duyacaksınız. Bu ihtiyacı karşılamak için sisteminizde bazı araçların kurulu olması gerekiyor. Aşağıdaki işlemleri yürütürken de, ağ istatistiklerini analiz etmeye yarayan
netstat
adında bir komut satırı yardımcı programını kullandım. Bunu kurmak ve kullanmak zorunda değilsiniz,
bu kısımları atlasanız da olur. Kurmak isteyenler ise netstat
aracını içinde barındıran
net-tools
paketini
aşağıdaki komutla kurabilirler.
sudo apt-get install net-tools
DNS over TLS (DoT)
Bu yöntemi Ubuntu dağıtımlarının güncel sürümlerinde, sistemde ön tanımlı olarak gelen
systemd-resolved
servisinin konfigüre edilmesiyle kullanılabileceğiniz söyleniyor. Ancak yaptığım deneme ve araştırmalarda, ne kadar
uğraşsam da ne yazık ki kararlı çalışmadığını, sorguların bazen şifrelenmediğini gördüm. Bu nedenle
systemd-resolved
konfigürasyonunu burada anlatmıyorum.İkinci seçenek olarak, Stubby uygulamasını kurarak bu yöntemi Linux işletim sistemi genelinde kullanabilirsiniz.
Stubby
systemd-resolved
) işte bu
adresi dinler ve gelen sorguları, kendi konfigürasyon dosyalarında
tanımlanmış diğer DNS adreslerine (ya da başka bir çözümleyiciye)
yönlendirir. Ancak şifrelemez, olduğu gibi açık olarak gönderir. Stubby çözümleyicisi ise systemd-resolved
çözümleyicisi ile uzak DNS arasına konumlandırılır. systemd-resolved
çözümleyicisinin, sorguları uzak DNS yerine Stubby'e göndermesi sağlanır. Stubby gelen açık sorguları
şifreler ve kendi konfigürasyonundaki güvenli DNS adreslerine 853 nolu port üzerinden gönderir. Aşağıdaki şemada bu
yapıyı anlatmaya çalıştım.Stubby Kurulumu
sudo apt install stubby
Dikkat! Stubby'yi nereden indirdiğinize dikkat edin. Açık kaynak kodlu bir uygulama olduğu için,
zararınıza çalışacak şekilde düzenlenmiş kopyalarından sakınmalısınız. Yukarıda verdiğim linklerden veya
yine yukarıda gösterildiği gibi, apt
ile işletim sisteminizin kendi paket deposundan kurmanız daha
güvenli olacaktır.
Stubby kurulduktan sonra arka planda otomatik olarak çalışmaya başlar. Alttaki komut yardımıyla çalışma durumunu
kontrol edebiliyoruz.systemctl status stubby
$ systemctl status stubby
● stubby.service - DNS Privacy Stub Resolver
Loaded: loaded (/lib/systemd/system/stubby.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2019-12-09 09:51:45 +03; 21s ago
Docs: https://dnsprivacy.org/wiki/display/DP/DNS+Privacy+Daemon+-+Stubby
Main PID: 15870 (stubby)
Tasks: 1 (limit: 4915)
CGroup: /system.slice/stubby.service
└─15870 /usr/bin/stubby
Ara 09 09:51:45 debian-f systemd[1]: Started DNS Privacy Stub Resolver.
Ara 09 09:51:46 debian-f stubby[15870]: [02:51:46.000821] STUBBY: Read config from file /etc/stubby/stubby.yml
Ara 09 09:51:46 debian-f stubby[15870]: [02:51:46.003755] STUBBY: DNSSEC Validation is OFF
Ara 09 09:51:46 debian-f stubby[15870]: [02:51:46.004223] STUBBY: Transport list is:
Ara 09 09:51:46 debian-f stubby[15870]: [02:51:46.004228] STUBBY: - TLS
Ara 09 09:51:46 debian-f stubby[15870]: [02:51:46.004232] STUBBY: Privacy Usage Profile is Strict (Authentication required)
Ara 09 09:51:46 debian-f stubby[15870]: [02:51:46.004235] STUBBY: (NOTE a Strict Profile only applies when TLS is the ONLY transport!!)
Ara 09 09:51:46 debian-f stubby[15870]: [02:51:46.004238] STUBBY: Starting DAEMON....
$
Çıktıda Active:
satırında active (running)
ifadesinden, Stubby'nin çalıştığını
anlayabilirsiniz.
stubby
filtresini uygulayarak baktığımızda, Stubby'nin yerel bilgisayarın
(127.0.0.1
) 53
nolu TCP ve UDP portunu dinlemeye başladığını görebiliriz.sudo netstat -lnptu | grep stubby
$ sudo netstat -lnptu | grep stubby
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 15870/stubby
tcp6 0 0 ::1:53 :::* LISTEN 15870/stubby
udp 0 0 127.0.0.1:53 0.0.0.0:* 15870/stubby
udp6 0 0 ::1:53 :::* 15870/stubby
$
systemd-resolved
çözümleyicisini
kullanır. Yukarıdaki netstat
aracına systemd-resolved
filtresi uyguladığımızda ise bu
ön tanımlı çözümleyicinin 127.0.0.53
IP adresinin 53
nolu TCP ve UDP portunu dinlediğini
görebiliriz.
sudo netstat -lnptu | grep systemd-resolve
$ sudo netstat -lnptu | grep systemd-resolve
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 527/systemd-resolve
udp 49920 0 127.0.0.53:53 0.0.0.0:* 527/systemd-resolve
$
Hatırlatma: Debian dağıtımlarında ise, eğer daha önce systemd-resolve
çözümleyici kurulmamışsa
bu komuttan sonra herhangi bir sonuç dönmeyecektir. Dolayısıyla biraz sonra düzenleme yapacağımız systemd
konfigürasyon dosyası da var olmayacaktır. Bu durumda systemd konfigürasyon dosyası yerine sistemin kendi
çözümleyici konfigürasyon dosyasında düzenleme yapmanız gerekecek (yeri geldiğinde belirteceğim).
Yapılandırma
Şimdi mevcut DNS adresimizi öğrenelim. Ubuntu için aşağıdaki komutu kullanabilirsiniz.
systemd-resolve --status
$ systemd-resolve --status
Global
DNSSEC NTA: 10.in-addr.arpa
16.172.in-addr.arpa
168.192.in-addr.arpa
17.172.in-addr.arpa
18.172.in-addr.arpa
19.172.in-addr.arpa
20.172.in-addr.arpa
21.172.in-addr.arpa
22.172.in-addr.arpa
23.172.in-addr.arpa
24.172.in-addr.arpa
25.172.in-addr.arpa
26.172.in-addr.arpa
27.172.in-addr.arpa
28.172.in-addr.arpa
29.172.in-addr.arpa
30.172.in-addr.arpa
31.172.in-addr.arpa
corp
d.f.ip6.arpa
home
internal
intranet
lan
local
private
test
Link 5 (docker0)
Current Scopes: none
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
Link 4 (virbr0-nic)
Current Scopes: none
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
Link 3 (virbr0)
Current Scopes: none
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
Link 2 (enp3s0)
Current Scopes: DNS
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
DNS Servers: 192.168.1.1
DNS Domain: ~.
Debian için de aşağıdaki komutu kullanın.
cat /etc/resolv.conf
$ cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.1.1
Ubuntu çıktısında listenen bilgilere göre sistemimde Link 2, ... Link 5 olarak gösterilen dört arayüz tanımlı ve
ethernet kartımın bağlı olduğu enp3s0
(Link 2 olarak gösterilen) arayüzüne tanımlanmış bir DNS adresi var.
Aslında DNS adresini ben tanımlamadım. Ağ ayarlarında DNS otomatik modda olduğu için, arayüzün varsayılan rotasındaki
geçidin adresini sistem otomatik olarak eklemiş. Bu durumda DNS, geçit (modem) üzerinden sağlanıyor. Bizim ise DNS
adresini, Stubby'nin dinlediği IP adresine yönlendirmemiz gerekiyor. Böylece açık DNS sorguları bu adres üzerinden
Stubby'e yapılırken, Stubby tarafından şifrelenerek dış DNS'e gönderilebilir. Bu durumda izleyebileceğimiz iki
alternatif yolumuz var.
Arayüze özel yönlendirme: Ağ arayüzlerinin DNS adreslerini tek tek Stubby'e yönlendirebilirsiniz. Bu durumda sadece yönlendirdiğiniz arayüzlerden güvenli DNS sorguları yapabilirsiniz. Diğer arayüzlerle yapılan bağlantılar kendi arayüz ayarlarına göre yönlendirilir.
Sistemin genel DNS adresini Stubby'e yönlendirme: Bu durumda sistemde oluşturulmuş sanal ya da gerçek bütün arayüzler, eğer arayüzde başka bir DNS adresi tanımlanmamışsa ve otomatik DNS modunda değilse genel DNS adresine yönlendirilir.
İki seçeneği de görelim.
1. Arayüze özel yönlendirme
1.1 Netplan kullanarak yönlendirme
Netplan, Ubuntu dağıtımlarında kullanılan, ağ yapılandırmasını
kolaylaştıran bir araçtır. Ubuntu 18.04 sürümünden itibaren ön tanımlı olarak gelir. Daha önceki sistemlerde, ağ
yapılandırmaları için /etc/resolv.conf
, /etc/systemd/resolved.conf
ve
/etc/network/interfaces
dosyalarını düzenlemek gerekiyordu. Ancak yeni servisler ve araçlar eklendikçe
oluşan karmaşayı tek elden yönetmek için bu araç sisteme dahil edildi.
Netplan yapılandırma dosyalarında, ağ yönetim araçları "renderer" olarak adlandırılır. NetworkManager veya systemd-networkd ağ
yönetim araçlarından (renderer) istediğiniz herhangi biri ile çalışabilir. YAML
dilini kullanarak
istediğimiz ağ ayarlarını .yaml
dosyalarında tanımladıktan sonra, Netplan her çalışma zamanında ve sistemin
her açılışında, her arayüz için gerekli dosyaları otomatik olarak yerinde oluşturur. Netplan yapılandırma dosyaları
/etc/netplan
dizininde saklanır. Sistem başlangıcında veya sudo netplan apply
komutunu
verdiğinizde, bu dizin içinde bulunan tüm YAML
dosyalarındaki komutları uygular ve arayüzlerin ağ yapılandırma
dosyalarını oluşturur. Renderer ise bu yapılandırma dosyaları yardımıyla ağ arayüzlerini yapılandırır.
Yukarıda, systemd-resolve --status
komutuyla ağ arayüzlerini listeleyebiliyorduk. Bu defa da aynı işi gören
farklı bir komutla listeleyelim.
ifconfig -a
$ ifconfig -a
docker0: flags=4099 (UP,BROADCAST,MULTICAST) mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:7b:cb:0f:19 txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
enp3s0: flags=4163 (UP,BROADCAST,RUNNING,MULTICAST) mtu 1500
inet 192.168.1.5 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::9c05:d472:9474:4a73 prefixlen 64 scopeid 0x20
ether 60:a4:4c:51:10:1f txqueuelen 1000 (Ethernet)
RX packets 3869576 bytes 5184392155 (5.1 GB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1199648 bytes 129541357 (129.5 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73 (UP,LOOPBACK,RUNNING) mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 126393 bytes 10946367 (10.9 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 126393 bytes 10946367 (10.9 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
...
$
Çıktıda 3 tane ağ arayüzünün bilgileri görülüyor.
docker0
Docker uygulamasının otomatik olarak oluşturduğu bir köprü ağı,enp3s0
ethernet kartımın bulunduğu fiziki ağ arayüzü,lo
(loopback) makinenin kendisiyle haberleşebilmesini sağlayan arayüz
Yukarıdaki çıktıyı ben biraz kısalttım. Bu arayüzlerin sayısı her makinede değişecektir.
Bunları listeleme sebebimiz, Linux'un tanıdığı ethernet kartlarını görmekti. enp3s0
arayüzünün internete
bağlandığım ethernet ağ arayüzüm olduğunu biliyorum artık. İnternete kablosuz ağ üzerinden bağlanıyorsanız,
wlan0
gibi bir arayüz listelenmeli. Hangi arayüzlerin kablosuz olduğunu anlamak için iwconfig
komutunu kullanabilirsiniz.
$ iwconfig
lo no wireless extensions.
enp3s0 no wireless extensions.
docker0 no wireless extensions.
$
Arayüzünüzü belirledikten sonra Netplan yapılandırması sırasında o arayüzün adını kullanmalısınız. Daha doğrusu DNS sorgularını şifrelemek istediğiniz her arayüzü yapılandırmalısınız. Ya da ikinci bölümde anlatacağım gibi bütün arayüzleri Stubby'e yönlendirebilirsiniz.
Aslında echo "nameserver 127.0.0.1" > /etc/resolv.conf
komutunu kullanarak DNS adresini hemen
değiştirebilirsiniz. Ancak bu değişiklik kalıcı olmayacaktır. Sistem yeniden başlatıldığında eski ayarlara geri döner.
İşte Netplan sayesinde bunu kalıcı hale getirebiliyoruz.
Şimdi /etc/netplan
dizinine girelim.
Not:Ben dizin altında/etc/netplan
dizinine girdiğinizde birkaçYAML
dosyası bulabilirsiniz. Eğer dosya yoksa, kendiniz oluşturmalısınız. Dosya uzantıları.yaml
olmalı. Her arayüz yapılandırması için farklı bir dosya oluşturabilirsiniz. Dosya isimlerini kendi anlayacağınız herhangi bir isim koyabilirsiniz. Netplan dosya adlarını önemsemez (Türkçe karakterler sorun çıkarabilir, ...bilemiyorum), klasör içindeki bütün dosyaları alfabetik sıraya göre yorumlar. Sonra gelen dosyadaki anahtar değerleri, daha önceki dosyalarda da tanımlanmışsa üzerine yazılır. Bu nedenle dosyaların yorumlanış sırasını belirleyebilmek için başlarına sayı ekleyebilirsiniz ( önerilen yazım şekli, iki basamaklı bir sayı ve kısa çizgi, ardından dosya adı şeklindedir, örnek:04-superonline.yaml
). Ayrıca/etc/netplan
dizininden sonra sırasıyla yorumlanan iki dizin daha vardır.
Bu dizinlerde bulunan
/etc/netplan
/lib/netplan
/run/netplan
YAML
dosyaları da,/etc/netplan
dizinindekilerden sonra yukarıdaki sırayla yoruma dahil edilir. Bu sıralamaya göre önceliğe sahip dizin, son sıradaki/run/netplan
dizinidir. Bu dizinde bulunan dosyalarda tanımlanan anahtarlar, diğer dizin altındaki dosyalarda tanımlanan anahtarların üzerine yazılacaktır.
01-network-manager-all.yaml
dosyasını buldum ve yapılandırmayı da aynı dosya içinde
yapıyorum. Dosyanın ilk olarak yorumlanması için isminin başına 01
eklenmiş. Bu zorunlu değil ancak başka
dosyalar da eklendiğinde ilk olarak hangisinin yorumlanacağını anlayabiliyoruz. Dosyayı Nano editörü ile açalım.sudo nano /etc/netplan/01-network-manager-all.yaml
# Let NetworkManager manage all devices on this system
network:
version: 2
renderer: NetworkManager
Yapılandırmada bir network düğümü tanımlanmış ve bu düğüm içinde, ağ yöneticisi (renderer) olarak NetworkManager
atanmış. Başka herhangi bir yapılandırma değeri olmadığı için, sistemdeki tüm arayüzler NetworkManager'ın kontrolüne
bırakılmış. Dolayısıyla şu an arayüzler için bir alt konuda anlattığım (komut satırı ve gui ile girilen) ayarlar geçerli
durumda. Biz ise NetworkManager'ın konfigurasyonunu Netplan'ın yapmasını sağlayacağız. Yani arayüzlerin kontrolü yine
NetworkManager'da olacak fakat NetworkManager'ın konfigürasyonunu Netplan ile önceden tanımlayacağız. Ve
NewtwokManager başladığında, Netplan ile tanımladığımız ayarlar ile çalışacak. Eğer daha önce yaptığınız bir
NetworkManager konfigürasyonu varsa, burada yapacağımız işlemler NetworkManager'in kendi konfigürasyonunun
üzerine yazılacak.Arayüzün adını yukarıda öğrenmiştim (
enp3s0
). Şimdi bu arayüzü YAML
dosyasına dahil edelim ve
ilgili değerleri de ekleyelim.
# Let NetworkManager manage all devices on this system
network:
version: 2
renderer: NetworkManager
ethernets:
enp3s0:
dhcp4: no
addresses: [192.168.1.21/24]
gateway4: 192.168.1.1
nameservers:
addresses: [127.0.0.1]
Yaptığımız değişiklik ile ethernet türünde bir cihaz tanımladık ve cihazın ağ arayüzünün adını belirttik
(enp3s0
). Burada çoklu arayüz tanımlamak için match
anahtarı kullanılabilir.match:
name: wlan*
Bu şekilde wlan
ile başlayan bütün kablosuz ağ arayüzlerini match
komutuyla eşleştirmiş
oluruz. Ve bu anahtar altında yapacağımız yapılandırmalar, eşleşen tüm arayüzlere uygulanır. Sistemdeki tüm PCI
üzerindeki ethernet arayüzleri için de alttaki yapı kullanılabilir.
match:
name: en*s*
Daha fazla örnek için man -a netplan
komutuyla, Netplan kılavuzuna bakabilirsiniz.
dhcp4: no
değeri, ağ arayüzünün otomatik IP almasının önüne geçiyor. Ve hemen ardından, arayüzün ve ağ
geçitinin
adreslerini tanımlıyoruz. Stubby'nin dinlediği IP ise nameservers:
düğümü altındaki,
addresses:
anahtarına giriliyor. ,
ile ayırarak birden fazla adres girebilirsiniz. Ancak
şifrelemeye alternatif yaratmaması adına, Stubby adresini tek adres olarak yazalım.
Amacımız yalnızca DNS adresini yönlendirmekken, arayüzün adres alma şeklini de dinamikten statiğe çevirdik. Bunun nedeni, Netplan'ın otomatik DNS adresi alma özelliğini NetworkManager konfigürasyonunda kapatamaması (networkd üzerinde kapatabiliyor). DNS adresini DHCP sunucusundan almasına engel olamadığımız için de, DHCP kullanımını bu şekilde kapatmış oluyoruz. Böylece DNS adresi de otomatik alınmamış oluyor. Sonrasında da hem arayüz hem de DNS adresini sabit olarak tanımlıyoruz.
Bu problem renderer
olarak networkd seçildiğinde yaşanmıyor ancak networkd ağ yöneticisinin kapsamı
NetworkManager kadar
geniş değil. Örneğin kablosuz ağları yapılandıramıyorsunuz ve grafik arayüzü (gui) ile yapılandırmak da biraz zor çünkü
doğru düzgün bir gui uygulaması yok. Netplan-NetworkManager arasındaki bu sorun giderilene kadar bu yöntemi kullanabilirsiniz.
Dosyayı bu haliyle kaydedelim. Şimdi Netplan'ın bu yeni yapılandırma dosyalarını yorumlayıp, NetworkManager konfigürasyon dosyalarını oluşturabilmesi için gerekli komutu verelim.
sudo netplan generate
Yapılan değişiklikleri çalışan sistemde uygulayalım.
sudo netplan apply
Değişikliği kontrol etmek için alttaki komutu kullanabilirsiniz.
nmcli device show enp3s0 | grep IP4.DNS
nmcli device show enp3s0 | grep IP4.DNS
IP4.DNS[1]: 127.0.0.1
$
Ethernet arayüzünün DNS adresi, Stubby'nin dinlediği IP adresine sabitlenmiş oldu.
1.2 NetworkManager kullanarak komut satırından yönlendirme
NetworkManager ağ bağlantılarından sorumlu, arka planda çalışan bir ağ yönetici araçtır. Ağ kartlarının eklendiğini veya
çıkarıldığını algılayabilir, arayüze rotalar tanımlayabilir. WiFi bağlantı noktalarını seçmenize olanak tanır ve WiFi
arayüzlerini yapılandırabilir. Büyük Linux dağıtımlarının çoğunda kurulu olarak gelmektedir.
NetworkManager yapılandırmasını iki şekilde yapabilirsiniz.
1.2.1 nmcli
aracını kullanarak NetworkManager'ın yapılandırılması
Network Manager paketi ile beraber gelen nmcli
aracı ise, NetworkManager'ı komut satırından kontrol etmek
için kullanılır. Bu aracı kullanarak DNS adresini tek bir arayüz üzerinde değiştirebilirsiniz.
İlk olarak, sistemimizde tanımlı bağlantıları listeliyelim.
nmcli c
$ nmcli c
NAME UUID TYPE DEVICE
Superonline 7badaaca-682b-3650-bc7c-229a6f13a344 ethernet enp3s0
virbr0 0a3bdcad-282f-467c-a4c9-6023b3cb576d bridge virbr0
Hsn 84f98807-b1ac-466e-b1f4-01fa2da01a66 wifi --
$
Benim kullandığım sistemde bir kablosuz (Hsn
), bir de kablolu (Superonline
) bağlantı tanımlı
durumda. Ayrıca sanal sistemlerle kullanılan bir de köprü bağlantı tanımlanmış. DNS adres değişikliğini
Superonline
bağlantısı üzerinde yapmak istediğimi düşünelim. Aşağıdaki komutla bu bağlantı için değişikliği
gerçekleştirmiş oluyorum.
nmcli c modify Superonline ipv4.dns "127.0.0.1" ipv4.ignore-auto-dns true
ipv4.dns
parametresine Stubby'nin dinlediği adresi tırnak içinde girerken,
ipv4.ignore-auto-dns
parametresine de true
değeri vererek, otomatik DNS seçiminin önüne
geçmiş oluyoruz.
IPv6 adresini değiştirmek için de yine nmcli
aracını kullanabilirsiniz.
nmcli c modify Superonline ipv6.dns "::1" ipv6.ignore-auto-dns true
Bir bağlantı için mevcut tüm parametreleri görmek isterseniz alttaki komutu kullanın.
nmcli c show Superonline
1.2.2 NetworkManager'ın yapılandırma dosyalarını düzenleme
Alternatif olarak üstteki yöntem kadar pratik olmasa da, NetworkManager yapılandırma dosyalarını elle düzenleyerek de
aynı işlemi gerçekleştirebilirsiniz. NetworkManager her bağlantıya ait yapılandırma dosyalarını
/etc/NetworkManager/system-connections
dizini altında bulundurur. İlk önce bu dizin altında bulunan
dosyaları listeleyelim.
ls -l /etc/NetworkManager/system-connections
$ ls -l /etc/NetworkManager/system-connections
toplam 12
-rw------- 1 root root 345 Ağu 4 2018 Hsn.nmconnection
-rw-r--r-- 1 root root 191 Kas 3 2013 NetworkManager-USRP
-rw------- 1 root root 359 Ara 16 20:59 Superonline.nmconnection
$
Listelenen dosyalardan da görüldüğü gibi Network Manager her bağlantı için bir yapılandırma dosyası oluşturmuş. DNS
yönlendirme işlemini, internet bağlantım olan Superonline
üzerinde yapmak istiyorum. Bu nedenle
Superonline
dosyasını yönetici haklarıyla Nano editörünü kullanarak açıyorum.
sudo nano /etc/NetworkManager/system-connections/Superonline.nmconnection
[connection]
id=Superonline
uuid=7badaaca-682b-3650-bc7c-229a6f13a344
type=ethernet
autoconnect-priority=-999
permissions=
timestamp=1576751879
[ethernet]
mac-address=62:B2:1C:68:11:1D
mac-address-blacklist=
[ipv4]
dns-search=
method=auto
[ipv6]
addr-gen-mode=stable-privacy
dns-search=
ip6-privacy=0
method=auto
Açılan dosyada [ipv4]
alanı altına dns=127.0.0.1;
ve [ipv6]
alanı altına da,
dns=::1;
şeklinde Stubby'nin dinlediği adresleri tanımlıyalım. Ayrıca DNS adresinin otomatik alınmasını
engelleyen ignore-auto-dns=true
satırını her iki alana da ekleyelim (IP adreslerinin sonuna
;
koymayı unutmayın).
...
[ipv4]
dns=127.0.0.1;
ignore-auto-dns=true
dns-search=
method=auto
[ipv6]
dns=::1;
ignore-auto-dns=true
addr-gen-mode=stable-privacy
dns-search=
ip6-privacy=0
method=auto
Yeni eklediğimiz satırlarla birlikte dosyayı kaydediyoruz.
İpucu: Nano editörü ile açılmış dosyayı kaydetmek içinCtrl+O
tuşlayın ve ardındanEnter
ile onaylayın. ArtıkCtrl+X
ile editörden çıkış yapabilirsiniz.
Değişiklilerin uygulanması için Network Manager'ı yeniden başlatmamız gerekiyor.
sudo systemctl restart NetworkManager.service
Bağlantı yeniden kurulduğunda, arayüzün DNS adresi olarak 127.0.0.1
görmelisiniz.
systemd-resolve --status
$ systemd-resolve --status
...
Link 2 (enp3s0)
Current Scopes: DNS
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
DNS Servers: 127.0.0.1
DNS Domain: ~.
$
Eğer yukarıdaki işlemleri uygulayabildiyseniz, sadece bu bağlantı (Superonline
) üzerinde DNS sorgularınız
şifrelenmeye başlayacaktır.
1.3 NetworkManager kullanarak grafik arayüz (GUI) ile yönlendirme
Ubuntu masaüstünde, NetworkManager ile kontrol edilen ağın ayarlarını grafik arayüz ile düzenlemek
isterseniz nm-connection-editor
programını kullanabilirsiniz. Programı doğrudan komut satırından
çalıştırabilirsiniz.
nm-connection-editor
Not: Eğer yukarıdaki komut ile başlatamıyorsanız, sisteminize kurmak içinnetwork-manager-gnome
paketini kurun.nm-connection-editor
programı bu paket ile birlikte gelir.sudo apt-get install network-manager-gnome
komutu ile paketi sisteminize kurabilirsiniz.
Veya bildirim alanındaki ağ simgesine tıklayın ve "Bağlantıları Düzenle..." seçeneğini seçin.
Not: Kullandığınız masaüstü ortamının bir bildirim alanı yoksa bu simgeyi göremezsiniz. Bu durumda uygulamalar arasında "Ağ Bağlantıları" isimli uygulamayı arayın.
Açılan pencereden internete bağlandığınız ağın adını seçin ve ayarlar penceresindeki IPv4
Ayarları sekmesinde bulunan, Yöntem açılabilir menüsünü Yalnızca kendiliğinden (DHCP)
adresler olarak değiştirin (bazı sistemlerde bunun yerine Auto DNS gibi bir seçenek olmalı, onu
kapatın). DNS adresi olarak 127.0.0.1
seçerek kaydedin.
Not:nm-connection-editor
arayüzünde değişiklik yapmanıza rağmen ağın çalışması etkilenmiyorsa, arka planda ağ kontrol uygulaması olarak,NetworkManager
yerinesystemd-networkd
çalışıyor olabilir. Aşağıdaki komut ileNetworkManager
çalışma durumunu öğrenin.
sudo systemctl status NetworkManager | grep Active
Şimdi de
$ sudo systemctl status NetworkManager | grep Active Active: inactive (dead) $
systemd-networkd
servisinin durumuna bakalım.
sudo systemctl status systemd-networkd | grep Active
Görüldüğü gibi,
$ sudo systemctl status systemd-networkd | grep Active Active: active (running) since Wed 2019-12-18 15:40:22 +03; 1min 37s ago $
NetworkManager
servisiinactive
durumdayken,systemd-networkd
servisi iseactive
durumda. Bu durumu tersine çevirmek için önceliklesystemd-networkd
servisini devre dışı bırakalım. Aşağıdaki komutları sırasıyla uygulayın.
Şimdisudo systemctl disable systemd-networkd.service sudo systemctl mask systemd-networkd.service sudo systemctl stop systemd-networkd.service
/etc/netplan
dizinine girerek.yaml
uzantılı dosyayı yönetici olarak açın ve içeriğini aşağıdaki gibi değiştirin.
Dosyayı kaydedin ve alttaki komut ilenetwork: version: 2 renderer: NetworkManager
NetworkManager
için yapılandırma dosyalarının oluşturulmasını sağlayın.
Ve son olaraksudo netplan generate
NetworkManager
servisini başlatın.
Şimdi artıksudo systemctl unmask NetworkManager sudo systemctl enable NetworkManager sudo systemctl start NetworkkManager
sudo systemctl status NetworkManager | grep Active
komutu ileNetworkManager
servisinin aktif olduğunu görmelisiniz. Artık yukarıdaki işlemleri uygulayaraknm-connection-editor
ile ağınızı yapılandırabilirsiniz.
Bu şekilde sadece bir arayüz bağlantısı üzerinde DNS sorgularınız şifrelenmeye başlayacaktır.
2. Bütün arayüzleri yönlendirme
Öncelikle Linux'ta DNS adresi elde etmekle ilgili aşağıdaki bilgileri not düşeyim.
Linux'ta, kullanılacak olan DNS adresi sırasıyla aşağıdaki kaynaklardan elde edilir.
/etc/resolv.conf
dosyasından (systemd-resolved
çözümleyicisinin yüklü olduğu sistemlerde bu dosya doğrudan düzenlenmez, aşağıda uyarı kısmını okuyun).Sistem hizmetlerinin yapılandırma dosyalarından, otomatik DNS alma özelliği aktif değil ve statik olarak belirtilmiş ise ( sytemd-networkd servisi aktif ise
/etc/systemd/network
dizini içindeki.network
uzantılı, NetworkManager aktif ise/etc/NetworkManager/system-connections/
içindeki, bağlantı başına oluşturulmuş dosyalardan).DHCP üzerinden, bağlantı başına dinamik olarak (otomatik DNS alma özelliği aktif ise).
En son elde edilen adres diğerlerinin üzerine yazılır, yani 3. seçenek önceliklidir. Dolayısıyla 3. sıradaki yöntem
iptal edilmiş ve 2. sıradaki ayarlarda herhangi bir statik adres belirtilmemişse (otomatik DNS alma özelliğinin
kapatılması gerekli), sistem bütün arayüzlerin DNS sorgularını, /etc/resolv.conf
dosyasında bulunan DNS
adresine yönlendirir. Eğer burada da bir DNS adresi bulunamazsa, bağlantı kurmaya çalıştığınızda karşı sunucunun IP
adresinin bulunamadığına dair bir hata mesajı alırsınız.
Uyarı:Şimdi yukarıdaki açıklama ve uyarıdan sonra, 1. adımda belirtilen DNS adresimizi ayarlayabilmek için/etc/resolv.conf
dosyası,systemd-resolved
çözümleyicisinin yüklü olduğu sistemlerde doğrudan düzenlenmez. Bu dosya,systemd-resolved
tarafından sistem her açıldığında dinamik olarak yeniden oluşturulur. Bu nedenle bu dosya içinde değişiklik yapsanız dahi, bir sonraki açılışta dosya eski haline dönecektir.systemd-resolved
ise bu dosyayı oluştururken/etc/systemd/resolved.conf
yapılandırma dosyasını dikkate alır. Dolayısıyla bu yapılandırma dosyasını düzenlemek,/etc/resolv.conf
dosyasının dinamik olarak oluşturulduğunda girilen değerlerini belirleyecektir.
systemd-resolved
yapılandırma dosyasını düzenlememiz gerektiğini biliyoruz. Dosyayı bir metin düzenleyici
ile (örn. Nano) yönetici olarak açın.sudo nano /etc/systemd/resolved.conf
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# Entries in this file show the compile time defaults.
# You can change settings by editing this file.
# Defaults can be restored by simply deleting this file.
#
# See resolved.conf(5) for details
[Resolve]
#DNS=
#FallbackDNS=
#Domains=
#LLMNR=no
#MulticastDNS=no
#DNSSEC=no
#Cache=yes
#DNSStubListener=yes
Dosya içindeki [Resolve]
başlığı altında bulunan DNS=
parametresinin başındaki #
karakterini kaldırın ve değer olarak, Stubby'nin dinlediği adresi (IPv4 127.0.0.1
, IPv6 için
0::1
) yazın.[Resolve]
...
DNS=127.0.0.1 0::1
#FallbackDNS=
#Domains=
#LLMNR=no
#MulticastDNS=no
#DNSSEC=no
#Cache=yes
#DNSStubListener=yes
Bu değişiklikten sonra dosyayı kaydederek kapatabilirsiniz.İpucu: Nano editörü ile açılmış dosyayı kaydetmek içinDeğişikliğin etkili olabilmesi için,Ctrl+O
tuşlayın ve ardındanEnter
ile onaylayın. ArtıkCtrl+X
ile editörden çıkış yapabilirsiniz.
systemd-resolved
servisini yeniden başlatmamız gerekiyor.
sudo systemctl restart systemd-resolved
veya
sudo service systemd-resolved restart
Değişikliğin gerçekleştiğini aşağıdaki komut ile gözlemleyebiliriz.
systemd-resolve --status
$ systemd-resolve --status
Global
DNS Servers: 127.0.0.1
::1
DNSSEC NTA: 10.in-addr.arpa
16.172.in-addr.arpa
168.192.in-addr.arpa
17.172.in-addr.arpa
18.172.in-addr.arpa
19.172.in-addr.arpa
20.172.in-addr.arpa
...
...
Link 2 (enp3s0)
Current Scopes: DNS
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
DNS Servers: 192.168.1.1
DNS adresinin Global
alanında değişmiş olmasına rağmen, bende (enp3s0)
olarak gösterilen
Link 2
ağında değişmediği görülüyor. Üstelik bendeki ağ yapılandırmasında, (enp3s0)
arayüzünün
DNS adresi de tanımlanmış değil. Bunun nedeni, sistem ağ bağlantısı ayarlarında (enp3s0)
olarak gösterilen
ethernet ağımın, DNS adres tercihinin otomatik ayarlanmış olmasıdır. Yani Linux DNS adresini, DNS adresi temin etme
yollarındaki 3. adımdan sağlıyor. Bu şekilde DHCP ile otomatik alınan DNS adresi öncelikli olduğu için bu
arayüzdeki bütün DNS sorguları bu adrese yönlendirilecektir. Bu yüzden, sistemin DNS adresi temin etme yollarından 3. ve
2. seçenekleri iptal etmemiz gerekecek.Bu işlemi yukarıda anlattığım tek ağ arayüzünü yönlendirme başlığı altındaki seçenekleri kullanarak her arayüz için yapabilirsiniz. Ya da kısaca NetworkManager'ın
nmcli
aracı ile yapabilirsiniz. İlk olarak, sistemimizde
tanımlı bağlantıları listeleyelim.nmcli c
$ nmcli c
NAME UUID TYPE DEVICE
Superonline 7badaaca-682b-3650-bc7c-229a6f13a344 ethernet enp3s0
virbr0 0a3bdcad-282f-467c-a4c9-6023b3cb576d bridge virbr0
Hsn 84f98807-b1ac-466e-b1f4-01fa2da01a66 wifi --
$
enp3s0
arayüzünde, DNS adresinin DHCP ile otomatik alınmasını önleyelim ve mevcut DNS adresini de
silelim.nmcli c modify Superonline ipv4.dns "" ipv4.ignore-auto-dns true ipv4.dns-search "~."
ipv4.dns
parametresine ""
girerek mevcut bütün adresleri temizliyoruz.
ipv4.ignore-auto-dns
parametresi ile otomatik DNS alımını engellemiş oluyoruz.
ipv4.dns-search "~."
parametresi ise DNS sorgularının, sistemin ön tanımlı DNS adresine (yani
/etc/systemd/resolved.conf
dosyası içinde [Resolve]
alanında tanımladığımız) yönlenmesini
sağlayacak. nmcli
aracını kullanabilirsiniz.nmcli c modify Superonline ipv6.dns "" ipv6.ignore-auto-dns true ipv6.dns-search "~."
Bu komutu uyguladığınız bütün arayüzler, Global
alandaki DNS adresine yönlenecektir. Artık yalnızca genel
DNS adresini değiştirerek, bütün arayüzleri bu adrese yönlendirmiş olursunuz.sudo systemctl restart NetworkManager.service
Sonuç
Yukarıdaki yöntemlerden birini tamamladıktan sonra, bloğuma girmek için istek gönderen bir internet tarayıcısının
yaptığı DNS sorgusuna tekrar bakalım.
![]() |
Wireshark uygulaması ile yakalanan, şifrelenmiş DNS sorgusu içeriği. |
Wireshark yazılımı ile elde ettiğim ekran
görüntüsünde görüldüğü gibi, artık DNS sorguları açık gönderilmek yerine TLS yöntemi ile şifreleniyor. Sorguların
gönderildiği 185.49.141.37
IP adresi ise Stubby yapılandırma dosyasında (/etc/stubby/stubby.yml
) ön tanımlı olarak gelen DNS adreslerinden biri. Bu yapılandırma dosyasında 3
adet IPv4, 3 adet de IPv6 DNS adresi kullanıma hazır olarak geliyor. Başka ek adresler de kayıtlı fakat kullanıma
açılmamış. Diğer DNS adreslerinin başındaki #
karakterini silerek kullanıma dahil edebilirsiniz.
Not: Stubby yapılandırma dosyalarında tanımladığınız DNS'lerin, DoT protokolünü desteklemesi gerekir. Stubby, kendi DNS'leri tanımlanmış halde geldiği için ek bir işlem yapmanıza gerek yok. Destekleyen diğer DNS'lerin listesine ise buradan ulaşabilirsiniz.
Kaynaklar
- Stubby web sitesi.
- Netplan konfigürasyon örnekleri.
- NetworkManager dökümanları.
- NetworkManager DNS yönetimi.
- Nmcli aracının kullanımı.
- Nmcli aracı ile bağlantıları düzenleme.
- systemd-resolved DNS çözümleyici man sayfası.
- resolved.conf yapılandırma dosyası man sayfası.
- DNS over TLS (DoT)
protokolünü destekleyen sunucuların listesi.
0 yorum:
Yorum Gönder