Proses Instalasi Server DNS ISC BIND di FreeBSD

Terbit: Perbarui:
Tags


Setiap hari, jutaan perangkat berkomunikasi dengan server DNS. Sering kali, pengguna tidak menyadari bahwa setiap nama domain yang kita akses berasal dari root zone (zona akar). Keberadaan root zone sangatlah krusial; jika root zone dihapus, internet tidak akan berfungsi karena akses ke server DNS menjadi tidak tersedia.

Sebagai bagian dari konfigurasi server DNS, Anda juga dapat membuat dan mengonfigurasi root zone internal untuk lingkungan tertentu. Saat kita membuatnya secara manual, fitur DNS forwarding dan DNS Root Hints yang berfungsi menyelesaikan kueri DNS eksternal akan dinonaktifkan secara otomatis. Dengan cara inilah kita dapat mencegah resolusi nama eksternal melalui penggunaan root zone internal.

Root zone merupakan titik awal bagi semua kueri DNS. Memahami perannya sangatlah penting saat melakukan pemecahan masalah (troubleshooting) dan memahami proses resolusi DNS. Setelah dibuat, root zone akan bertindak sebagai zona induk (parent zone) bagi semua zona lainnya.

Artikel ini menjelaskan langkah-langkah untuk membuat root zone lokal yang ditandatangani (signed) serta mengonfigurasi DNSSEC. Tutorial ini memerlukan pemahaman mengenai konsep DNS dan pengetahuan dasar tentang DNSSEC. Kita akan menggunakan FreeBSD 14 untuk mengonfigurasi root zone dengan DNSSEC pada server DNS BIND.

A. Apa itu Root Zone dan Mengapa Hal Ini Penting?

Nama domain dibaca dari kanan ke kiri; segmen paling kanan mewakili tingkat domain yang paling umum (TLD), sedangkan segmen paling kiri mewakili tingkat domain yang paling spesifik. Kueri DNS mengikuti logika yang sama. Saat kueri dilakukan, resolver DNS memulai prosesnya dari Root Zone, lalu beralih ke Top-Level Domain (TLD), dan akhirnya mencapai subdomain atau host tertentu.

Perhatikan analogi berikut: jika "unixwinbsd.site" merupakan properti di dalam domain ".site" yang lebih luas, maka linuxfoundation.org adalah properti di dalam ".org." Dalam hal ini, Root Zone berfungsi layaknya Bumi setiap domain, terlepas dari tingkat spesifikasinya, pada akhirnya merupakan bagian dari Root Zone.

diagram perbandingan struktur dns

Sebagai contoh, saat Anda mencari "facebook.com," kueri dimulai dari Root Zone, berlanjut melalui TLD ".com," dan kemudian mencapai subdomain spesifik "facebook." Secara teknis, Root Zone menyimpan daftar semua TLD. Sebagaimana dibahas dalam pelajaran sebelumnya, zona DNS mendelegasikan wewenang dan tanggung jawab atas sekelompok nama domain kepada organisasi tertentu. Sebagai contoh, VeriSign mengelola TLD ".com." Sementara itu, Root Zone sendiri dikelola oleh IANA (Internet Assigned Numbers Authority) di bawah naungan ICANN (Internet Corporation for Assigned Names and Numbers). Anggaplah ICANN sebagai badan pengatur global yang memastikan kelancaran operasional infrastruktur penamaan internet. Tugas IANA adalah memelihara data yang akurat dan aman mengenai setiap top-level domain. Peran sentral yang krusial ini mirip dengan mengelola buku alamat global.

internet root zone management diagram

Ada beberapa keuntungan menjalankan Root Server secara lokal:

  • Zona Root memuat semua server nama TLD beserta alamat IP-nya. Hal ini memungkinkan resolver DNS untuk melewati kueri awal ke Root Server dan langsung melakukan kueri ke server nama TLD, sehingga menghemat waktu.
  • Karena zona Root berjalan secara lokal, kueri untuk nama top-level domain (TLD) yang tidak ada akan diselesaikan secara lokal.
  • Hal ini juga meningkatkan ketahanan sistem karena zona Root berada di tingkat lokal, sehingga tidak bergantung secara langsung pada Root Server untuk resolusi rekursif.

