Rehber Raspberry Pi ile Adguard + Unbound + Cloudflare DoH ve DoT birlikte çalıştırma


Herkese selamlar.

Bu rehberimde Raspberry Pi üzerinde Adguard Home'u Unbound ve tercihinize göre Cloudflare DoH veya DoT ile birlikte çalıştırmayı anlatacağım.


İşletim sisteminin yüklü olduğunu ve terminal üzerinden bağlantı kurduğunuzu varsayacağım, eğer bu konularda eksik iseniz bu konudan öğrenebilirsiniz: Rehber: Pi-Hole Kurulumu | Modeme bağlı tüm cihazlardaki reklamları engellemek




Adguard Home nedir?:
Kısaca, Raspberry Pi cihazınızı, tüm ağınızda reklam engelleyen bir DNS sunucusuna çeviren bir yazılım. Pi-Hole ile aynı mantıktadır. Google gibi, Cloudflare gibi bir DNS sunucusu hazırlayıp, o DNS sunucusunu modemdeki tüm cihazların kullanmasını sağlayarak bunu yapıyoruz. Bu yazılım, kurulumunu yapacağımız DNS'i kullanan tüm cihazlardaki DNS isteklerine bakar, eğer reklam ise engeller; değil ise diğer DNS sunucularına yönlendirir. Bu şekilde reklam daha intenetinizi sömürüp cihazınıza indirilmeden engeller, veri tasarrufu ve haliyle internet yükünde azalma sağlar.


DNS over HTTPS nedir? Ne işe yarar?:
HTTPS üzerinden DNS (DoH), isteği bir HTTPS uç noktasına göndererek DNS isteklerinizin güvenliğini sağlamanın bir yöntemidir. Bu, DNS isteğinizin gerçek bir DNS paketi yerine normal HTTPS (şifrelenmiş) web trafiği olarak göründüğü anlamına gelir. DNS, şifrelenmemiş bir açık metin protokolüdür, yani istemci ile DNS sunucusu arasındaki herhangi bir gizli dinleyicinin (Türk Telekom :p ) veya makinenin DNS talebinin içeriğini görebileceği anlamına gelir. HTTPS üzerinden DNS, DNS'ye güvenlik ekler ve HTTPS (web'i şifrelemek için kullanılan protokol) kullanarak DNS sorgularını şifreler.


Unbound nedir?:
Bunu tam olarak cevaplamak için DNS'in çalışma mantığını anlatmam gerekiyor ancak bunu yapmadan anlatmaya çalışacağım.

Unbound, doğrulayan, özyinelemeli, önbelleğe alınan bir DNS çözümleyicidir. Adguard ya da Pi-Hole, internette girdiğiniz bir web sitesinin IP adresini bilmiyorsa, bu bilgi için bir DNS sunucusuna, mesela Cloudflare DNS'e: "Hop! Kimdir bu?" şeklinde sorması gerekir.

Unbound, girdiğiniz bir web sitesinin ip adresini "bulacak" kendi DNS sunucunuzdur. Başka bir DNS'e sormaz, bunu kendisi yapar. Bu şekilde daha fazla gizlilik sağlar. Ayrıca Unbound, istemcilerin iletişimlerini şifrelemelerine olanak tanıyan TLS üzerinden DNS ve HTTPS üzerinden DNS'yi destekler.





Adguard kurulumu

Terminal üzerinde şu komutu girelim:

Kod:
curl -sSL https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh

  1. Kurulum tamamlandığında, Adguard ana sayfanızın bağlantısını gösteren bir pencere açılır, oradan ara yüze girin.
  2. Listen interface seçeneklerinde Eth0 seçin.
  3. Kullanıcı adı ve şifre ayarlayın.
  4. Ayarlar - Genel ayarlar kısmında filtreleri güncelleme sıklığı ayarını 12 saat yapın.


Cihazlarınızın Adguard'ı kullanmasını sağlamak

Bunun için Raspberry Pi cihazınızın IP adresini DNS ayarlarınıza girmeniz gerekiyor. Benim için bu: 192.168.1.68
Tek tek cihazlardan DNS ayarlayabilirsiniz, modem ayarlarınızdan DNS adresini seçebilirsiniz, ya da DNS seçeneği yok ise DHCP seçeneğini kullanabilirsiniz.



Unbound kurulumu

Terminal üzerinden şu komutları girelim:

