Cách thiết lập máy chủ DNS với BIND trên Ubuntu 22.04

theanh

Administrator
Nhân viên
BIND hay Berkeley Internet Name Domain là phần mềm DNS Server miễn phí và mã nguồn mở. Đây là một trong những phần mềm máy chủ DNS phổ biến nhất được hơn 70% DNS trên Internet sử dụng. BIND đã có từ những năm 1980, nổi tiếng với tính linh hoạt, hiệu suất và các tính năng của nó. BIND có thể được sử dụng làm cả DNS có thẩm quyền và DNS lưu trữ đệm, hỗ trợ cân bằng tải, cập nhật động, DNS chia tách, DNSSEC, IPv6 và nhiều tính năng khác.

Phần mềm BIND DNS là một trong những máy chủ DNS đáng tin cậy nhất cho các hệ điều hành giống Unix. Nó có sẵn trên hầu hết các bản phân phối Linux và cung cấp các công cụ bổ sung để chẩn đoán và thử nghiệm máy chủ DNS.

Hướng dẫn này sẽ hướng dẫn bạn cách cài đặt DNS Server với BIND trên máy chủ Ubuntu 22.04. Hướng dẫn này sẽ chỉ cho bạn cách thiết lập cài đặt máy chủ DNS BIND Master-Slave bằng hai máy chủ Ubuntu.

Điều kiện tiên quyết​

Trước khi bắt đầu với hướng dẫn này, bạn cần đáp ứng các yêu cầu sau:
  • Hai máy chủ Ubuntu 22.04.
  • Người dùng không phải root có quyền root/quản trị viên.

Thiết lập FQDN (Tên miền đủ điều kiện)​

Trước khi bắt đầu cài đặt các gói BIND, bạn phải đảm bảo tên máy chủ và FQDN của máy chủ là chính xác. Trong phần trình diễn này, chúng ta sẽ sử dụng hai máy chủ Ubuntu với các thông tin chi tiết sau:
Mã:
Tên máy chủ Địa chỉ IP FQDN được sử dụng làm
------------------------------------------------------
ns1 192.168.5.21 ns1.howtoforge.local BIND Master
ns2 192.168.5.22 ns2.howtoforge.local BIND Slave
Bây giờ hãy đăng nhập vào từng máy chủ và chạy lệnh sau để thiết lập FQDN (Tên miền đủ điều kiện).

Thiết lập FQDN trên "ns1" server.
Mã:
sudo hostnamectl set-hostname ns1.howtoforge.local
Thiết lập FQDN trên máy chủ "ns2".
Mã:
sudo hostnamectl set-hostname ns2.howtoforge.local
Tiếp theo, chỉnh sửa tệp "/etc/hosts" bằng lệnh sau.
Mã:
sudo nano /etc/hosts
Thêm cấu hình sau vào từng máy chủ.
Mã:
192.168.5.21 ns1.howtoforge.local ns1
192.168.5.22 ns2.howtoforge.local ns2
Lưu và đóng tệp khi bạn hoàn tất.

Cuối cùng, hãy kiểm tra và xác minh FQDN trên từng máy chủ bằng lệnh sau. Trên máy chủ "ns1", bạn sẽ nhận được FQDN là "ns1.howtoforge.local", và trên máy chủ "ns2", bạn sẽ nhận được đầu ra "ns2.howtoforge.local".
Mã:
sudo hostname -f

Cài đặt các gói BIND​

Các gói Bind có sẵn theo mặc định trên kho lưu trữ máy chủ Ubuntu. Bây giờ bạn có thể dễ dàng cài đặt Bind bằng lệnh apt trên cả máy chủ "ns1" và "ns2".

Chạy lệnh apt bên dưới để cập nhật và làm mới kho lưu trữ Ubuntu.
Mã:
sudo apt update
Sau đó, cài đặt các gói Bind bằng lệnh sau. nhập Y để xác nhận cài đặt và nhấn ENTER để tiếp tục. Và quá trình cài đặt sẽ bắt đầu.
Mã:
sudo apt install bind9 bind9utils bind9-doc dnsutils


Sau khi quá trình cài đặt Bind hoàn tất, hãy chỉnh sửa cấu hình "/etc/default/named" bằng lệnh sau.
Mã:
sudo nano /etc/default/named
Dòng "OPTIONS=" cho phép bạn thiết lập các tùy chọn cụ thể khi dịch vụ BIND đang chạy. Trong bản demo này, bạn sẽ chỉ chạy Bind với IPv4, vì vậy bạn sẽ cần tạo dòng "OPTIONS" như bên dưới.
Mã:
OPTIONS="-u bind -4"
Lưu và đóng tệp khi bạn hoàn tất.

Bây giờ hãy chạy lệnh bên dưới để khởi động lại dịch vụ Bind "named". Sau đó, hãy kiểm tra và xác minh trạng thái của dịch vụ BIND. Bạn sẽ thấy dịch vụ Bind "named" đang chạy trên cả hai máy chủ.
Mã:
sudo systemctl restart named
sudo systemctl status named

Thiết lập BIND Master​

Sau khi cài đặt các gói BIND trên cả hai máy chủ "ns1" và "ns2", bạn sẽ thiết lập máy chủ BIND DNS. bạn sẽ thiết lập máy chủ "ns1" làm Master của máy chủ BIND DNS. Bạn có thể chạy BIND trên một máy chủ duy nhất, nhưng nên sử dụng nhiều máy chủ để thiết lập Máy chủ DNS có tính khả dụng cao.

Quay lại phiên đầu cuối của máy chủ "ns1".

Chạy lệnh bên dưới để chỉnh sửa tệp cấu hình "/etc/bind/named.conf.options".
Mã:
sudo nano /etc/bind/named.conf.options
Thêm cấu hình sau vào tệp ở đầu dòng, trước dòng "options {....};".

Với cấu hình này, bạn sẽ tạo một ACL (Danh sách kiểm soát truy cập) có tên là "trusted", bao gồm tất cả các địa chỉ IP và mạng đáng tin cậy trong môi trường của bạn. Ngoài ra, hãy đảm bảo thêm địa chỉ IP của máy chủ cục bộ "ns1" và địa chỉ IP của máy chủ DNS phụ "ns2".
Mã:
acl "trusted" {
 192.168.5.21; # ns1 - hoặc bạn có thể sử dụng localhost cho ns1
 192.168.5.22; # ns2
 192.168.5.0/24; # mạng đáng tin cậy
};
Bây giờ hãy thực hiện các thay đổi đối với phần "tùy chọn {..};" như bên dưới.

Trong ví dụ sau, chúng tôi đang vô hiệu hóa hỗ trợ cho IPv6 bằng cách bình luận tùy chọn "listen-on-v6", bật và cho phép đệ quy từ ACL "đáng tin cậy" và chạy dịch vụ BIND trên địa chỉ IP "ns1" cụ thể là "192.168.5.21". Ngoài ra, chúng tôi đang vô hiệu hóa chuyển vùng mặc định và xác định các bộ chuyển tiếp cụ thể cho máy chủ DNS BIND tới Google Public DNS "8.8.8.8" và "8.8.4.4".
Mã:
tùy chọn {

 thư mục "/var/cache/bind";

 //listen-on-v6 { bất kỳ; }; # vô hiệu hóa bind trên IPv6

 đệ quy có; # cho phép truy vấn hồi phục
 allow-recursion { tin cậy; }; # cho phép truy vấn đệ quy từ "tin cậy" - được tham chiếu đến ACL
 listen-on { 192.168.5.21; }; # ns1 IP address
 allow-transfer { none; }; # vô hiệu hóa chuyển vùng theo mặc định

 forwarders {
 8.8.8.8;
 1.1.1.1;
 };
};
Lưu và đóng tệp khi bạn hoàn tất.

Cuối cùng, hãy chạy lệnh sau để kiểm tra và xác minh tệp cấu hình "/etc/bind/named.conf.options". Nếu không có thông báo đầu ra, thì cấu hình của bạn là đúng.
Mã:
sudo named-checkconf /etc/bind/named.conf.options

Thiết lập vùng​

Sau khi thiết lập cấu hình cơ bản của BIND master, bây giờ bạn sẽ thiết lập vùng cho tên miền của mình. Trong ví dụ sau, chúng ta sẽ sử dụng tên miền "howtoforge.local" với máy chủ tên "ns1.howtoforge.local" và "ns2.howtoforge.local".

Chỉnh sửa tệp cấu hình "/etc/bind/named.local" bằng lệnh sau.
Mã:
sudo nano /etc/bind/named.conf.local
Trong cấu hình này, bạn sẽ định nghĩa hai tệp vùng, vùng chuyển tiếp và vùng đảo ngược cho tên miền của mình. Vùng Forward sẽ chứa cấu hình về nơi tên miền của bạn sẽ được phân giải thành địa chỉ IP, trong khi vùng Reverse sẽ dịch địa chỉ IP thành tên miền nào.

Trong ví dụ sau, chúng tôi sẽ định nghĩa vùng Forward "/etc/bind/zones/db.howtoforge.local" cho miền "hwdomain.io" và vùng Reverse "/etc/bind/zones/db.192.168.5".
Mã:
zone "howtoforge.local" {
 type master;
 file "/etc/bind/zones/db.howtoforge.local"; # zone file path
 allow-transfer { 192.168.5.22; }; # Địa chỉ IP ns2 - DNS phụ
};


vùng "5.168.192.in-addr.arpa" {
 kiểu chính;
 tệp "/etc/bind/zones/db.192.168.5"; # mạng con 192.168.5.0/24
 cho phép chuyển { 192.168.5.22; }; # ns2 private IP address - secondary DNS
};
Lưu và đóng tệp khi bạn hoàn tất.

Tiếp theo, chạy lệnh sau để tạo một thư mục mới "/etc/bind/zones" sẽ được sử dụng để lưu trữ các tệp cấu hình vùng.
Mã:
sudo mkdir -p /etc/bind/zones/
Sau đó, sao chép cấu hình vùng chuyển tiếp mặc định "/etc/bind/zones/db.howtoforge.local" và chỉnh sửa tệp bằng lệnh sau.
Mã:
sudo cp /etc/bind/db.local /etc/bind/zones/db.howtoforge.local
sudo nano /etc/bind/zones/db.howtoforge.local
Thay đổi bản ghi SOA mặc định bằng tên miền của bạn. Ngoài ra, bạn sẽ cần phải thay đổi số "Serial" bên trong bản ghi SOA mỗi khi bạn thực hiện thay đổi đối với tệp và số này phải giống với số "Serial" với máy chủ DNS phụ/phụ.

Sau đó, bạn có thể định nghĩa bản ghi NS và bản ghi A cho máy chủ DNS của mình. Trong ví dụ này, máy chủ tên sẽ là "ns1.howtoforge.local" với địa chỉ IP của bản ghi A là "192.168.5.21" và "ns2.howtoforge.local" với bản ghi A của địa chỉ IP của máy chủ DNS phụ là "192.168.5.22".

Cuối cùng, bạn có thể định nghĩa các tên miền khác. Trong ví dụ này, chúng tôi sẽ định nghĩa một bản ghi MX (trình xử lý thư) cho miền "howtoforge.local" sẽ được xử lý bởi máy chủ thư "mail.howtoforge.local. Ngoài ra, chúng tôi sẽ định nghĩa tên miền "howtoforge.local" sẽ được phân giải thành máy chủ có địa chỉ IP "192.168.5.100" và tên miền phụ cho máy chủ thư "mail.howtoforge.local" thành địa chỉ IP máy chủ "192.168.5.120".
Mã:
;
; Tệp dữ liệu BIND cho giao diện vòng lặp cục bộ
;
$TTL 604800
@ IN SOA ns1.howtoforge.local. admin.howtoforge.local. (
 3 ; Serial
 604800 ; Làm mới
 86400 ; Thử lại
 2419200 ; Hết hạn
 604800 ) ; TTL bộ nhớ đệm âm
;

; Bản ghi NS cho máy chủ tên
 IN NS ns1.howtoforge.local.
 IN NS ns2.howtoforge.local.

; Bản ghi A cho máy chủ tên
ns1.howtoforge.local. IN A 192.168.5.21
ns2.howtoforge.local. TRONG A 192.168.5.22

; Trình xử lý thư hoặc bản ghi MX cho miền howtoforge.local
howtoforge.local. TRONG MX 10 mail.howtoforge.local.

; Bản ghi A cho tên miền
howtoforge.local. TRONG A 192.168.5.100
mail.howtoforge.local. IN A 192.168.5.120
Lưu và đóng tệp khi bạn hoàn tất.



Tiếp theo, sao chép tệp cấu hình vùng đảo ngược mặc định vào "/etc/bind/zones/db.192.168.5" và chỉnh sửa tệp mới bằng lệnh sau.
Mã:
sudo cp /etc/bind/db.127 /etc/bind/zones/db.192.168.5
sudo nano /etc/bind/zones/db.192.168.5
Thay đổi bản ghi SOA mặc định bằng tên miền của bạn. Ngoài ra, đừng quên thay đổi số "Serial" bên trong bản ghi SOA.

Xác định bản ghi NS cho máy chủ DNS của bạn. Đây là cùng một máy chủ tên mà bạn đã sử dụng trong vùng chuyển tiếp.

Cuối cùng, xác định bản ghi PTR cho tên miền của bạn. Số trên bản ghi PTR là số cuối cùng của địa chỉ IP. Trong ví dụ này, máy chủ tên "ns1.howtoforge.local" được phân giải thành địa chỉ IP "192.168.5.21", vì vậy bây giờ bản ghi PTR sẽ là "21" và cứ như vậy đối với các tên miền khác.
Mã:
;
; Tệp dữ liệu đảo ngược BIND cho giao diện vòng lặp cục bộ
;
$TTL 604800
@ IN SOA ns1.howtoforge.local. admin.howtoforge.local. (
 3 ; Serial
 604800 ; Làm mới
 86400 ; Thử lại
 2419200 ; Hết hạn
 604800 ) ; TTL bộ nhớ đệm âm
;

; máy chủ tên - bản ghi NS
 TRONG NS ns1.howtoforge.local.
 TRONG NS ns2.howtoforge.local.

; Bản ghi PTR
21 TRONG PTR ns1.howtoforge.local. ; 192.168.5.21
22 TRONG PTR ns2.howtoforge.local. ; 192.168.5.22
100 TRONG PTR howtoforge.local. ; 192.168.5.100
120 TRONG PTR mail.howtoforge.local. ; 192.168.5.120
Lưu và đóng tệp khi bạn hoàn tất.



Bây giờ hãy chạy lệnh sau để kiểm tra cấu hình BIND và đảm bảo không nhận được bất kỳ thông báo lỗi nào.
Mã:
sudo named-checkconf
Sau đó, hãy chạy lệnh sau để kiểm tra và xác minh từng tệp vùng mà bạn vừa tạo, tệp cấu hình vùng chuyển tiếp và vùng đảo ngược. Nếu tệp vùng của bạn không có lỗi, bạn sẽ thấy thông báo đầu ra như "OK". Nếu không có lỗi, lệnh sẽ cho bạn biết dòng nào trong tệp gây ra lỗi.
Mã:
sudo named-checkzone howtoforge.local /etc/bind/zones/db.howtoforge.local
sudo named-checkzone 5.168.192.in-addr.arpa /etc/bind/zones/db.192.168.5


Để hoàn tất cấu hình BIND Master, hãy chạy lệnh bên dưới để khởi động lại dịch vụ BIND và áp dụng các thay đổi mới cho các cấu hình mà bạn đã thực hiện.
Mã:
sudo systemctl restart named

Thiết lập BIND Slave​

Bây giờ bạn đã hoàn tất cấu hình Máy chủ DNS BIND Master. Đã đến lúc thiết lập máy chủ "ns2" làm máy chủ phụ hoặc máy chủ dự phòng của máy chủ DNS BIND.

Máy chủ chính lưu trữ các tệp vùng chứa cấu hình DNS của miền của bạn và xử lý các truy vấn đệ quy hoặc lặp lại. Máy chủ DNS phụ/phụ lưu trữ các bản ghi DNS trong một khoảng thời gian tạm thời và các bản ghi DNS này được tự động chuyển từ máy chủ BIND chính.

Bây giờ hãy chuyển đến phiên thiết bị đầu cuối "ns2" và bắt đầu cấu hình máy chủ "ns2" làm máy chủ phụ/phụ của máy chủ DNS BIND.

Chạy lệnh sau để chỉnh sửa tệp cấu hình "/etc/bind/named.conf.options"
Mã:
sudo nano /etc/bind/named.conf.options
Trên đầu dòng, hãy thêm cấu hình sau. Điều này sẽ tạo ra cùng một ACL (Danh sách kiểm soát truy cập) như trên máy chủ Master.
Mã:
acl "trusted" {
 192.168.5.21; # ns1
 192.168.5.22; # ns2 - hoặc bạn có thể sử dụng localhost cho ns2
 192.168.5.0/24; # trusted networks
};
Bên trong dòng "options {...};", bạn có thể thay đổi cấu hình như bên dưới. Cấu hình này vẫn giống như trên máy chủ DNS BIND Master và điểm khác biệt duy nhất ở đây là tùy chọn "listen-on" được chỉ định cho địa chỉ IP của máy chủ "ns2".
Mã:
tùy chọn {

 thư mục "/var/cache/bind";

 //listen-on-v6 { bất kỳ; }; # vô hiệu hóa liên kết trên IPv6

 đệ quy có; # cho phép truy vấn hồi phục
 cho phép đệ quy { đáng tin cậy; }; # cho phép truy vấn đệ quy từ "đáng tin cậy" - được tham chiếu đến ACL
 listen-on { 192.168.5.22; }; # địa chỉ IP ns2
 cho phép chuyển giao { không có; }; # vô hiệu hóa chuyển vùng theo mặc định

 forwarders {
 8.8.8.8;
 1.1.1.1;
 };
};
Lưu và đóng tệp khi bạn hoàn tất.

Tiếp theo, chỉnh sửa tệp cấu hình "/etc/bind/named.conf.local" bằng lệnh sau để thiết lập máy chủ "ns2" làm Máy chủ DNS phụ/phụ.
Mã:
sudo nano /etc/bind/named.conf.local
Thêm cấu hình sau vào tệp. Như bạn thấy, chúng tôi đang định nghĩa vùng chuyển tiếp và vùng đảo ngược, nhưng với "type slave" và định nghĩa máy chủ DNS Master "192.168.5.21". Bạn không cần phải tạo tệp vùng vì các bản ghi DNS và dữ liệu sẽ được tự động chuyển từ máy chủ DNS Master và sẽ được lưu trữ tạm thời trong một khoảng thời gian trên máy chủ DNS phụ/phụ.
Mã:
vùng "howtoforge.local" {
 kiểu phụ;
 tệp "/etc/bind/zones/db.howtoforge.local";
 masters { 192.168.5.21; }; # ns1 Địa chỉ IP - DNS chính
};


vùng "5.168.192.in-addr.arpa" {
 kiểu phụ;
 tệp "/etc/bind/zones/db.192.168.5";
 masters { 192.168.5.21; }; # ns1 IP address - master DNS
};
Lưu và đóng tệp khi bạn hoàn tất.

Bây giờ hãy chạy lệnh sau để kiểm tra và xác minh cấu hình BIND và đảm bảo rằng tất cả các cấu hình đều chính xác. Sau đó, bạn có thể khởi động lại dịch vụ BIND "named" trên máy chủ "ns2" để áp dụng các thay đổi mới. Và bây giờ bạn đã hoàn tất cấu hình trên máy chủ "ns2" dưới dạng máy chủ phụ/phụ thuộc của Máy chủ DNS BIND.
Mã:
sudo named-checkconf
sudo systemctl restart named


Cuối cùng, hãy chạy lệnh sau để kiểm tra và xác minh dịch vụ BIND "named" trên máy chủ "ns2". Và hãy đảm bảo dịch vụ "named" đang chạy.
Mã:
sudo systemctl status named

Xác minh Máy chủ DNS từ Máy khách​

Trên máy khách, có nhiều cách để thiết lập trình phân giải DNS. Bạn có thể thiết lập trình phân giải DNS từ NetworkManager hoặc từ cấu hình netplan. Nhưng cách dễ nhất là thiết lập trình phân giải DNS theo cách thủ công thông qua tệp "/etc/resolv.conf". Điều này cho phép bạn thiết lập trình phân giải DNS tĩnh cho máy khách.

Chạy lệnh sau để xóa tệp liên kết mặc định "/etc/resolv.conf" và tạo tệp mới bằng trình chỉnh sửa nano.
Mã:
sudo unlink /etc/resolv.conf
sudo nano /etc/resolv.conf
Thêm cấu hình sau vào tệp. Trong cấu hình sau, chúng tôi định nghĩa ba bộ giải quyết khác nhau, BIND DNS Master, máy chủ BIND DNS thứ cấp và bộ giải quyết Google DNS công khai. Khi máy khách yêu cầu thông tin về tên miền, thông tin sẽ được lấy từ bộ giải quyết DNS, từ trên xuống dưới.
Mã:
nameserver 192.168.5.21
nameserver 192.168.5.22
nameserver 8.8.8.8
search howtoforge.local
Lưu và đóng tệp khi bạn hoàn tất.

Tiếp theo, chạy lệnh bên dưới để cài đặt một số tiện ích DNS vào máy khách của bạn. Trong ví dụ này, máy khách là hệ thống Ubuntu, vì vậy chúng tôi đang cài đặt tiện ích DNS bằng lệnh apt như bên dưới.
Mã:
sudo apt install dnsutils bind9-utils
Sau khi bạn đã cài đặt tiện ích DNS trên hệ thống của mình, bạn có thể bắt đầu kiểm tra tất cả các bản ghi DNS từ máy khách.

Chạy lệnh dig bên dưới để kiểm tra tên miền "howtoforge.local" và "mail.howtoforge.local". Và bạn sẽ thấy "howtoforge.local" được phân giải thành địa chỉ IP máy chủ "192.168.5.100", trong khi tên miền phụ "mail.howtoforge.local" được xử lý bởi địa chỉ IP máy chủ "192.168.5.120".
Mã:
dig howtoforge.local +short
dig howtoforge.local

Mã:
dig mail.howtoforge.local +short
dig mail.howtoforge.local


Tiếp theo, chạy lệnh dig như bên dưới để kiểm tra trình xử lý thư cho tên miền "howtoforge.local". Và bạn sẽ nhận được kết quả là "mail.howtoforge.local" được xử lý là thư cho miền chính "howtoforge.local".
Mã:
dig howtoforge.local MX +short
dig howtoforge.local MX


Bây giờ bạn cũng có thể xác minh cấu hình vùng đảo ngược cho tên miền của mình bằng lệnh nslookup.

Chạy lệnh nslookup bên dưới để kiểm tra và xác minh DNS đảo ngược cho một số địa chỉ IP.

Bây giờ bạn sẽ thấy địa chỉ IP "192.168.5.21" được đảo ngược thành máy chủ tên "ns1.howtoforge.local", địa chỉ IP "192.168.5.22" được đảo ngược thành máy chủ tên "ns2.howtoforge.local", và địa chỉ IP "192.168.5.100" được đảo ngược thành tên miền chính "howtoforge.local", và cuối cùng địa chỉ IP "192.168.5.120" được đảo ngược thành tên miền phụ "mail.howtoforge.local.
Mã:
nslookup 192.168.5.21
nslookup 192.168.5.22
nslookup 192.168.5.100
nslookup 192.168.5.120

Kết luận​

Xin chúc mừng! Trong suốt hướng dẫn này, bạn đã học cách cài đặt và cấu hình BIND DNS Server trên máy chủ Ubuntu 22.04. Bạn đã cấu hình thành công BIND DNS Server Master-Slave bằng hai máy chủ Ubuntu khác nhau. Ngoài ra, bạn đã học lệnh cơ bản Dig và Nslookup để kiểm tra và xác minh bản ghi DNS và cấu hình.
 
Back
Bên trên