Tutorial ini akan menunjukkan kepada Anda cara mengatur resolver DNS lokal di Ubuntu 20.04, dengan perangkat lunak DNS BIND9 yang banyak digunakan. Penyelesai DNS dikenal dengan banyak nama, beberapa di antaranya tercantum di bawah ini. Mereka semua mengacu pada hal yang sama.
- penyelesai penuh (berbeda dengan penyelesai rintisan)
- Rekursor DNS
- server DNS rekursif
- resolver rekursif
Perlu diketahui juga bahwa Server DNS juga dapat disebut server nama. Contoh resolver DNS adalah 8.8.8.8 (server DNS publik Google) dan 1.1.1.1 (server DNS publik Cloudflare). OS di komputer Anda juga memiliki resolver, meskipun disebut stub resolver karena kemampuannya yang terbatas. Penyelesai rintisan adalah klien DNS kecil di komputer pengguna akhir yang menerima permintaan DNS dari aplikasi seperti Firefox dan meneruskan permintaan ke penyelesai rekursif. Hampir setiap resolver dapat men-cache respons DNS untuk meningkatkan kinerja, sehingga mereka juga disebut caching DNS server.
Mengapa Menjalankan Penyelesai DNS Lokal Anda Sendiri
Biasanya, komputer atau router Anda menggunakan resolver DNS ISP untuk menanyakan nama DNS, jadi mengapa menjalankan resolver DNS lokal?
- Ini dapat mempercepat pencarian DNS, karena resolver DNS lokal hanya mendengarkan permintaan DNS Anda dan tidak menjawab permintaan DNS orang lain, sehingga Anda memiliki peluang yang jauh lebih tinggi untuk mendapatkan jawaban DNS langsung dari cache di resolver. Latensi jaringan antara komputer Anda dan resolver DNS dihilangkan (hampir nol), sehingga kueri DNS dapat dikirim ke server DNS root lebih cepat.
- Jika Anda menjalankan server email dan menggunakan daftar hitam DNS (DNSBL) untuk memblokir spam, maka Anda harus menjalankan penyelesai DNS Anda sendiri, karena beberapa daftar hitam DNS seperti URIBL menolak permintaan dari penyelesai DNS publik.
- Jika Anda menjalankan server VPN Anda sendiri pada VPS (Virtual Private Server), merupakan praktik yang baik juga untuk menginstal resolver DNS pada VPS yang sama.
- Anda mungkin juga ingin menjalankan penyelesai DNS Anda sendiri jika Anda tidak suka riwayat penjelajahan Internet Anda disimpan di server pihak ketiga.
Jika Anda memiliki situs web dan ingin server DNS Anda sendiri menangani resolusi nama untuk nama domain Anda alih-alih menggunakan server DNS pencatat domain Anda, maka Anda perlu menyiapkan server DNS otoritatif, yang berbeda dari resolver DNS. BIND dapat bertindak sebagai server DNS otoritatif dan resolver DNS secara bersamaan, tetapi merupakan praktik yang baik untuk memisahkan dua peran pada kotak yang berbeda .
Tutorial ini menunjukkan cara mengatur resolver DNS lokal dan karena akan digunakan di localhost/jaringan lokal, tidak diperlukan enkripsi (DNS melalui TLS atau DNS melalui HTTPS). Menyiapkan resolver DoT atau resolver DoH akan dibahas di artikel mendatang.
Petunjuk :Local
tidak berarti komputer rumah Anda. Sebaliknya, itu berarti resolver DNS berjalan pada kotak yang sama dengan klien DNS. Anda dapat menginstal penyelesai DNS BIND di komputer rumah Anda. Ini lokal ke komputer rumah Anda. Anda dapat menginstal penyelesai DNS BIND di server cloud, dan itu lokal ke server cloud.
Mengatur Penyelesai DNS Lokal di Ubuntu 20.04 dengan BIND9
BIND (Berkeley Internet Name Domain) adalah perangkat lunak server DNS open-source yang banyak digunakan di Unix/Linux karena stabilitas dan kualitasnya yang tinggi. Ini awalnya dikembangkan oleh UC Berkeley, dan kemudian pada tahun 1994 pengembangannya dipindahkan ke Internet Systems Consortium, Inc (ISC).
Jalankan perintah berikut untuk menginstal BIND 9 di Ubuntu 20.04, dari repositori default. BIND 9 adalah versi saat ini dan BIND 10 adalah proyek mati.
sudo apt update sudo apt install bind9 bind9utils bind9-dnsutils bind9-doc bind9-host
Periksa versi.
named -v
Contoh keluaran:
BIND 9.16.1-Ubuntu (Stable Release) <id:d497c32>
Untuk memeriksa nomor versi dan opsi build, jalankan
named -V
Secara default, BIND secara otomatis dimulai setelah instalasi. Anda memeriksa statusnya dengan:
systemctl status named
Jika tidak berjalan, mulailah dengan:
sudo systemctl start named
Dan aktifkan mulai otomatis saat boot:
sudo systemctl enable named
Server BIND akan berjalan sebagai bind
pengguna, yang dibuat selama instalasi, dan mendengarkan pada TCP dan UDP port 53, seperti yang dapat dilihat dengan menjalankan perintah berikut:
sudo netstat -lnptu | grep named
Biasanya kueri DNS dikirim ke port UDP 53. Port TCP 53 adalah untuk ukuran respons yang lebih besar dari 512 byte.
Daemon BIND disebut bernama . (Daemon adalah bagian dari perangkat lunak yang berjalan di latar belakang.) named
biner diinstal oleh bind9
paket dan ada biner penting lainnya:rndc
, pengontrol daemon nama jarak jauh, yang diinstal oleh bind9utils
kemasan. rndc
binary digunakan untuk memuat ulang/menghentikan dan mengontrol aspek lain dari daemon BIND. Komunikasi dilakukan melalui port TCP 953.
Misalnya, kita dapat memeriksa status server nama BIND.
sudo rndc status
Konfigurasi untuk Penyelesai DNS Lokal
/etc/bind/
adalah direktori yang berisi konfigurasi untuk BIND.
- named.conf :file konfigurasi utama yang menyertakan konfigurasi tiga file lainnya.
- db.127 :file zona pemetaan terbalik IPv4 localhost.
- db.local :localhost meneruskan file zona pemetaan IPv4 dan IPv6.
- db.kosong :file zona kosong
Paket bind9 di Ubuntu 20.04 tidak dikirimkan dengan db.root
file, sekarang menggunakan file petunjuk root di /usr/share/dns/root.hints
. Petunjuk root file digunakan oleh resolver DNS untuk menanyakan server DNS root. Ada 13 grup root DNS server, dari a.root-servers.net
ke m.root-servers.net
.
Di luar kotak, server BIND9 di Ubuntu menyediakan layanan rekursif untuk localhost dan klien jaringan lokal saja. Pertanyaan dari luar akan ditolak. Jadi Anda tidak perlu mengedit file konfigurasi. Agar Anda terbiasa dengan konfigurasi BIND 9, saya akan menunjukkan cara mengaktifkan layanan rekursi.
File konfigurasi BIND utama /etc/bind/named.conf
sumber pengaturan dari 3 file lain.
- /etc/bind/named.conf.options
- /etc/bind/named.conf.local
- /etc/bind/named.conf.default-zones
Untuk mengaktifkan layanan rekursi, edit file pertama.
sudo nano /etc/bind/named.conf.options
Di options
klausa, tambahkan baris berikut. Ganti alamat IP di allow-recursion
pernyataan dengan alamat jaringan lokal Anda sendiri.
// hide version number from clients for security reasons. version "not currently available"; // optional - BIND default behavior is recursion recursion yes; // provide recursion service to trusted clients only allow-recursion { 127.0.0.1; 192.168.0.0/24; 10.10.10.0/24; }; // enable the query log querylog yes;
Simpan dan tutup file. Kemudian uji sintaks file konfigurasi.
sudo named-checkconf
Jika tes berhasil (ditunjukkan dengan output senyap), maka mulai ulang BIND9.
sudo systemctl restart named
Jika Anda memiliki firewall UFW yang berjalan di server BIND, maka Anda perlu membuka port 53 agar klien LAN dapat mengirim kueri DNS.
sudo ufw allow in from 192.168.0.0/24 to any port 53
Ini akan membuka port TCP dan UDP 53 ke jaringan pribadi 192.168.0.0/24. Kemudian dari komputer lain di LAN yang sama, kita dapat menjalankan perintah berikut untuk meng-query A record dari google.com. Ganti 192.168.0.102 dengan alamat IP dari resolver BIND Anda.
dig A google.com @192.168.0.102
Sekarang pada resolver BIND, periksa log kueri dengan perintah berikut.
sudo journalctl -eu named
Ini akan menampilkan pesan log terbaru dari unit layanan bind9. Saya menemukan baris berikut di log, yang menunjukkan bahwa permintaan DNS untuk catatan A google.com telah diterima dari port 57806 dari 192.168.0.103.
named[1162]: client @0x7f4d2406f0f0 192.168.0.103#57806 (google.com): query: google.com IN A +E(0)K (192.168.0.102)
Mengatur DNS Resolver Default di Server Ubuntu 20.04
Systemd-resolved menyediakan stub resolver di Ubuntu 20.04. Seperti disebutkan di awal artikel ini, stub resolver adalah klien DNS kecil di komputer pengguna akhir yang menerima permintaan DNS dari aplikasi seperti Firefox dan meneruskan permintaan ke resolver rekursif.
Penyelesai rekursif default dapat dilihat dengan perintah ini.
systemd-resolve --status
Petunjuk:Jika perintah di atas tidak segera berhenti, Anda dapat menghentikannya dengan menekan tombol Q.
Seperti yang Anda lihat, BIND bukan default. Jika Anda menjalankan perintah berikut di server BIND,
dig A facebook.com
Permintaan DNS ini tidak dapat ditemukan di log BIND. Sebagai gantinya, Anda perlu secara eksplisit memberi tahu Dig untuk menggunakan BIND.
dig A facebook.com @127.0.0.1
Untuk menetapkan BIND sebagai resolver default, buka file konfigurasi yang diselesaikan systemd.
sudo nano /etc/systemd/resolved.conf
Dalam [Resolve]
bagian, tambahkan baris berikut. Ini akan menetapkan server DNS global untuk server Anda.
DNS=127.0.0.1
Simpan dan tutup file. Kemudian mulai ulang layanan yang diselesaikan systemd.
sudo systemctl restart systemd-resolved
Sekarang jalankan perintah berikut untuk memeriksa resolver DNS default.
systemd-resolve --status
Sekarang lakukan kueri DNS tanpa menentukan 127.0.0.1
.
dig A facebook.com
Anda akan melihat permintaan DNS di log BIND, yang berarti BIND sekarang menjadi resolver rekursif default. Jika Anda tidak melihat kueri apa pun di log BIND, Anda mungkin perlu mengonfigurasi server DNS per tautan.
Konfigurasi Server DNS Per-Link di Ubuntu 20.04
Anda juga dapat mengonfigurasi server DNS per tautan, yang akan menimpa server DNS global. Ada dua cara untuk mengonfigurasi server DNS per tautan:
- melalui systemd-resolved
- melalui netplan
diselesaikan dengan sistem
Daftar file di bawah /etc/systemd/network/
direktori.
ls /etc/systemd/network/
Contoh keluaran:
05-eth0.network 99-default.link
Seperti yang Anda lihat, saya memiliki dua file konfigurasi tautan. 05-eth0.network
file ini untuk antarmuka jaringan utama saya, jadi saya mengedit file ini.
sudo nano /etc/systemd/network/05-eth0.network
Nama file Anda mungkin berbeda. Jika tidak ada file di bawah direktori ini, maka konfigurasi DNS per tautan Anda tidak dikontrol oleh systemd-resolved
.
Komentari entri DNS dan Domain default, dan tambahkan entri DNS Anda sendiri.
DNS=127.0.0.1
Simpan dan tutup file. Kemudian restart systemd-resolved
dan systemd-networkd
layanan.
sudo systemctl restart systemd-resolved systemd-networkd
netplan
Beberapa server Ubuntu mungkin menggunakan netplan untuk mengkonfigurasi jaringan per-link. Dalam hal ini, Anda perlu mengkonfigurasi server DNS di .yaml
file di bawah /etc/netplan/
direktori. Daftar file dalam direktori ini.
ls /etc/netplan/
Contoh keluaran:
01-netcfg.yaml
Jadi saya mengedit file ini.
sudo nano /etc/netplan/01-netcfg.yaml
Setel alamat server DNS di nameservers
bagian.
nameservers: search: [ invalid ] addresses: - 127.0.0.1
Anda dapat menentukan beberapa resolver DNS seperti di bawah ini, yang dapat mengurangi kemungkinan kegagalan DNS.
nameservers: search: [ invalid ] addresses: - 127.0.0.1 - 8.8.8.8 - 1.1.1.1
Simpan dan tutup file. Kemudian terapkan perubahannya.
sudo netplan apply
Catatan: Jika Anda melihat pesan kesalahan berikut, maka netplan tidak dapat memproses file konfigurasi.
Invalid YAML at /etc/netplan/01-netcfg.yaml inconsistent indentation
Anda harus memperbaiki lekukan yang tidak konsisten dan menjalankan sudo netplan apply
perintah lagi.
Pemecahan Masalah
Periksa konten /etc/resolv.conf
.
cat /etc/resolv.conf
Seperti yang Anda lihat, 127.0.0.1 (BIND) adalah resolver DNS default. Jika Anda melihat nilai yang berbeda, itu berarti BIND masih bukan resolver DNS default Anda. Anda dapat menggunakan utilitas resolveconf untuk menetapkan BIND sebagai resolver default.
Instal resolvconf
paket
sudo apt install resolvconf
Kemudian mulai named-resolvconf
layanan.
sudo systemctl start named-resolvconf.service
Aktifkan mulai otomatis saat boot.
sudo systemctl enable named-resolvconf.service
Sekarang periksa /etc/resolv.conf
mengajukan lagi. BIND seharusnya menjadi penyelesai DNS default di server Ubuntu Anda sekarang.
cat /etc/resolv.conf
Perhatikan bahwa beberapa penyedia hosting seperti Linode mungkin menggunakan pembantu jaringan untuk membuat /etc/resolv.conf
secara otomatis mengajukan. Untuk mengubah penyelesai DNS default, Anda perlu menonaktifkan pembantu jaringan itu di panel kontrol hosting.
Jika cara ini masih tidak berhasil, mungkin karena /etc/resolv.conf
file di server Ubuntu Anda bukan tautan simbolis ke /run/resolvconf/resolv.conf
. Anda perlu menghapus /etc/resolv.conf
file dan buat tautan simbolis.
sudo rm /etc/resolv.conf sudo ln -s /run/resolvconf/resolv.conf /etc/resolv.conf
Anda juga dapat membuat file ini secara manual dan menjadikannya hanya-baca untuk mencegah ditimpa oleh aplikasi lain di server yang sama.
sudo rm /etc/resolv.conf echo "nameserver 127.0.0.1" | sudo tee /etc/resolv.conf sudo chmod 444 /etc/resolv.conf
systemd-resolved tidak berjalan
Jika Anda melihat kesalahan berikut setelah menjalankan systemd-resolve --status
perintah,
Failed to get global data: Unit dbus-org.freedesktop.resolve1.service not found.
Mungkin systemd-resolved
tidak berjalan. Mulailah dengan:
sudo systemctl status systemd-resolved
Aktifkan mulai otomatis.
sudo systemctl enable systemd-resolved
Mengatur DNS Resolver Default di Komputer Klien
Di desktop Ubuntu, Anda dapat mengikuti petunjuk di atas untuk menyetel penyelesai DNS default, tetapi ingat untuk mengganti 127.0.0.1 dengan alamat IP server BIND. Langkah-langkah menyetel penyelesai DNS default di MacOS dan Windows dapat ditemukan di Internet.
Cara Menonaktifkan IPv6 di BIND
Jika Anda tidak menggunakan IPv6 di jaringan Anda, ada baiknya untuk menonaktifkan IPv6 di BIND, jika tidak, akan ada banyak kesalahan tentang IPv6 di log BIND seperti di bawah ini.
network unreachable resolving 'mirrors.fedoraproject.org/A/IN': 2001:4178:2:1269:dead:beef:cafe:fed5#53 network unreachable resolving 'mirrors.fedoraproject.org/AAAA/IN': 2001:4178:2:1269:dead:beef:cafe:fed5#53 network unreachable resolving 'mirrors.fedoraproject.org/A/IN': 2610:28:3090:3001:dead:beef:cafe:fed5#53 network unreachable resolving 'mirrors.fedoraproject.org/AAAA/IN': 2610:28:3090:3001:dead:beef:cafe:fed5#53
Untuk menonaktifkan IPv6 di BIND di Ubuntu, cukup buka /etc/default/named berkas
sudo nano /etc/default/named
Tambahkan -4
ke OPSI.
OPTIONS="-u bind -4"
Simpan dan tutup file. Kemudian restart BIND dan selesai.
sudo systemctl restart named
BIND SERVFAIL
Jika resolver BIND Anda tidak dapat menjawab kueri DNS (SERVFAIL), dan Anda melihat baris berikut di log BIND.
dnssec: warning: managed-keys-zone: Unable to fetch DNSKEY set '.': timed out
Mungkin karena server Anda tidak memiliki konektivitas IPv6 yang berfungsi. Ini terjadi pada salah satu server saya. Saya pikir konektivitas IPv6 berfungsi seperti biasa, tetapi tiba-tiba terputus karena alasan yang tidak saya ketahui. Setelah saya menonaktifkan IPv6 di BIND, resolusi DNS berfungsi kembali.
Bernama Restart Otomatis
Jika karena alasan apa pun proses Bernama Anda dimatikan, Anda perlu menjalankan perintah berikut untuk memulai kembali.
sudo systemctl restart named
Daripada mengetikkan perintah ini secara manual, kita dapat membuat Named otomatis restart dengan mengedit named.service
unit layanan sistemd. 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 dalam file, yang akan membuat Named otomatis restart 5 detik setelah kegagalan terdeteksi.
[Service] Restart=always RestartSec=5s
Simpan dan tutup file. Kemudian muat ulang systemd.
sudo systemctl daemon-reload
Untuk memeriksa apakah ini akan berhasil, bunuh Named with:
sudo pkill named
Kemudian centang Status bernama. Anda akan menemukan Named dimulai ulang secara otomatis.
systemctl status named
BIND max-cache-size
BIND dapat menyimpan hasil DNS di server untuk mempercepat pencarian DNS untuk klien. BIND mengasumsikan Anda menjalankan resolver DNS khusus, yaitu, tidak ada layanan web lain yang berjalan di host yang sama, jadi ukuran cache default (didefinisikan oleh max-cache-size
) diatur ke 90% dari total RAM untuk mencapai kinerja terbaik. Anda dapat melihat baris seperti di bawah ini di log BIND (sudo journalctl -eu named
) saat BIND dimulai.
none:100: 'max-cache-size 90%' - setting to 7165MB (out of 7961MB)
Perhatikan bahwa BIND tidak akan langsung menggunakan 90% RAM Anda. Jika permintaan DNS hanya sedikit, BIND hanya menggunakan sedikit RAM, karena hasil DNS yang di-cache tidak banyak. Jika ada banyak permintaan DNS, maka akan menggunakan banyak RAM untuk menyimpan cache DNS.
Jika RAM Anda terbatas, Anda mungkin tidak ingin BIND menggunakan 90% RAM Anda untuk cache. Edit file konfigurasi BIND /etc/bind/named.conf.options
.
sudo nano /etc/bind/named.conf.options
Tambahkan direktif berikut di options
ayat. Ubah 50% ke nilai pilihan Anda.
max-cache-size 50%;
Mulai ulang BIND agar perubahan diterapkan.
sudo systemctl restart named
Catatan :Saat Anda memulai ulang BIND, seluruh cache akan dihapus.
Tidak ada server yang dapat dijangkau
Jika Anda melihat kesalahan berikut saat menggunakan perintah dig di komputer klien
;; connection timed out; no servers could be reached
Bisa jadi itu
- Aturan firewall Anda salah. Periksa log firewall Anda.
- Resolver BIND tidak berjalan.
- BIND tidak mendengarkan pada antarmuka jaringan.
- Dapatkah Anda melakukan ping dari klien DNS ke resolver DNS?
Kesimpulan
Saya harap tutorial ini membantu Anda mengatur resolver DNS lokal di Ubuntu 20.04 dengan BIND9. Seperti biasa, jika menurut Anda postingan ini bermanfaat, berlangganan newsletter gratis kami untuk mendapatkan lebih banyak tips dan trik. Hati-hati