Kod:
sudo apt install unbound -y

Kod:
wget -O root.hints https://www.internic.net/domain/named.root && sudo mv root.hints /var/lib/unbound/

6 ayda bir bunun güncellenmesi lazım, bunu otomatikleştirelim:

Kod:
sudo crontab -e

Komutunu girdikten sonra size bir editör soracak, 1 seçip devam edelim. Çıkan boş ekran şunu yapıştıralım:

Kod:
1 0 1 */6 * wget -O root.hints https://www.internic.net/domain/named.root
2 0 1 */6 * sudo mv root.hints /var/lib/unbound/

Daha sonrasında Ctrl+X ve Y komutları ile kaydedelim.



Cloudflared Kurulumu

Terminal üzerinden sırasıyla şu komutları girelim:

Kod:
wget https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-arm.tgz && tar -xvzf cloudflared-stable-linux-arm.tgz

Kod:
sudo cp cloudflared /usr/local/bin/ && sudo chmod +x /usr/local/bin/cloudflared

Kod:
sudo useradd -s /usr/sbin/nologin -r -M cloudflared

Kod:
cd /etc/default && sudo wget https://raw.githubusercontent.com/trinib/Adguard-Wireguard-Unbound-Cloudflare/main/cloudflared

Kod:
sudo chown cloudflared:cloudflared /etc/default/cloudflared && sudo chown cloudflared:cloudflared /usr/local/bin/cloudflared

Kod:
cd /lib/systemd/system && sudo wget https://raw.githubusercontent.com/trinib/Adguard-Wireguard-Unbound-Cloudflare/main/cloudflared.service

Kod:
sudo systemctl enable cloudflared && sudo systemctl start cloudflared

Cloudflared çalıştığını doğrulamak için şu komutu kullanabiliriz:

Kod:
sudo systemctl status cloudflared

Active (running) gördüğünüzde sorun yok demektir. Kontrol ettikten sonra Ctrl + C kombinasyonuyla terminale geri dönebilirsiniz.

Cloudflared otomatik güncelleştirmesini ayarlayalım:

Kod:
sudo crontab -e

Açılan metin belgesi görünümündeki bölümün en altına şu komutu ekleyin:

Kod:
0 3 * * 5 sudo cloudflared update && sudo systemctl restart cloudflared

Daha sonrasında Ctrl+X ve Y komutunu verip bu ekranı kapatalım.



Cloudflared ve Unbound'ı Adguard ile birlikte çalışacak şekilde ayarlamak

Terminal üzerinden şu komutu girelim:

Kod:
sudo nano /etc/unbound/unbound.conf.d/unbound.conf

Şu metni yapıştırın:

Kod:
server:



    # The  verbosity  number, level 0 means no verbosity, only errors.

    # Level 1 gives operational information. Level  2  gives  detailed

    # operational  information. Level 3 gives query level information,

    # output per query.  Level 4 gives  algorithm  level  information.

    # Level 5 logs client identification for cache misses.  Default is

    # level 1.

    verbosity: 0

 

    interface: 127.0.0.1

    port: 53

    do-ip4: yes

    do-udp: yes

    do-tcp: yes

 

    # May be set to yes if you have IPv6 connectivity

    do-ip6: no



    # You want to leave this to no unless you have *native* IPv6. With 6to4 and

    # Terredo tunnels your web browser should favor IPv4 for the same reasons

    prefer-ip6: no

 

    # Use this only when you downloaded the list of primary root servers!

    # Read  the  root  hints from this file. Make sure to

    # update root.hints evry 5-6 months.

    root-hints: "/var/lib/unbound/root.hints"

 

    # Trust glue only if it is within the servers authority

    harden-glue: yes

 

    # Ignore very large queries.

    harden-large-queries: yes

 

    # Require DNSSEC data for trust-anchored zones, if such data is absent, the zone becomes BOGUS

    # If you want to disable DNSSEC, set harden-dnssec stripped: no

    harden-dnssec-stripped: yes

 

    # Number of bytes size to advertise as the EDNS reassembly buffer

    # size. This is the value put into  datagrams over UDP towards

    # peers. The actual buffer size is determined by msg-buffer-size

    # (both for TCP and UDP).

    edns-buffer-size: 1232

 

    # Rotates RRSet order in response (the pseudo-random

    # number is taken from Ensure privacy of local IP

    # ranges the query ID, for speed and thread safety).

    # private-address: 192.168.0.0/16

    rrset-roundrobin: yes

 

    # Time to live minimum for RRsets and messages in the cache. If the minimum

    # kicks in, the data is cached for longer than the domain owner intended,

    # and thus less queries are made to look up the data. Zero makes sure the

    # data in the cache is as the domain owner intended, higher values,

    # especially more than an hour or so, can lead to trouble as the data in

    # the cache does not match up with the actual data anymore

    cache-min-ttl: 300

    cache-max-ttl: 86400

 

    # Have unbound attempt to serve old responses from cache with a TTL of 0 in

    # the response without waiting for the actual resolution to finish. The

    # actual resolution answer ends up in the cache later on.

    serve-expired: yes

 

    # Harden against algorithm downgrade when multiple algorithms are

    # advertised in the DS record.

    harden-algo-downgrade: yes

 

    # Ignore very small EDNS buffer sizes from queries.

    harden-short-bufsize: yes

 

    # Refuse id.server and hostname.bind queries

    hide-identity: yes

 

    # Report this identity rather than the hostname of the server.

    identity: "Server"

 

    # Refuse version.server and version.bind queries

    hide-version: yes

 

    # Prevent the unbound server from forking into the background as a daemon

    do-daemonize: no

 

    # Number  of  bytes size of the aggressive negative cache.

    neg-cache-size: 4M

 

    # Send minimum amount of information to upstream servers to enhance privacy

    qname-minimisation: yes

 

    # Deny queries of type ANY with an empty response.

    # Works only on version 1.8 and above

    deny-any: yes



    # Do no insert authority/additional sections into response messages when

    # those sections are not required. This reduces response size

    # significantly, and may avoid TCP fallback for some responses. This may

    # cause a slight speedup

    minimal-responses: yes

 

    # Perform prefetching of close to expired message cache entries

    # This only applies to domains that have been frequently queried

    # This flag updates the cached domains

    prefetch: yes

 

    # Fetch the DNSKEYs earlier in the validation process, when a DS record is

    # encountered. This lowers the latency of requests at the expense of little

    # more CPU usage.

    prefetch-key: yes

 

    # One thread should be sufficient, can be increased on beefy machines. In reality for

    # most users running on small networks or on a single machine, it should be unnecessary

    # to seek performance enhancement by increasing num-threads above 1.

    num-threads: 1



    # more cache memory. rrset-cache-size should twice what msg-cache-size is.

    msg-cache-size: 50m

    rrset-cache-size: 100m

 

    # Faster UDP with multithreading (only on Linux).

    so-reuseport: yes

 

    # Ensure kernel buffer is large enough to not lose messages in traffix spikes

    so-rcvbuf: 4m

    so-sndbuf: 4m

 

    # Set the total number of unwanted replies to keep track of in every thread.

    # When it reaches the threshold, a defensive action of clearing the rrset

    # and message caches is taken, hopefully flushing away any poison.

    # Unbound suggests a value of 10 million.

    unwanted-reply-threshold: 100000

 

    # Minimize logs

    # Do not print one line per query to the log

    log-queries: no

    # Do not print one line per reply to the log

    log-replies: no

    # Do not print log lines that say why queries return SERVFAIL to clients

    log-servfail: no

    # Do not print log lines to inform about local zone actions

    log-local-actions: no

    # Do not print log lines that say why queries return SERVFAIL to clients

    logfile: /dev/null

 

    # Ensure privacy of local IP ranges

    private-address: 192.168.0.0/16

    private-address: 169.254.0.0/16

    private-address: 172.16.0.0/12

    private-address: 10.0.0.0/8

    private-address: fd00::/8

    private-address: fe80::/10

 

# CLOUDFLARE SETTINGS

server:

    tls-cert-bundle: /etc/ssl/certs/ca-certificates.crt

forward-zone:

  name: "."

  forward-tls-upstream: yes

  # Cloudflare DNS

  forward-addr: 2606:4700:4700::1111@853#cloudflare-dns.com

  forward-addr: 1.1.1.1@853#cloudflare-dns.com

  forward-addr: 2606:4700:4700::1001@853#cloudflare-dns.com

  forward-addr: 1.0.0.1@853#cloudflare-dns.com

Metini yapıştırdıktan sonra yine Ctrl+X ve Y komutunu verip bu ekranı kapatalım.