Ada beberapa kekurangan dalam menjalankan Root Server secara lokal:

  • Jika terdapat pembaruan pada zona Root, perubahan tersebut akan membutuhkan waktu sedikit lebih lama untuk tersinkronisasi dengan zona Root lokal Anda. Meskipun demikian, hal ini seharusnya tidak menimbulkan masalah yang berarti.
  • Jika zona Root lokal Anda tidak diperbarui karena alasan apa pun dan hal tersebut tidak terdeteksi, zona tersebut akan kedaluwarsa setelah 7 hari (sesuai dengan masa kedaluwarsa SOA Root). Kondisi ini dapat menyebabkan kegagalan pada beberapa resolver DNS dalam menyelesaikan kueri saat cache kedaluwarsa. Namun, Technitium DNS Server akan beralih menggunakan root hints dalam situasi seperti itu.

Dengan mempertimbangkan kelebihan dan kekurangannya, memiliki zona Root secara lokal merupakan langkah yang baik bagi resolver rekursif.

B. Proses Instalasi ISC Bind DNS Server pada FreeBSD

Untuk menggunakan root zone, Anda perlu menginstal server DNS. Anda dapat memilih salah satu dari aplikasi server DNS yang tersedia. Dalam artikel ini, kita akan menggunakan aplikasi ISC Bind sebagai server DNS. Untuk menginstal ISC Bind pada FreeBSD 14, Anda dapat menggunakan sistem ports atau paket PKG. Berikut adalah contoh instalasi ISC Bind beserta dependensinya menggunakan paket PKG.

root@ns3:~ # pkg install bind-tools pkgconf gmake autoconf automake libtool libnghttp2 libuv libidn2 lmdb libxml2 libedit libxkbcommon libxslt wayland protobuf

Versi ISC Bind yang kami gunakan adalah bind918; jalankan perintah di bawah ini untuk menginstal ISC Bind.

root@ns3:~ # pkg install bind918

Setelah menginstal ISC Bind, Anda perlu mengonfigurasinya. Artikel ini tidak membahas cara mengonfigurasi server DNS Bind. Anda dapat membaca artikel kami sebelumnya, Mengonfigurasi ISC Bind DNS sebagai Frontend dan Unbound sebagai Backend untuk Caching dan Forwarding dan Cara Mengaktifkan DNSSEC pada Server DNS BIND di FreeBSD.

C. Pengaturan Zona Akar/root dengan DNSSEC

Zona root tersedia dari server DNS ICANN melalui transfer zona (AXFR-over-TCP):

  • xfr.cjr.dns.icann.org (192.0.47.132, 2620:0:2830:202::132)
  • xfr.lax.dns.icann.org (192.0.32.132, 2620: 0: 2d0: 202:: 132)

Server root berikut juga mendukung transfer zona (AXFR-over-TCP):

  • b.root-servers.net (199.9.14.201, 2001:500:200::b)
  • c.root-servers.net (192.33.4.12, 2001:500:2::c)
  • d.root-servers.net (199.7.91.13, 2001: 500: 2d:: d)
  • f.root-servers.net (192.5.5.241, 2001: 500: 2f:: f)
  • g.root-servers.net (192.112.36.4, 2001:500:12::d0d)
  • k.root-servers.net (193.0.14.129, 2001: 7fd:: 1)

c.1. Unduh File named.root

Anda dapat mengunduh salah satu sumber zona akar yang tercantum di atas. Di bawah ini adalah perintah yang digunakan untuk mengunduh zona root.

root@ns3:~ # mkdir -p /usr/local/etc/namedb/root
root@ns3:~ # cd /usr/local/etc/namedb/root
root@ns3:/usr/local/etc/namedb/root #

Perintah di atas digunakan untuk membuat direktori bagi zona root. Setelah itu, Anda dapat langsung mengunduh zona root tersebut.

root@ns3:/usr/local/etc/namedb/root # dig @xfr.cjr.dns.icann.org . axfr +onesoa | grep -v DNSKEY > named.root
root@ns3:/usr/local/etc/namedb/root # dig @xfr.lax.dns.icann.org . axfr +onesoa | grep -v DNSKEY > named.root

