DNS over https pribadi ini merupakan jawaban dari kegundahan saya karena DNS ISP terkadang suka lambat respons, menyensor konten-konten LEGAL yang perlu saya akses seperti reddit (saya tidak memakai reddit untuk pornografi) dan situs komik online. Bahkan jika kita mengganti dns default ke dns over https yang ada seperti dns google dan cloudflare terkadang bs dirouting ke dns isp secara transparan dan paksa. Beberapa orang mungkin memakai VPN, tetapi saya tidak mau memakai VPN karena VPN mengurangi speed internet saya dan saya juga khawatir dengan keamanan data saya karena dengan memakai VPN seluruh data kita akan di routing melalui server pihak ketiga.
Menggunakan DNS Over HTTPS pribadi, kita benar-benar memiliki kendali total terhadap dns resolver kita walaupun data tetap harus lewat ISP lokal. Tutorial ini sebenarnya merupakan catatan pribadi untuk saya sendiri, jadi tidak cocok untuk pemula yang tidak mengerti server management sama sekali, dan tidak akan saya sisipkan gambar-gambar yang bagus.
Untuk membangun server dns over https pribadi, kita memerlukan VPS atau Colocation server dengan public ip static. Saya pribadi menggunakan VPS dengan Ubuntu versi 22.04. Bebas mau pakai server apa saja dan memakai server dilokasi mana saja, tetapi tidak disarankan untuk menaruh server di Indonesia karena disini ISP akan secara otomatis melalukan filtrasi terhadap DNS sesuai peraturan pemerintah.
Instalasi BIND
Jika ubuntu kita belum memiliki DNS server, maka kita harus melakukan instalasi BIND dengan cara sign in ke terminal dan ketik
sudo apt update
kemudian
sudo apt install bind9 bind9utils bind9-dnsutils bind9-doc bind9-host
yang perlul diperhatikan pas instalasi BIND adalah, kita harus mengurangi max-cache-size terutama jika kita menggunakan VPS, karena server BIND akan menggunakan seluruh RAM yang tersedia pada server yang seringkali mengakibatkan error pada VPS.
buka file konfigurasi named di /etc/bind/named.conf.options dengan mengetik
sudo nano /etc/bind/named.conf.options
kemudian add line dibawah (silahkan diubah max percent sesuai keinginan kita)
max-cache-size 50%;
restart named dengan cara mengetik
sudo systemctl restart named
Inslatasi DNSDIST
Setelah instalasi named beres, kita akan instalasi dnsdist. sign in ke terminal dan ketik
sudo apt install dnsdist
kemudian, edit konfigurasi dnsdist dengan cara
sudo nano /etc/dnsdist/dnsdist.conf
untuk saat ini di file ini tidak akan ada konten apa-apa, tambahkan satu line supaya dnsdist membuka port di TCP dan UDP 5353, bukan 53 (karena port default BIND ada di 53)
setLocal("127.0.0.1:5353")
Save dan close file, kemudian restart DNSDIST
sudo systemctl restart dnsdist
Cek statusnya menggunakan perintah
systemctl status dnsdist
Instalasi LETSENCRYPT
DNS Over https, seperti namanya, wajib memiliki sertifikat TLS di server. Dan karena saya memakai VPS khusus untuk resolve dns tanpa ada webserver, maka metode letsencrypt yang saya pakai itu menggunakan metode standalone dengan challenge http.
gunakan perintah dibawah untuk melakukan instalasi letsencrypt
sudo apt install certbot
cek versi certbot yang berhasil kita install
certbot 0.40.0
Gunakan perintah dibawah untuk mendapatkan sertifikat TLS, pastikan anda telah menambahkan A record yang ditunjuk ke IP server kita untuk subdomain tersebut (misalnya doh.rickyosmond.com)
sudo certbot certonly --standalone --preferred-challenges http --agree-tos --email <email kita> -d <domain DOH>
Aktifkan DoH di DNSdist
buka dan edit file konfigurasi DNSdist
sudo nano /etc/dnsdist/dnsdist.conf
Tambahkan konfigurasi dibawah
-- allow query from all IP addresses
addACL('0.0.0.0/0')
-- add a DoH resolver listening on port 443 of all interfaces
addDOHLocal("0.0.0.0:443", "/etc/letsencrypt/live/<domain DOH>/fullchain.pem", "/etc/letsencrypt/live/<domain DOH>/privkey.pem", { "/" }, { doTCP=true, reusePort=true, tcpFastOpenSize=0 })
-- downstream resolver
newServer({address="127.0.0.1:53",qps=5, name="resolver1"})
Setelah disave dan close, kita harus memberikan hak membaca sertifikat TLS untuk user dnsdist dengan perintah dibawah
sudo apt install acl
sudo setfacl -R -m u:_dnsdist:rx /etc/letsencrypt/
kemudian cek konfigurasi apakah sudah benar
sudo dnsdist --check-config
terakhir, restart dnsdist
sudo systemctl restart dnsdist
Seharusnya, dengan langkah diatas, kita telah berhasil menjalankan DNS resolver kita sendiri.
Cara Aktivasi DOH di Windows
- Cari Menu EDIT DNS Settings
- Pada Kolom Preferred DNS, masukkan IP DNS Resolver kita
- Pada Kolom DNS Over Https, pilih On (Manual Template)
- DNS Over Https Template, ketik https://<domain DOH>/
- Alternative harus diisi, masukkan 1.1.1.1 dengan on (automatic template) saja.
untuk security yang lebih kuat, saya mengeblok port 53 di firewall windows, jadi semua request DNS hanya akan melalui DNS Over HTTPS saja dan tidak akan otomatis balik ke unencrypted.
Aktivasi DOH di iOS Iphone atau MAC
Aktivasi DOH di iOS sedikit ribet karena membutuhkan kita membuat file .mobileconfig dan install file tersebut di iOS, tetapi kita bisa menggunakan satu file yang sama untuk semua produk apple.
Copy dan paste text dibawah, ganti ip address dan domain DOH dengan server anda, kemudian save dengan nama .mobileconfig tanpa extension
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PayloadContent</key>
<array>
<dict>
<key>DNSSettings</key>
<dict>
<key>DNSProtocol</key>
<string>HTTPS</string>
<key>ServerAddresses</key>
<array>
<string>12.34.56.78</string>
</array>
<key>ServerURL</key>
<string>https://doh.test.com/</string>
</dict>
<key>PayloadDescription</key>
<string>Configures device to use Encrypted DNS over HTTPS</string>
<key>PayloadDisplayName</key>
<string>My own DNS over HTTPS Resolver</string>
<key>PayloadIdentifier</key>
<string>com.apple.dnsSettings.managed.9d6e5fdf-e404-4f34-ae94-27ed2f636ac4</string>
<key>PayloadType</key>
<string>com.apple.dnsSettings.managed</string>
<key>PayloadUUID</key>
<string>35d5c8a0-afa6-4b36-a9fe-099a997b44ad</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>ProhibitDisablement</key>
<false/>
</dict>
</array>
<key>PayloadDescription</key>
<string>Adds self-hosted DoH resolver to Big Sur and iOS 14 based systems</string>
<key>PayloadDisplayName</key>
<string>My own DNS over HTTPS</string>
<key>PayloadIdentifier</key>
<string>com.example.doh</string>
<key>PayloadRemovalDisallowed</key>
<false/>
<key>PayloadType</key>
<string>Configuration</string>
<key>PayloadUUID</key>
<string>A4475135-633A-4F15-A79B-BE15093DC97A</string>
<key>PayloadVersion</key>
<integer>1</integer>
</dict>
</plist>
Setelah file disave, kirim via email ke email di hp anda, kemudian download, setelah itu masuk ke settings->profile downloaded untuk melakukan instalasi.
Setelah instalasi dilakukan, masuk ke Settings->general->vpn,dns, device management dan pilih DNS resolver yang anda barusan install.
Fine Tuning
Renew TLS Certificate Letsencrypt otomatis
Buka crontab dengan cara
sudo crontab -e
masukkan kode dibawah
@daily certbot renew --quiet; setfacl -R -m u:_dnsdist:rx /etc/letsencrypt/
save dengan cara ctrl+x
Auto restart setiap hari
Buka crontab dengan cara
sudo crontab -e
masukkan kode dibawah
0 20 * * * /sbin/shutdown -r now
save dengan cara ctrl+x
Aktivasi SWAP partition
Ketik command dibawah, ini untuk membuat swapfile 1GB, silahkan ganti secukupnya
sudo fallocate -l 1G /swapfile
ganti hak akses swapfile
sudo chmod 600 /swapfile
aktivasi swapfile dengan perintah dibawah
sudo mkswap /swapfile
sudo swapon /swapfile
backup fstab dengan perintah
sudo cp /etc/fstab /etc/fstab.bak
aktifkan mounting swapfile setiap restart dengan cara dibawah
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Cek apakah partisi swap sudah aktif dengan cara
sudo swapon --show
Blokir ads menggunakan RPZ
Kita juga bisa menambahkan list blokir di DNS resolver kita untuk memblokir otomatis ads.
pertama buka konfigurasi BIND named.conf.options dengan cara mengetik
sudo nano /etc/bind/named.conf.options
tambahkan kode dibawah pada akhir line, tetapi masih didalam };
response-policy {
zone "rpz.local";
};
kemudian buka lagi konfigurasi BIND named.conf.local dengan cara mengetik
sudo nano /etc/bind/named.conf.local
tambahkan kode dibawah pada akhir line konfigurasi
zone "rpz.local" {
type master;
file "/etc/bind/db.rpz.local";
allow-query { localhost; };
allow-transfer { localhost; };
change directory ke /etc/bind kemudian siapkan database blokir yang kita inginkan, saya pribadi mendownload database dari
https://github.com/hagezi/dns-blocklists?tab=readme-ov-file#normal
saya memilih yang normal untuk menghindari server error, terkadang ada beberapa website yang membutuhkan tracker untuk bisa jalan. Jika anda cukup pede bahwa website yang anda akan buka tidak perlu tracker samasekali, silahkan pilih yang lebih ketat
download file RPZ dari github ke server anda dengan cara
sudo wget -P . "https://codeberg.org/hagezi/mirror2/raw/branch/main/dns-blocklis
ts/rpz/multi.txt"
ganti nama file multi.txt yang telah terdownload
sudo mv multi.txt db.rpz.local
Buat satu folder untuk menyimpan log blocklist
sudo mkdir /var/log/named
buka file konfigurasi bind
sudo /etc/named.conf
tambahkan line ini untuk mendapatkan log blokir
logging {
channel rpzlog {
file "/var/log/named/rpz.log" versions unlimited size 10m;
print-time yes;
print-category yes;
print-severity yes;
severity info;
};
category rpz { rpzlog; };
};
Ganti ownership folder log supaya server bind bisa mengakses log
sudo chown bind:bind /var/log/named -R
Cek apakah konfigurasi sudah sesuai dan tidak ada error, dan cek apakah zone yang kita tambahkan sudah sesuai. jika steps diatas dilakukan dengan benar, seharusnya akan keluar OK
sudo named-checkconf
sudo named-checkzone rpz /etc/bind/db.rpz.local
restart BIND
sudo systemctl restart bind9
dengan steps diatas, maka pada saat anda browsing, semua ads akan menghilang.

Leave a Reply