Adguard arayüzüne dönüpAyarlar - DNS kısmında ÜST DNS sunucusu ve DNS Önyükleme sunucuları kısmında ne varsa silelim.

TLS (DoT) üzerinden DNS için, hem "Üst" hem de "Önyükleme" sunucu alanlarına 127.0.0.1:53 ekleyin.
HTTPS(DoH) üzerinden DNS için hem "Üst" hem de "Önyükleme" sunucu alanlarına 127.0.0.1:5053 ekleyin.

İkisini birden kullanmak da mümkün, bunun için iki bölüme de iki ip adresini de yazmanız, ve En hızlı IP adresi seçeneğini seçmeniz gerekiyor.
adguard dns.png



Ayarları uyguladıktan sonra,

DNS Önbelleği Yapılandırması bölümünde Önbellek boyutunu 0 olarak ayarlayıp kaydedin. Bu ayarı zaten Unbound halledeceği için gereksiz yük yapmaya gerek yok.
adguard dns önbelleği.png


Son olarak Unbound'u şu komut ile yeniden başlatalım:

Kod:
sudo service unbound restart





Her şeyin çalıştığını doğrulamak:

Adguard Home ara yüzünde yeşil renkte AÇIK yazısını görmelisiniz.
adguard yeşil.png

1.1.1.1 — the Internet’s Fastest, Privacy-First DNS Resolver sitesinde 1.1.1.1 karşısında YES ve ayarınıza göre DoH veya DoT karşısında YES görmelisiniz.
cloudflare debug info.png

DNS leak test. Free check Sızma çıkmaması lazım.
dnsleaknot.png

Cloudflare ESNI Checker | Cloudflare Secure DNS yeşil olmalı.
cloudflare secure dns.png

DNSSEC Resolver Test Size okay işareti yapmalı :p
dnssecokay.png
 
Son düzenleyen: Moderatör:
Gözle görülür gecikme etkisi olmaz. Oyunlardaki ping değeri ile DNS sorgularının hızının alakası yoktur hiçbir zaman.

NextDNS Raspberry Pi'a kurulamıyor, yönlendirici görevi görüyor sadece. Onun yerine statik IP hizmet destekleyen bir modem ya da direkt NextDNS destekleyen Keenetic ile kullanmak daha mantıklı.
O zaman adgurd+cloudflare ile devam edeceğim. Teşekkür ederim. Unbound konusunu açıklayacan olursa gelir ara ara kontrol ederim burasını

Arkadaşlar bu konuyu sonunda çözdüm aslında yanlışlık yapmamışım . Konunun sonundaki yazıda aslında eksik bilgi verilmiş. Dns leak testi bazen n/a şeklinde sonuçlar verebiliyor fakat orada sadece 1 adet clodflare görürseniz sızıntı yok demektir.

Statk ip'ye sahibim lan ağına bağlı değilken dışarıdan telefonda nasıl asguard home kullanabilirim reklamları engellemesi için ? telefonda dns bölümüne statik ip adresini yazınca ana modeme bağlanmış oluyor . Raspberry ip adresini telefonda dns bölümüne nasıl uygulayacağım bilen var mı ?

@Dümdüz
 
Son düzenleme:
Statk IP'ye sahibim lan ağına bağlı değilken dışarıdan telefonda nasıl asguard Home kullanabilirim reklamları engellemesi için? Telefonda DNS bölümüne statik IP adresini yazınca ana modeme bağlanmış oluyor. Raspberry IP adresini telefonda DNS bölümüne nasıl uygulayacağım bilen var mı?

@Dümdüz

Öncelikle bunu önermeyeceğimi söylemek istiyorum, performanslı olmaz. Telefondan bağlandığınızda IP adresiniz evdeki IP adresiniz ile aynı olur, mobil veri hızınız evinizin internet hızı ile sınırlı kalacaktır, web ve DNS sorgularınız da bir hayli yavaşlayacaktır.

Ama denemek istiyorum derseniz, bunun için Raspbery Pi'a Wireguard kurup kullanabilirsiniz. Modem üzerinden de Port Forwarding yapmalısınız.

Bunun yerine direkt Adguard DNS'in Android uygulamasını önerebilirim. Ya da telefon ayarlarından "Özel DNS" seçip;
Adresini girebilirsiniz.
 
