Siapkan Server DNS Otoritatif BIND di CentOS 8 / RHEL 8

Siapkan Server DNS Otoritatif BIND di CentOS 8 / RHEL 8

Tutorial ini akan menunjukkan kepada Anda cara mengatur dan menjalankan server nama otoritatif Anda sendiri di CentOS 8 / RHEL 8 dengan perangkat lunak BIND 9 yang banyak digunakan.

Apa Itu Server DNS Resmi?

Jika Anda memiliki nama domain dan ingin server DNS Anda sendiri menangani resolusi nama untuk nama domain Anda alih-alih menggunakan server DNS pencatatan domain Anda, maka Anda perlu menyiapkan server DNS resmi.

Server DNS otoritatif digunakan oleh pemilik nama domain untuk menyimpan catatan DNS. Ini memberikan jawaban otoritatif untuk resolver DNS (seperti 8.8.8.8 atau 1.1.1.1), yang meminta catatan DNS atas nama pengguna akhir di PC, ponsel cerdas, atau tablet

Tentang BIND

BIND (Berkeley Internet Name Domain) adalah perangkat lunak DNS open-source, fleksibel, dan berfitur lengkap yang banyak digunakan di Unix / Linux karena stabilitas dan kualitasnya yang tinggi. Awalnya dikembangkan oleh UC Berkeley, dan kemudian pada tahun 1994, pengembangannya dipindahkan ke Internet Systems Consortium, Inc (ISC).

BIND dapat bertindak sebagai server DNS otoritatif untuk zona dan penyelesai DNS pada saat yang bersamaan. Penyelesai DNS juga dapat disebut server nama rekursif karena ia melakukan pencarian DNS rekursif untuk pengguna akhir. Namun, mengambil dua peran pada saat yang sama tidaklah menguntungkan. Merupakan praktik yang baik untuk memisahkan dua peran pada dua host yang berbeda.

Pada artikel sebelumnya, saya menjelaskan langkah-langkah mengatur resolver DNS lokal di CentOS 8 / RHEL 8 . Tutorial ini akan menunjukkan cara mengatur BIND9 di CentOS 8 / RHEL 8 sebagai server DNS otoritatif dengan rekursi dinonaktifkan.

Prasyarat

Untuk mengikuti tutorial ini, Anda seharusnya sudah membeli nama domain. Saya mendaftarkan nama domain saya di NameCheap karena harganya rendah dan mereka memberikan perlindungan privasi whois gratis seumur hidup.

Anda juga membutuhkan dua server. Satu server untuk server DNS master dan yang lainnya untuk server DNS budak . Idealnya kedua server harus berada di lokasi fisik yang berbeda. Jika satu server DNS sedang offline, server DNS lainnya masih dapat menjawab pertanyaan DNS untuk nama domain Anda.

Setiap server hanya membutuhkan RAM 512MB dan berikut adalah penyedia hosting yang saya rekomendasikan. Saya telah menggunakan semuanya.

  • Vultr: Mulai dari $ 2.5 / bulan. Anda dapat membuat akun di Vultr melalui tautan rujukan saya untuk mendapatkan kredit gratis $ 50.
  • DigitalOcean: Mulai dari $ 5 / bulan. Anda dapat membuat akun di DigitalOcean melalui tautan rujukan saya untuk mendapatkan kredit gratis $ 100.

Perhatikan bahwa Anda perlu menyetor sejumlah kecil ($ 5) untuk memverifikasi bahwa Anda bukan bot, untuk mendapatkan kredit. Setelah Anda membeli dua server, instal CentOS 8 / RHEL 8 di atasnya dan ikuti petunjuk di bawah ini.

Harap dicatat bahwa Anda memerlukan hak akses root saat menginstal perangkat lunak. Anda dapat menambahkan sudo di awal perintah, atau menggunakan su -perintah untuk beralih ke pengguna root.

Siapkan Server DNS Resmi di CentOS 8 / RHEL 8 dengan BIND9