or

root@ns3:/usr/local/etc/namedb/root # dig @k.root-servers.net . axfr +onesoa | grep -v DNSKEY > named.root
root@ns3:/usr/local/etc/namedb/root # dig @f.root-servers.net . axfr +onesoa | grep -v DNSKEY > named.root

Anda dapat memilih salah satu contoh perintah di atas, tetapi perhatikan "titik" setelah org dan net. Titik ini mewakili zona akar. Dari contoh perintah di atas, kami lebih memilih menggunakan root server f.root-servers.net.

Anda dapat memeriksa zona root yang diunduh dengan perintah berikut.

root@ns3:/usr/local/etc/namedb/root # named-checkzone . named.root

c.2. Aktifkan DNSSEC untuk zona root

Kami menyarankan Anda mengaktifkan DNSSEC untuk zona akar yang diunduh. Selanjutnya, kita membuat Zone-Signing-Key (ZSK) baru dan Key-Signing-Key (KSK) untuk root zone. Langkah yang harus Anda lakukan adalah membuat direktori key untuk root zone.

root@ns3:/usr/local/etc/namedb/root # mkdir -p /usr/local/etc/namedb/keys/root
root@ns3:/usr/local/etc/namedb/root # cd /usr/local/etc/namedb/keys/root
root@ns3:/usr/local/etc/namedb/keys/root #

Kemudian, Anda menjalankan perintah untuk membuat kunci ZSK dan KSK.

root@ns3:/usr/local/etc/namedb/keys/root # dnssec-keygen -K /usr/local/etc/namedb/keys/root/ -a RSASHA256 -b 2048 -n ZONE .
root@ns3:/usr/local/etc/namedb/keys/root # dnssec-keygen -K /usr/local/etc/namedb/keys/root/ -a RSASHA256 -b 4096 -f KSK  -n ZONE .

Setelah Anda membuat kunci ZSK dan KSK, salin kunci-kunci tersebut ke dalam file named.root.

root@ns3:/ # cat /usr/local/etc/namedb/keys/root/K.+008+*.key >> /usr/local/etc/namedb/root/named.root

Kemudian, jalankan perintah di bawah ini.

root@ns3:~ # dnssec-signzone -o . -t -R -S -K /usr/local/etc/namedb/keys/root/ /usr/local/etc/namedb/root/named.root
dnssec-signzone: warning: /usr/local/etc/namedb/root/named.root:24860: using RFC1035 TTL semantics
Verifying the zone using the following algorithms:
- RSASHA256
Zone fully signed:
Algorithm: RSASHA256: KSKs: 1 active, 0 stand-by, 0 revoked
                      ZSKs: 1 active, 0 stand-by, 0 revoked
/usr/local/etc/namedb/root/named.root.signed
Signatures generated:                     2791
Signatures retained:                         0
Signatures dropped:                       2788
Signatures successfully verified:            0
Signatures unsuccessfully verified:          0
Signing time in seconds:                 4.911
Signatures per second:                 568.249
Runtime in seconds:                      5.701
root@ns3:~ #

Perintah di atas akan menghasilkan file baru bernama "named.root.signed". Periksa file tersebut dengan perintah "named-checkzone".

root@ns3:/ # named-checkzone . /usr/local/etc/namedb/root/named.root.signed

c.3. Memodifikasi File named.conf

Sebelum Anda menyunting berkas /usr/local/etc/namedb/named.conf, hapus terlebih dahulu berkas root zone bawaan FreeBSD, yaitu "named.root".

root@ns3:/ # rm -f /usr/local/etc/namedb/named.root

Kemudian, buka file /usr/local/etc/namedb/named.conf dan cari baris zone "." { type hint; file "/usr/local/etc/namedb/named.root"; };. Anda harus mengganti baris tersebut dengan baris di bawah ini.

zone "." {
        type master;
        file "/usr/local/etc/namedb/root/named.root.signed";
        key-directory "/usr/local/etc/namedb/keys/root";
        inline-signing yes;
};

Untuk mengaktifkan zona root, Anda harus memulai ulang server DNS.

root@ns3:/ # service named restart

Saatnya memeriksa konfigurasi BIND dan semua file zona:

root@ns3:/ # named-checkconf -z
root@ns3:~ # named-checkconf /usr/local/etc/namedb/named.conf
root@ns3:~ # named-checkzone . /usr/local/etc/namedb/root/named.root.signed

Jika named-checkconf dan named-checkzone tidak melaporkan adanya kesalahan, berarti zona root yang Anda konfigurasi sudah aktif dan dapat digunakan.

D. Membuat trust-anchors

Trust anchor adalah kunci yang ditempatkan pada resolver validator agar validator tersebut dapat memverifikasi hasil permintaan tertentu dengan mencocokkannya terhadap kunci publik yang diketahui atau tepercaya (yaitu trust anchor itu sendiri). Sebuah resolver validator harus memiliki setidaknya satu trust anchor yang terpasang agar dapat melakukan validasi DNSSEC.

Untuk membuat trust anchor, Anda harus menghapus file bind.keys lalu membuatnya kembali. Sebelum menghapus file bind.keys, periksa kunci KSK dan DS di zona root. Berikut adalah cara melihat kunci-kunci tersebut.

Catatan: Kunci KSK yang harus Anda gunakan untuk membuat trust anchor.

root@ns3:/usr/local/etc/namedb/keys/root # ls -la
total 37
drwxr-xr-x  2 root wheel   10 Jul 25 18:35 .
drwxr-xr-x  4 root wheel    4 Jul 25 14:46 ..
-rw-r--r--  1 root wheel  584 Jul 25 14:47 K.+008+50040.key
-rw-------  1 root wheel 1776 Jul 25 14:47 K.+008+50040.private
-rw-r--r--  1 root wheel  929 Jul 25 14:47 K.+008+53054.key
-rw-------  1 root wheel 3316 Jul 25 14:47 K.+008+53054.private
root@ns3:/usr/local/etc/namedb/keys/root #

Pada perintah ls di atas, berkas K.+008+53054.key memuat kunci KSK. Sekarang, mari kita lihat isi berkas K.+008+53054.key tersebut.

root@ns3:~ # cat /usr/local/etc/namedb/keys/root/K.+008+53054.key
; This is a key-signing key, keyid 53054, for .
; Created: 20250725074726 (Fri Jul 25 14:47:26 2025)
; Publish: 20250725074726 (Fri Jul 25 14:47:26 2025)
; Activate: 20250725074726 (Fri Jul 25 14:47:26 2025)
. IN DNSKEY 257 3 8 AwEAAfoKpuqhYTiRxbDLkbdXwtS4ipRxMUtS9V+8oOp7EDg9aK+rQboj 4ymgsq+QBC2VyET7jkgY9uE37mKYS/s8Hu5vLx8UgS+Xw9mz01vq9stl EXpv7r8uYc6nWH11IRWJTVHnZf9bM9vtJzQ4xPIYWO04CVz4XCK0AlKv ZzLyKWZ/fFwRZMRDrYNht5/MtAzKIixFMAr1s1f9m7IlM7CUlcclfFOZ wYIuxK/TtepbvZuPgdrwt87WuC1bZqvl4t4eRngEoQM420tSQJuLSWjf P1YxQ2ju3Qu/OFSNvpFJJk6O7Rw6RFrnoBcf3gcXlL7ApjY6b2xZkoDV y+Fw78ZxIKA/2scK/uYyyFST/QV06LbBUiJrG+VSbY4m9KQvn9uimdzc wIYapPes7U6NiXZ7Iyrvs7KxnD8R3KIFz1y5vqItRGdtVbXWhz1NaSf3 fbaBDuLJX27Pa8rajncwleym8sdGgaLHitYemgqy1WDrU/PoIpn0YrrU S2Jz4JTo3d5qUjI/zE8GvfhcpkhsclysOWT9/r5vVTqvmghHwkXSpDsM U85l3pHuwVcIg91DsqWCt0VcEVPZCXby7za4/P9jJM/6Ewkpof8y9mpy 5nKTUmOHtTd6GEHlKCmTVdPICK9pCqNIFEvOJspwCxyfJDroW6mRF8C+ 4F8G7cXIfN5fJYnR
root@ns3:~ #