Ben interneti outdoor başka bir cihazdan alıyorum. Yani karşıdaki outdoor cihaz benim outdoor cihaza Wi-Fi ile internet veriyor. Gelen internet odanın içerisine bir acess point ile interneti dağıtıyor. DHCP'yi karşıdaki ooutdoor cihaz veriyor benim outdoor cihaz ve acesspoint DHCP kapalı durumda. Ben Raspberry IP adresini DHCP kapalı olarak benim outdoor cihaz üzerinden dağıtmam mümkün mü? DNS adresi için illa DHCP açık mı olması gerekiyor? Tek tek Cihazlardan DNS vermek istemiyorum. Karşıdaki outdoor cihaza erişimim yok. Performans açısından tekrar dhcp açmak istemiyorum @Dümdüz
 
Ben interneti outdoor başka bir cihazdan alıyorum. Yani karşıdaki outdoor cihaz benim outdoor cihaza Wi-Fi ile internet veriyor. Gelen internet odanın içerisine bir acess point ile interneti dağıtıyor. DHCP'yi karşıdaki ooutdoor cihaz veriyor benim outdoor cihaz ve acesspoint DHCP kapalı durumda. Ben Raspberry IP adresini DHCP kapalı olarak benim outdoor cihaz üzerinden dağıtmam mümkün mü? DNS adresi için illa DHCP açık mı olması gerekiyor? Tek tek Cihazlardan DNS vermek istemiyorum. Karşıdaki outdoor cihaza erişimim yok. Performans açısından tekrar DHCP açmak istemiyorum @Dümdüz

Access point'in DNS değiştirme özelliğini desteklemesi lazım. Ayarlarda göremiyorsanız bildiğim kadarıyla DHCP olmadan yapabilmeniz pek mümkün değil. DHCP de tahmin ettiğiniz kadar interneti yavaşlatmaz ya da performansı düşürmez. DHCP genellikle her saat başı (sık hali) ya da 7-8 saatte bir işlem görür ve bu 1 saniyeden daha kısa sürer.
 
Access point'in DNS değiştirme özelliğini desteklemesi lazım. Ayarlarda göremiyorsanız bildiğim kadarıyla DHCP olmadan yapabilmeniz pek mümkün değil. DHCP de tahmin ettiğiniz kadar interneti yavaşlatmaz ya da performansı düşürmez. DHCP genellikle her saat başı (sık hali) ya da 7-8 saatte bir işlem görür ve bu 1 saniyeden daha kısa sürer.
Mikrotik outdoor cihaz kullanıyorum bridge mod olarak.
 
Adguard yerine Pi-hole kurmak istiyorum. Bu durumda rehber içerisinde neleri farklı yapmam lazım? Örneğin "Cloudflared ve Unbound'ı Adguard ile birlikte çalışacak şekilde ayarlamak" bölümü, Pi-hole kurulumunda nasıl olmalı? Bence rehber Pi-hole, Unbound ve Cloudflared için de güncellense güzel olur.
@Dümdüz
 
Son düzenleme:
@Dümdüz bey,

Şu konuda Wireguard ve pivpn kurulumuna da işaret edilmiş. Yeni bir konu açarak, warp+ hesabımızı wireguard yada pivpn ile pi cihazımıza kurulumunu ve adguard home ile birlikte custom dns olarak wireguard yada pivpn konfigürasyonuna eklemeyi tarif edebilir misiniz? Güzel konu açmışsınız, devamı gelmeli. Warp+ Vpn (wireguard) ile adguard home birlikte kullanım senaryosu sorunsuz kullanılıyormuş. Yeni bir konu açmayı düşünüyor musunuz?
 
@Dümdüz bey,

Şu konuda Wireguard ve PIVPN kurulumuna da işaret edilmiş. Yeni bir konu açarak, WARP+ hesabımızı wireguard ya da PIVPN ile Pi cihazımıza kurulumunu ve AdGuard Home ile birlikte Custom DNS olarak wireguard ya da PIVPN konfigürasyonuna eklemeyi tarif edebilir misiniz? Güzel konu açmışsınız, devamı gelmeli. WARP+ VPN (wireguard) ile AdGuard Home birlikte kullanım senaryosu sorunsuz kullanılıyormuş. Yeni bir konu açmayı düşünüyor musunuz?

Elimdeki Raspberry Pi'ı sattım maalesef :)
 

Geri
Yukarı