Anda perlu menjalankan perintah di bagian ini di kedua server.

Masuk ke dua server melalui SSH dan jalankan perintah berikut untuk menginstal BIND 9 di server CentOS 8 / RHEL 8 dari repositori default. BIND 9 adalah versi saat ini dan BIND 10 adalah proyek mati.

sudo dnf update
sudo dnf menginstal bind bind-utils

Karena kami menyiapkan server DNS otoritatif, kami perlu menonaktifkan rekursi. Temukan baris berikut di file ini.

rekursi ya;

Ubah nilainya menjadi nountuk menonaktifkan rekursi.

rekursi tidak;

Saya juga merekomendasikan untuk menambahkan arahan berikut dalam optionsklausul.

// sembunyikan nomor versi dari klien untuk alasan keamanan.
versi "saat ini tidak tersedia";

// aktifkan log kueri
querylog ya;

// larang transfer zona
allow-transfer {none; };

tutup file. (Untuk menyimpan file di editor teks Nano, tekan Ctrl+O, lalu tekan Enteruntuk konfirmasi. Untuk keluar, tekan Ctrl+X.)

Kemudian uji sintaks file konfigurasi.

sudo bernama-checkconf

Jika pengujian berhasil (ditunjukkan dengan output diam), mulai ulang named.

sudo systemctl restart bernama

Sekarang kita perlu port 53 di firewall untuk mengizinkan resolver mengirim kueri DNS.

sudo firewall-cmd --permanent --add-port = {53 / udp, 53 / tcp}

Muat ulang firewall agar perubahan diterapkan.

sudo systemctl memuat ulang firewalld

Konfigurasi Master DNS Server

Pilih salah satu dari dua server sebagai server DNS master. Kami akan menamainya ns1.example.com.

Server DNS master menyimpan salinan master dari file zona. Perubahan data DNS dilakukan di server ini. Sebuah domain dapat memiliki satu atau lebih zona DNS. Setiap zona DNS memiliki file zona yang berisi setiap catatan DNS di zona itu. Demi kesederhanaan, artikel ini mengasumsikan bahwa Anda ingin menggunakan satu zona DNS untuk mengelola semua data DNS untuk nama domain Anda.

Secara default, BIND mengaktifkan zona root dan zona localhost. Untuk menambahkan zona untuk nama domain Anda, edit /etc/named.conffile.

sudo nano /etc/named.conf

Tambahkan baris berikut di bagian bawah file ini. Ganti example.comdengan nama domain Anda sendiri. Ganti 12.34.56.78 dengan alamat IP server DNS budak.

zona " example.com " {
      tipe master;
      file "/ var / bernama / bernama. example.com ";
      allow-query {any; };
      izinkan-transfer { 12.34.56.78 ; };
};

Dalam konfigurasi di atas, kami membuat zona baru dengan zoneklausa dan kami menetapkan bahwa ini adalah zona master. File zona adalah /var/named/named.example.com, tempat kami akan menambahkan catatan DNS. Zona ini memungkinkan kueri dari alamat IP mana pun. The allow-querydirektif dalam zona ini akan menimpa global yang allow-querydirektif. Transfer zona hanya akan diizinkan untuk server DNS budak.

Alih-alih membuat file zona dari awal, kita dapat menggunakan file template zona. Salin konten named.emptyke file baru.

sudo cp /var/named/named.empty / var / bernama / bernama. example.com

File zona dapat berisi 3 jenis entri:

  • Komentar : dimulai dengan titik koma (;)
  • Petunjuk : mulailah dengan tanda dolar ($)
  • Resource Records : alias catatan DNS