Setelah itu, kita melihat kunci DS dari zona root.

Catatan: Kunci KSK yang harus Anda gunakan untuk menghasilkan kunci DS.

root@ns3:~ # dnssec-dsfromkey /usr/local/etc/namedb/keys/root/K.+008+53054.key
. IN DS 53054 8 2 9B35E2D6EE36733B5D1506892293A87DE0C28A595D1F3A9A224B9384917A9D5B

Sekarang kita mulai memasukkan kunci KSK dan DS ke dalam file bind.keys.

root@ns3:~ # rm -f /usr/local/etc/namedb/bind.keys
root@ns3:~ # touch /usr/local/etc/namedb/bind.keys
root@ns3:~ # chown -R root:bind /usr/local/etc/namedb/bind.keys
root@ns3:~ # chmod -R 640 /usr/local/etc/namedb/bind.keys

Setelah itu, pada file /usr/local/etc/namedb/bind.keys, masukkan kunci KSK dan DS yang telah Anda buat sebelumnya. Perhatikan contoh isi file skrip /usr/local/etc/namedb/bind.keys di bawah ini.

trust-anchors {

. initial-key 257 3 8 "AwEAAfoKpuqhYTiRxbDLkbdXwtS4ipRxMUtS9V+8oOp7EDg9aK+rQboj 4ymgsq+QBC2VyET7jkgY9uE37mKYS/s8Hu5vLx8UgS+Xw9mz01vq9stl EXpv7r8uYc6nWH11IRWJTVHnZf9bM9vtJzQ4xPIYWO04CVz4XCK0AlKv ZzLyKWZ/fFwRZMRDrYNht5/MtAzKIixFMAr1s1f9m7IlM7CUlcclfFOZ wYIuxK/TtepbvZuPgdrwt87WuC1bZqvl4t4eRngEoQM420tSQJuLSWjf P1YxQ2ju3Qu/OFSNvpFJJk6O7Rw6RFrnoBcf3gcXlL7ApjY6b2xZkoDV y+Fw78ZxIKA/2scK/uYyyFST/QV06LbBUiJrG+VSbY4m9KQvn9uimdzc wIYapPes7U6NiXZ7Iyrvs7KxnD8R3KIFz1y5vqItRGdtVbXWhz1NaSf3 fbaBDuLJX27Pa8rajncwleym8sdGgaLHitYemgqy1WDrU/PoIpn0YrrU S2Jz4JTo3d5qUjI/zE8GvfhcpkhsclysOWT9/r5vVTqvmghHwkXSpDsM U85l3pHuwVcIg91DsqWCt0VcEVPZCXby7za4/P9jJM/6Ewkpof8y9mpy 5nKTUmOHtTd6GEHlKCmTVdPICK9pCqNIFEvOJspwCxyfJDroW6mRF8C+ 4F8G7cXIfN5fJYnR";

. initial-ds 53054 8 2 "9B35E2D6EE36733B5D1506892293A87DE0C28A595D1F3A9A224B9384917A9D5B";

};

Tanda titik pada . initial-key dan . initial-ds menunjukkan bahwa zone yang digunakan adalah root zone.

Mulai ulang server DNS Anda, dan prosesnya pun selesai.

Anda bebas memilih server root zone mana pun; saya pribadi lebih memilih menggunakan server root zone OPENNIC.

Secara teknis, server root DNS tidaklah istimewa. Terlepas dari posisinya yang istimewa, server ini tidak berbeda dengan resolver otoritatif lainnya. Jika server root yang sedang digunakan mengalami gangguan, Anda cukup mengonfigurasi dan "mempromosikan" klaster lain untuk menggantikannya.

Proses konfigurasi dan "promosi" ini juga tergolong sederhana, karena memanfaatkan perangkat lunak dan data yang sudah ada. Oleh karena itu, tidak perlu khawatir akan dampak besar akibat gangguan pada server root DNS.