Panduan DNS over HTTPS Pribadi untuk Kontrol Total

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.


Posted

in

by

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *