PowerDNS - Authoritative Server Sebagai Recursor Untuk Client dan Melayani Public Domains
Pada artikel ini saya akan melakukan konfigurasi DNS Server (PowerDNS) Authoritative Server agar berfungsi sebagai recursor untuk client dan sekaligus melayani public domains
Simpel nya pada konfigurasi di artikel ini adalah kita mengubah port PowerDNS Server (Authoritative Server) agar berjalan di port 5300.
Kemudian menambahkan DNS Recursor (Untuk melayani public domains) dan berjalan di port 5301 dan
dnsdist sebagai server depan yang berjalan di port 53.
Sehingga nantinya dnsdist ini yang akan meneruskan query dari user ke DNS Recursor
setelah di DNS Recursor kita akan cek apakah query yang di minta sama dengan salah satu private zone, jika iya teruskan ke
Authoritative Server, namun jika bukan teruskan ke Recursor Public atau Upstream seperti Google (8.8.8.8) dan Cloudflare (1.1.1.1)
Perlu di ingat juga, dikarenakan pada pembahasan sebelumnya saya sudah melakukan konfigurasi master dan slave, maka pada artikel kali ini juga saya masih menggunakan konfigurasi yang sama yaitu Master dan Slave.
Pada skenario kali ini saya menggunakan package atau service dengan versi:
dnsdist 1.6.1
PowerDNS Authoritative Server 4.5.3
PowerDNS Recursor 4.6.0
Dan masing-masing package atau service tersebut berjalan pada port yang berbeda, yaitu:
Sebelum melakukan konfigurasi yang akan kita mulai, kita perlu melakukan instalasi terhadap package-package yang akan digunakan, berikut adalah perintah atau command untuk melakukan instalasi package tersebut menggunakan distro linux Ubuntu
Catatan:
Artikel ini merupakan lanjutan dari seri mengenai PowerDNS dan juga DNS, sehingga alangkah baiknya kalian membaca terlebih dahulu mengenai artikel-artikel berikut
Lakukan backup konfigurasi berikut di kedua server, baik itu di primary/master dan juga di secondary/slave
Seperti sebelumnya, alangkah baiknya kita melakukan backup konfigurasi terlebih dahulu sebelum melakukan perubahan. Sehingga jika nantinya kita ingin kembali ke konfigurasi sebelumnya kita cukup mengganti konfigurasi dengan backup an nya.
Perhatikan beberapa konfigurasi dibawah ini, kalian harus menyesuaikannya dengan konfigurasi server kalian
gmysql-host, gmysql-port, gmysql-dbname, gmysql-user, gmysql-password, local-address, api-key, webserver-address, webserver-allow-from, webserver-password, allow-axfr-ips, allow-notify-from, also-notify
Setelah melakukan konfigurasi PowerDNS Server, langkah selanjutnya adalah melakukan konfigurasi PowerDNS Recursor
bash
sudo vim /etc/powerdns/recursor.conf
Setelah itu, masukan konfigurasi berikut ini:
Catatan:
Perhatikan beberapa konfigurasi dibawah ini, kalian harus menyesuaikannya dengan konfigurasi server kalian
allow-from, forward-zones, local-address, api-key, webserver-address, webserver-allow-from, webserver-password, api-key
Setelah melakukan konfigurasi PowerDNS Server dan PowerDNS Recursor, selanjutnya kita lakukan konfigurasi dnsdist sebagai service utama yang akan di hit ketika query dns dijalankan ke server kita. Karena dnsdist disini berjalan di port 53.
bash
sudo vim /etc/dnsdist/dnsdist.conf
Setelah itu, masukan konfigurasi berikut ini:
Catatan:
Perhatikan beberapa konfigurasi dibawah ini, kalian harus menyesuaikannya dengan konfigurasi server kalian
addLocal(), recursive_ips:addMask(), makeRule({}), webserver()
/etc/dnsdist/dnsdist.conf
setLocal('127.0.0.1:53')addLocal('<YOUR_IP_PRIVATE>:53')addLocal('<YOUR_IP_PUBLIC>:53')-- Allow all IPs accesssetACL({ '0.0.0.0/0', '::/0'})newServer({ address='127.0.0.1:5300', name='Authoritative', pool='auth',})newServer({ address='127.0.0.1:5301', name='Recursor', pool='recursor',})recursive_ips = newNMG()recursive_ips:addMask('127.0.0.0/8') -- These network masks are the ones from allow-recursion in the Authoritative Serverrecursive_ips:addMask('<YOUR_IP_PRIVATE_NETWORK/MASK>')recursive_ips:addMask('<YOUR_IP_PUBLIC_NETWORK/MASK>')all_ips = newNMG()all_ips:addMask('0.0.0.0/0')addAction( AndRule({ OrRule({ QTypeRule(DNSQType.SOA), QTypeRule(DNSQType.NS), QTypeRule(DNSQType.AXFR), QTypeRule(DNSQType.IXFR) }), makeRule({ "127.0.0.1", "<YOUR_IP_PRIVATE>", "<YOUR_IP_PUBLIC>", "<YOUR_IP_SLAVE>", }) }), PoolAction("auth"))addAction(NetmaskGroupRule(recursive_ips), PoolAction('recursor'))addAction(NetmaskGroupRule(all_ips), PoolAction('auth'))pc = newPacketCache(2000000, {maxTTL=86400, minTTL=0, temporaryFailureTTL=60, staleTTL=60, dontAge=true})getPool("auth"):setCache(pc)pc1 = newPacketCache(2000000, {maxTTL=86400, minTTL=0, temporaryFailureTTL=60, staleTTL=60, dontAge=false})getPool("recursor"):setCache(pc)webserver( "<YOUR_IP_PRIVATE>:8083", "<YOUR_WEBSERVER_USERNAME>", "<YOUR_WEBSERVER_PASSWORD>", {}, "<YOUR_IP_PRIVATE_NETWORK/MASK>")
Konfigurasi tersebut artinya adalah hanya menginzinkan list ip address recursive yang akan diberi pelayanan recursor public
sehingga selain dari ip address tersebut akan di arahkan ke pool auth (Authoritative Server) sehingga jika orang lain
atau network selain dari kita menggunakan DNS Server yang kita buat, dia tidak akan resolve ketika query public domain
karena akan di belokan ke Authoritative Server
Setelah semua konfigurasi tersimpan selanjutnya lakukan restart service agar konfigurasi tersebut digunakan, untuk melakukan restart service gunakan perintah berikut ini:
Setelah sebelumnya melakukan konfigursai di sisi Primary/Master, selanjutnya disini kita akan melakukan konfigurasi di sisi Secondary/Slave. Untuk langkah pertama sama seperti ketika konfigurasi Primary/Master yaitu melakukan perubahan terhadap PowerDNS Server nya terlebih dahulu dengan cara membuat file konfigurasi nya.
Perhatikan beberapa konfigurasi dibawah ini, kalian harus menyesuaikan dengan konfigurasi server kalian
gmysql-host, gmysql-port, gmysql-dbname, gmysql-user, gmysql-password, local-address,
api-key, webserver-allow-from, webserver-password, allow-dnsupdate-from, allow-notify-from,
trusted-notification-proxy, default-soa-content
Setelah melakukan konfigurasi PowerDNS Server, langkah selanjutnya adalah melakukan konfigurasi PowerDNS Recursor
bash
sudo vim /etc/powerdns/recursor.conf
Setelah itu, masukan konfigurasi berikut ini:
Catatan:
Perhatikan beberapa konfigurasi dibawah ini, kalian harus menyesuaikan dengan konfigurasi server kalian
allow-from, forward-zones, local-address, webserver-allow-from, webserver-password, api-key
Setelah melakukan konfigurasi PowerDNS Server dan PowerDNS Recursor, selanjutnya kita lakukan konfigurasi dnsdist sebagai service utama yang akan di hit ketika query dns dijalankan ke server kita. Karena dnsdist disini berjalan di port 53.
bash
sudo vim /etc/dnsdist/dnsdist.conf
Setelah itu, masukan konfigurasi berikut ini:
Catatan:
Perhatikan beberapa konfigurasi dibawah ini, kalian harus menyesuaikannya dengan konfigurasi server kalian
addLocal(), recursive_ips:addMask(), makeRule({}), webserver()
/etc/dnsdist/dnsdist.conf
setLocal('127.0.0.1:53')addLocal('<YOUR_IP_PRIVATE>:53')addLocal('<YOUR_IP_PUBLIC>:53')-- Allow all IPs accesssetACL({ '0.0.0.0/0', '::/0'})newServer({ address='127.0.0.1:5300', name='Authoritative', pool='auth',})newServer({ address='127.0.0.1:5301', name='Recursor', pool='recursor',})recursive_ips = newNMG()recursive_ips:addMask('127.0.0.0/8') -- These network masks are the ones from allow-recursion in the Authoritative Serverrecursive_ips:addMask('<YOUR_IP_PRIVATE_NETWORK/MASK>')recursive_ips:addMask('<YOUR_IP_PUBLIC_NETWORK/MASK>')all_ips = newNMG()all_ips:addMask('0.0.0.0/0')addAction( AndRule({ OpcodeRule(DNSOpcode.Notify), NotRule(makeRule("<YOUR_IP_MASTER>")) }), RCodeAction(DNSRCode.REFUSED))addAction(NetmaskGroupRule(recursive_ips), PoolAction('recursor'))addAction(NetmaskGroupRule(all_ips), PoolAction('auth'))pc = newPacketCache(2000000, {maxTTL=86400, minTTL=0, temporaryFailureTTL=60, staleTTL=60, dontAge=true})getPool("auth"):setCache(pc)pc1 = newPacketCache(2000000, {maxTTL=86400, minTTL=0, temporaryFailureTTL=60, staleTTL=60, dontAge=false})getPool("recursor"):setCache(pc)webserver( "<YOUR_IP_PRIVATE>:8083", "<YOUR_WEBSERVER_USERNAME>", "<YOUR_WEBSERVER_PASSWORD>", {}, "<YOUR_IP_PRIVATE_NETWORK/MASK>")
Setelah semua konfigurasi tersimpan selanjutnya lakukan restart service agar konfigurasi tersebut digunakan, untuk melakukan restart service gunakan perintah berikut ini:
Setelah konfigurasi diatas diterapkan, maka saat ini dns server anda dapat melayani public domain hanya untuk list ip address yang di sesuaikan pada dnsdist, dan apabila terdapat konfigurasi private zone maka akan diarahkan ke Authoritative Server melalui PowerDNS Recursor.
Selain dari list ip address yang disesuaikan dnsdist maka akan diarahkan langsung ke Authoritative Server, sehingga apabila ada orang lain
yang menggunakan DNS server kita, maka tidak akan resolve.