DNS over HTTPS (DoH) dengan Cloudflare

Posted by

Beberapa waktu yang lalu, salah satu Team Excellent ada implementasi terkait dengan migrasi Zimbra Mail Server. Team melakukan remote pada server baru, melakukan beberapa persiapan, dan masuklah pada proses instalasi Zimbra.

Ketika proses instalasi, proses resolv domain terasa lambat. Resolv domain dibutuhkan untuk download dan install package dari repository di internet. Jika dilakukan ping langsung pada IP public, server mendapatkan reply dengan cepat. Namun tidak jika testing pada nama domain secara langsung. Butuh beberapa kali ujicoba hingga akhirnya nama domain dapat diresolv dengan baik

Coba gunakan Open DNS seperti Google (8.8.8.8) dan CloudFlare (1.1.1.1) hasil resolv nya sama. Lambat. Begitu juga dengan testing query via DNS server internal yang disediakan oleh klien.

Asumsi saya, ada pembatasan akses pada port default DNS (udp 53). Untuk mengatasi hal tersebut, akhirnya dicoba menggunakan DoH (DNS over HTTPS) yang disediakan oleh CloudFlare.

Untuk menggunakan layanan DoH tersebut, berikut prosesnya

Download CloudFlared

curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -o /opt/cloudflared-linux-amd64
chmod +x /opt/cloudflared-linux-amd64 

Start DNS Proxy CloudFlare

/opt/cloudflared-linux-amd64 proxy-dns --port 5553

Jika tidak menggunakan port, maka defaultnya akan listen pada port 53. Dikarenakan ada DNS local untuk kebutuhan resolv internal domain pada Zimbra, maka saya menggunakan port custom (5553).

Testing DNS Proxy

dig +short @127.0.0.1 -p5553 cloudflare.com AAAA
dig +short @127.0.0.1 -p5553 imanudin.com A

Contoh output

[root@server]# dig +short @127.0.0.1 -p5553 cloudflare.com AAAA
2606:4700::6810:84e5
2606:4700::6810:85e5
[root@server]# dig +short @127.0.0.1 -p5553 imanudin.com A
104.21.34.160
172.67.163.15
[root@ceph-single srv]# 

Setelah DNS Proxy dapat digunakan, jadikan cloudflared sebagai service untuk memudahkan

sudo tee /etc/systemd/system/cloudflared-proxy-dns.service >/dev/null <<EOF
[Unit]
Description=DNS over HTTPS (DoH) proxy client
Wants=network-online.target nss-lookup.target
Before=nss-lookup.target
[Service]
AmbientCapabilities=CAP_NET_BIND_SERVICE
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
DynamicUser=yes
ExecStart=/opt/cloudflared-linux-amd64 proxy-dns --port 5553
[Install]
WantedBy=multi-user.target
EOF

Reload Daemon

systemctl daemon-reload

Tambahkan 127.0.0.1 sebagai nameserver kedua. Contohnya seperti berikut

[root@server]# cat /etc/resolv.conf 
search imanudin.web.id
nameserver 192.168.1.30
nameserver 127.0.0.1
nameserver 8.8.8.8

Buat rule iptables agar melakukan redirect query port 53 ke port 5553

iptables -t nat -A OUTPUT -d 127.0.0.1 -p udp --dport 53 -j REDIRECT --to-port 5553

Agar konfigurasi iptables persistent, install iptables-service

Ubuntu

apt install iptables-persistent
netfilter-persistent save
systemctl enable netfilter-persistent
systemctl restart netfilter-persistent

CentOS/Rocky Linux

yum install iptables-services
service iptables save
systemctl enable iptables
systemctl restart iptables

Silakan dicoba dan semoga bermanfaat 🙂

Leave a Reply

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.