File zona biasanya terdiri dari jenis data DNS berikut.

  • Catatan SOA (Start of Authority) : mendefinisikan karakteristik kunci dari sebuah zona. Ini adalah catatan DNS pertama di file zona dan wajib.
  • Catatan NS (Server Nama) : menentukan server mana yang digunakan untuk menyimpan data DNS dan menjawab pertanyaan DNS untuk nama domain. Harus ada setidaknya dua data NS dalam file zona.
  • Data MX (Mail Exchanger) : menentukan host mana yang bertanggung jawab atas pengiriman email untuk nama domain.
  • A (Address) record : Mengubah nama DNS menjadi alamat IPv4.
  • Data AAAA (Quad A) : Mengonversi nama DNS menjadi alamat IPv6.
  • Data CNAME (Nama Kanonis) : Digunakan untuk membuat alias untuk nama DNS.
  • Data TXT : SPF, DKIM, DMARC, dll.

Sekarang mari kita edit file zona tersebut.

sudo nano / var / bernama / bernama. example.com

Secara default, ini terlihat seperti ini

Anda dapat mengubahnya menjadi ini sebagai gantinya

Dimana

  • Perintah $TTLtersebut menentukan nilai Time to Live default untuk zona tersebut, yaitu waktu catatan DNS dapat di-cache pada resolver DNS. Arahan ini wajib.
  • The $ORIGINdirektif mendefinisikan domain dasar.
  • Nama domain harus diakhiri dengan titik (.), Yang merupakan domain root. Ketika nama domain diakhiri dengan titik, itu adalah nama domain yang memenuhi syarat (FQDN).
  • Simbol @ merujuk ke domain dasar.
  • INadalah kelas DNS. Itu singkatan dari Internet. Kelas DNS lain ada tetapi jarang digunakan.

Catatan pertama dalam file zona adalah catatan SOA (Start of Authority). Catatan ini berisi informasi berikut:

  • Server DNS master .
  • Alamat email administrator zona . RFC 2142 merekomendasikan alamat email hostmaster@example.com . Di file zona, alamat email ini mengambil bentuk: hostmaster.example.com karena simbol @ memiliki arti khusus di file zona.
  • Nomor seri zona . Nomor seri adalah cara melacak perubahan zona oleh server DNS budak. Menurut konvensi, nomor seri menggunakan format tanggal:, di yyyymmddssmana yyyy adalah nomor tahun empat digit, mm adalah bulan, dd adalah hari, dan ss adalah nomor urut untuk hari itu. Anda harus memperbarui nomor seri ketika ada perubahan pada file zona.
  • Segarkan nilai . Ketika nilai refresh tercapai, server DNS budak akan mencoba membaca catatan SOA dari server DNS master. Jika nomor seri menjadi lebih tinggi, transfer zona dimulai.
  • Coba lagi nilai . Mendefinisikan interval coba lagi jika server DNS budak gagal terhubung ke server DNS master.
  • Kedaluwarsa : Jika server DNS budak telah gagal melakukan kontak dengan server DNS master selama waktu ini, budak akan berhenti merespons permintaan DNS untuk zona ini.
  • TTL cache negatif : Menentukan nilai waktu aktif tanggapan DNS untuk nama DNS yang tidak ada (NXDOMAIN).

Data TXT biasanya diapit tanda kutip ganda. Jika Anda menambahkan data DKIM , Anda juga perlu mengapit nilai dengan tanda kurung.

Simpan dan tutup file. Selanjutnya, kita harus menetapkan namedsebagai pemilik grup dari /var/named/named.example.comfile tersebut, atau diberi nama tidak akan dapat memuat zona ini.

sudo chown root: bernama / var / bernama / bernama. example.com

Kemudian jalankan perintah berikut untuk memeriksa apakah ada kesalahan sintaks di file konfigurasi utama. Output diam menunjukkan tidak ada kesalahan yang ditemukan.

sudo bernama-checkconf

Kemudian periksa sintaks file zona.

sudo bernama-checkzone contoh.com / var / bernama / bernama. example.com

Jika ada kesalahan sintaks di file zona, Anda perlu memperbaikinya, atau zona ini tidak akan dimuat. Pesan berikut menunjukkan tidak ada kesalahan sintaks.

zona example.com/IN: memuat serial 2020111216
baik

