Unbound DNS, girdiğiniz bir web sitesinin ip adresini bulan ve önbelleğine alan kendi yerel DNS sunucunuzdur. Yani başka bir DNS'ye sormaz, bunu kendisi yapar, bu şekilde daha fazla gizlilik sağlar.
Ekstra olarak local_unbound 'da, reklam engelleme de yapacağız.
Güncellenmiş versiyon:V2
Bu çalışma Pardus 25.2 üzerinde YZ destekli yapılmıştır.
Eski versiyona buradan .pdf ulaşılabilir.
# apt install unbound
Kullanıcı için yeni bir unbound.conf oluşturalım.
# nano /etc/unbound/unbound.conf.d/unbound.conf
İçine bunları ekleyin.
server:
# Ağ Arayüzleri (IPv6 yerel döngüsü de eklendi)
interface: 127.0.0.1
interface: ::1
port: 53
# Kimlik Gizleme ve Günlükleme
hide-identity: yes
hide-version: yes
use-syslog: yes
verbosity: 1
# Önbellek Zamanlamaları
cache-max-ttl: 14400
cache-min-ttl: 900
module-config: "validator iterator"
# Performans ve Hız Optimizasyonu
prefetch: yes
prefetch-key: yes
rrset-roundrobin: yes
# 2 Çekirdek (nproc 2) Özel Ayarları
num-threads: 2
msg-cache-slabs: 2
rrset-cache-slabs: 2
infra-cache-slabs: 2
key-cache-slabs: 2
# Önbellek Boyutları (2 Çekirdek için ideal hafif yük)
rrset-cache-size: 100m
msg-cache-size: 50m
so-rcvbuf: 4m
so-sndbuf: 4m
# Ağ Protokolleri
do-ip4: yes
do-udp: yes
do-tcp: yes
# IPv6 (Sisteminiz desteklemiyorsa dışarıya IPv6 sormaz)
do-ip6: no
prefer-ip6: no
# Güvenlik ve Sınırlandırmalar
harden-glue: yes
harden-dnssec-stripped: yes
edns-buffer-size: 1232
forward-zone:
name: "."
forward-addr: 94.140.14.14@53#adguard.dns
forward-addr: 94.140.15.15@53#adguard.dns
forward-addr: 1.1.1.1@53#one.one.one.one
forward-addr: 1.0.0.1@53#one.one.one.one
# forward-addr: 9.9.9.9@53#dns.quad9.net
# forward-addr: 149.112.112.112@53#dns.quad9.net
# forward-addr: 8.8.4.4@53#dns.google
# forward-addr: 8.8.8.8@53#dns.google
# systemctl start unbound ; systemctl enable unbound
⌛ KONTROL
Yapılandırmayı kontrol edin.
# unbound-checkconf /etc/unbound/unbound.conf.d/unbound.conf
unbound-checkconf: no errors in /etc/unbound/unbound.conf.d/unbound.conf
# ss -antpl | grep 53
LISTEN 0 32 192.168.122.1:53 0.0.0.0:*
LISTEN 0 256 127.0.0.1:53 0.0.0.0:*
$ dig freebsd.com | grep -e Query -e SERVER
;; Query time: 3979 msec
;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP)
Aynı komutu tekrar verin.
$ dig freebsd.com | grep -e Query -e SERVER
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP)
# unbound-control status
version: 1.22.0
verbosity: 1
threads: 2
modules: 2 [ validator iterator ]
uptime: 13781 seconds
options: reuseport control(namedpipe)
unbound (pid 859) is running...
Bazı durumlarda, DNS sunucunuz sorgunuzu yanıtlayamaz. Bu durumda, aşağıdaki komutu kullanarak DNS önbelleğini temizleyebilirsiniz:
# unbound-control flush ubuntu.com
🔎 REKLAM ENGELLEME - KARA LİSTE
Bu betik öncelikle /etc/unbound/unbound.conf.d içine blacklist.conf ve whitelist.txt dosyalarınıda oluşturur.
Sonrada betik çalıştırılınca, filtreler güncellenir ve blacklist.conf içine yazar.
Güvendiğiniz siteleri whitelist.txt 'te ekleyebilirsiniz.
://google.com
://reddit.com
://github.com
Önce yerimizi hazırlayalım
# mkdir /root/bin
# touch /root/bin/unbound-blacklist.sh
Sonrada altta ki kodları unbound-blacklist.sh içine kopyalayın.
#!/bin/bash
# Değişken Tanımlamaları
CONF_DIR="/etc/unbound/unbound.conf.d"
TARGET_FILE="$CONF_DIR/blacklist.conf"
WHITELIST_FILE="$CONF_DIR/whitelist.txt"
TEMP_FILE="/tmp/unbound_blacklist_tmp"
LOG_FILE="/xxx/xxx/xxx/dns.log" # DİKKAT !! Bu yolu kendinize göre düzenleyinİZ...
DATE=$(date "+%d-%m-%Y %H:%M")
# Gerekli dosyalar yoksa oluştur
mkdir -p "$(dirname "$LOG_FILE")"
touch "$WHITELIST_FILE"
# ========================================================
# ACİL DURUM DNS AYARI: ISS ENGELLERİNİ VE NETWORKMANAGER'I AŞMAK
# ========================================================
# resolv.conf üzerindeki olası kilitleri kaldır ve Cloudflare'e yönlendir
chattr -i -a /etc/resolv.conf 2>/dev/null
echo "nameserver 1.1.1.1" > /etc/resolv.conf
# ========================================================
# 1. Beyaz listedeki boş satırları ve yorumları temizleyip güvenli hale getir
TEMPCLEANWHITE="/tmp/clean_whitelist_tmp"
sed '/^[[:space:]]*$/d; /^[[:space:]]*#/d' "$WHITELIST_FILE" > "$TEMPCLEANWHITE"
echo "server:" > "$TEMP_FILE"
if [ -s "$TEMPCLEANWHITE" ]; then
# Beyaz liste dolu: Temiz DNS üzerinden bağlan ve filtrele
curl -sL "https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts" | \
grep -E "^0.0.0.0" | \
awk '{print $2}' | \
grep -vFf "$TEMPCLEANWHITE" | \
awk '{print " local-zone: \"" $1 "\" always_nxdomain"}' >> "$TEMP_FILE"
else
# Beyaz liste boş: Temiz DNS üzerinden doğrudan indir
curl -sL "https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts" | \
grep -E "^0.0.0.0" | \
awk '{print " local-zone: \"" $2 "\" always_nxdomain"}' >> "$TEMP_FILE"
fi
rm -f "$TEMPCLEANWHITE"
# 2. Güvenlik Kontrolü: İndirilen dosya anlamlı bir boyutta mı?
LINES_COUNT=$(wc -l < "$TEMP_FILE")
if [ "$LINES_COUNT" -lt 100 ]; then
echo "$DATE - [HATA] İndirme başarısız veya liste boş! Mevcut filtre korunuyor." >> "$LOG_FILE"
rm -f "$TEMP_FILE"
# Hata durumunda sistemi tekrar yerel Unbound'a güvenli hale getir
echo "nameserver 127.0.0.1" > /etc/resolv.conf
chattr +i /etc/resolv.conf
exit 1
fi
# 3. Geçici dosyayı canlı sisteme taşı ve eskisini yedekle
cp "$TARGET_FILE" "${TARGET_FILE}.bak" 2>/dev/null
mv "$TEMP_FILE" "$TARGET_FILE"
# 4. Unbound Sözdizimi Kontrolü ve Servis Güncelleme
if unbound-checkconf >/dev/null 2>&1; then
systemctl reload unbound
FILE_SIZE=$(du -sh "$TARGET_FILE" | awk '{print $1}')
W_COUNT=$(sed '/^[[:space:]]*$/d; /^[[:space:]]*#/d' "$WHITELIST_FILE" | wc -l)
echo "$DATE - [BAŞARILI] Filtre güncellendi. Boyut: $FILE_SIZE ($LINES_COUNT satır, $W_COUNT muafiyet)" >> "$LOG_FILE"
rm -f "${TARGET_FILE}.bak"
else
mv "${TARGET_FILE}.bak" "$TARGET_FILE"
systemctl reload unbound
echo "$DATE - [HATA] Unbound konfigürasyon hatası! Yedekten geri dönüldü." >> "$LOG_FILE"
fi
# ========================================================
# SİSTEMİ KALICI OLARAK UNBOUND'A GERİ BAĞLA VE KİLİTLE
# ========================================================
echo "nameserver 127.0.0.1" > /etc/resolv.conf
chattr +i /etc/resolv.conf
# ========================================================
sudo systemctl restart unbound
Hafta da 1 kere
30 3 * * 6 /root/bin/unbound-blacklist.sh >/dev/null 2>&1
Günde 1 kere
00 22 * * * /root/bin/unbound-blacklist.sh >/dev/null 2>&1
# crontab -e
en alta bunu ekle
00 22 * * * /root/bin/unbound-blacklist.sh >/dev/null 2>&1
Kontrol edebilirsiniz.
# crontab -l
$ ping ad.track.us.orgping: ad.track.us.org: İsim çözünürlüğünde geçici başarısızlık$ host ad.track.us.orgHost ad.track.us.org not found: 5(REFUSED)
| CloudFlare Test: | https://1.1.1.1/help/ |
| Adguard Test: | https://adguard.com/tr/test.html |
| Quad9 Test: | https://on.quad9.net/ |
| DNSSEC Test1: | https://wander.science/projects/dns/dnssec-resolver-test/ |
| DNSSEC Test2: | http://www.dnssec-or-not.com/ |
| DNS Leak Test: | https://browserleaks.com/dns |
| Bağlantı Test: | https://internet.nl/connection/ |
| Reklam test1: | https://canyoublockit.com/ |