Kemudian mulai ulang BIND9.

sudo systemctl restart bernama

Konfigurasi Server DNS Slave

Sekarang kami menggunakan server lain sebagai server DNS budak, yang akan diberi nama ns2.example.com.

Pertama, edit named.conffile.

sudo nano /etc/named.conf

Tambahkan baris berikut di akhir file ini. Ini akan menambah zona budak. Ganti 12.34.56.78 dengan alamat IP dari server DNS master.

zona " example.com " {
        tipe budak;
        file "/ var / bernama / slaves / bernama. example.com ";
        allow-query {any; };
        master { 12.34.56.78 ; };
};

Dalam konfigurasi di atas, kami menetapkan bahwa ini adalah server DNS budak untuk example.comzona tersebut. Zona ini memungkinkan kueri dari alamat IP mana pun. The allow-querydirektif dalam zona ini akan menimpa global yang allow-querydirektif. Ini akan menerima transfer zona hanya dari server DNS master.

Simpan dan tutup file. Kemudian jalankan perintah berikut untuk memeriksa apakah ada kesalahan sintaks di file konfigurasi utama.

sudo bernama-checkconf

Jika tidak ada kesalahan yang ditemukan, mulai ulang BIND9.

sudo systemctl restart bernama

File zona di server DNS budak dimuat dari transfer zona, yang digunakan untuk menyinkronkan perubahan catatan DNS dari server DNS master ke server DNS budak. Setelah BIND9 dimulai ulang, transfer zona akan segera dimulai. Periksa log BIND9 dengan perintah berikut.

sudo journalctl -eu bernama

Anda dapat melihat pesan seperti di bawah ini, yang menunjukkan transfer zona berhasil.

bernama [31518]: transfer 'example.com/IN' dari 12.34.56.78 # 53: Transfer selesai: 1 pesan, 16 catatan, 886 byte, 0,004 detik (221500 byte / detik)

Lebih lanjut tentang Transfer Zona

Server DNS budak akan menghubungi master lagi ketika waktu penyegaran dalam catatan SOA tercapai dan jika nomor seri pada master lebih besar dari pada budak, transfer zona akan dimulai. Ada dua jenis transfer zona:

  • Transfer zona penuh (AXFR): Salinan lengkap file zona ditransfer.
  • Transfer zona inkremental (IXFR): Hanya data DNS yang diubah yang ditransfer.

Kedua jenis transfer zona menggunakan TCP port 53. Secara default, BIND di server DNS budak akan meminta transfer zona tambahan dan BIND di server DNS master hanya akan mengizinkan transfer zona tambahan jika zona tersebut dinamis.

Interval transfer zona merupakan faktor utama dari kecepatan propagasi perubahan data DNS. Alih-alih menunggu server DNS budak untuk melakukan kontak, master BIND akan memberi tahu budak ketika perubahan dibuat ke zona. Hal ini sangat mengurangi waktu untuk menyebarkan perubahan zona ke Internet.

Zona Terbalik

Zona terbalik berisi data PTR yang memetakan alamat IP ke nama DNS. Ini adalah rekanan dari data DNS A. Data PTR sering kali diperlukan server email untuk melewati filter spam. Rekaman ini bukan milik domain. Dikelola oleh organisasi yang memberi Anda alamat IP. Anda perlu membuat catatan PTR di panel kontrol penyedia hosting Anda atau meminta ISP Anda, jadi saya tidak akan membahas pembuatan zona terbalik di BIND.

Ubah NS Record dan Buat Glue Record

Sekarang Anda harus pergi ke situs web pencatatan domain Anda untuk mengubah data NS untuk domain Anda, sehingga Internet akan tahu bahwa Anda sekarang menggunakan server DNS Anda sendiri. Biasanya Anda menggunakan nama host dalam catatan NS seperti ns1.example.comdan ns2.example.com.

server nama 1: ns1.example.com
server nama 2: ns2.example.com

Jika Anda memiliki nama domain example.comdan Anda menggunakan subdomain untuk server DNS otoritatif ( ns1.example.comdan ns2.example.com), maka Anda juga perlu membuat catatan perekat di pencatatan domain Anda, sehingga Internet dapat mengetahui alamat IP dari server DNS Anda. The record lem adalah catatan A untuk ns1.example.comdan ns2.example.com.

ns1.example.com Alamat IP-dari-server-master
ns2.example.com alamat-IP-dari-server-budak

Informasi di atas akan dikirim ke operator registri yang menjalankan server DNS TLD melalui Extensible Provisioning Protocol (EPP), sehingga server DNS TLD mengetahui nama dan alamat IP dari server DNS resmi untuk nama domain Anda.

Setelah lem record dan catatan NS disebarkan ke Internet, server DNS Anda akan menanggapi permintaan DNS untuk nama domain Anda. Anda dapat memeriksa log kueri dengan:

sudo journalctl -eu bernama

Hal yang Perlu Diketahui

  • Istilah master DNS serverhanya menyiratkan bahwa server ini menyimpan salinan master dari file zona. Ini tidak memiliki prioritas yang lebih tinggi dalam hal resolusi DNS.
  • Selalu perbarui nomor seri SOA ketika Anda membuat perubahan pada file zona.

Dinamakan Mulai Ulang Otomatis

Jika karena alasan apa pun proses Bernama Anda mati, Anda perlu menjalankan perintah berikut untuk memulai ulang.

sudo systemctl restart bernama

Alih-alih mengetik perintah ini secara manual, kita dapat membuat Named restart secara otomatis dengan mengedit named.serviceunit layanan systemd. Untuk mengganti konfigurasi layanan systemd default, kami membuat direktori terpisah.

sudo mkdir -p /etc/systemd/system/named.service.d/

Kemudian buat file di bawah direktori ini.

sudo nano /etc/systemd/system/named.service.d/restart.conf

Tambahkan baris berikut di file, yang akan membuat Named restart secara otomatis 5 detik setelah kegagalan terdeteksi.

[Layanan]
Mulai ulang = selalu
RestartSec = 5s

Simpan dan tutup file. Kemudian muat ulang systemd.

sudo systemctl daemon-reload

Untuk memeriksa apakah ini akan berhasil, bunuh Dinamakan dengan:

sudo pkill bernama

Kemudian periksa Status bernama. Anda akan menemukan Named secara otomatis dimulai ulang.

status systemctl bernama

Mengaktifkan Resolver

BIND dapat bertindak sebagai server DNS otoritatif untuk zona dan penyelesai DNS pada saat yang bersamaan. Merupakan praktik yang baik untuk memisahkan dua peran pada dua mesin yang berbeda dan dalam artikel ini kami menonaktifkan resolver di BIND. Jika Anda benar-benar ingin mengaktifkan resolver, ikuti petunjuk di bawah ini.

Edit file konfigurasi BIND.

sudo nano /etc/named.conf

Temukan baris berikut.

rekursi tidak;

Ganti noke yes.

rekursi ya;

Kemudian temukan allow-query { localhost; };garisnya. Anda dapat menambahkan alamat IP tambahan seperti di bawah ini, jadi hanya klien tepercaya yang mengirimkan kueri rekursif ke resolver DNS Anda dan server Anda tidak akan menjadi resolver terbuka.

allow-query {localhost; 12.34.56.78 ; };

Ganti 12.34.56.78 dengan alamat IP Anda sendiri. Simpan dan tutup file. Pastikan definisi zona Anda di /etc/named.conffile memiliki opsi berikut, sehingga Internet bisa meminta data DNS di zona Anda.

allow-query {any; };

Kemudian mulai ulang BIND.

sudo systemctl restart bernama

Buka https://openresolver.com/ untuk menguji apakah server BIND Anda adalah resolver terbuka.

Membungkus

Sekian tutorial kali ini, jika kamu menemui masalah, silahkan tinggalkan komentar