Bài viết này sẽ giúp bạn hiểu rõ hơn về cách cấu hình BIND như một server DNS nội bộ để quản lý và phân giải tên miền trong mạng riêng trên Ubuntu 20.04. Những hướng dẫn chi tiết dưới đây của Vietnix sẽ giúp bạn cài đặt, cấu hình BIND hỗ trợ quá trình quản lý tên miền và truy cập internet thuận tiện, hiệu quả hơn.
Yêu cầu để cấu hình BIND làm server DNS nội bộ trên Ubuntu 20.04
Để hoàn thành hướng dẫn này, bạn cần phải đáp ứng đủ những yêu cầu sau đây. Hãy đảm bảo rằng mỗi server nằm trong cùng một datacenter với mạng riêng được kích hoạt:
- Một server Ubuntu 20.04 mới (ns1) đóng vai trò server DNS chính (Primary DNS server).
- Một server Ubuntu 20.04 thứ hai (ns2) đóng vai trò là server DNS phụ (Secondary DNS server).
- Ít nhất một server bổ sung. Hướng dẫn này giả định bạn có hai server bổ sung (client servers). Những client servers này phải được tạo trong cùng một datacenter với các server DNS của bạn.
Trên mỗi server này, cấu hình một tài khoản quản trị có đặc quyền sudo
và thiết lập tường lửa đi kèm.
Lưu ý: Để quá trình cấu hình và thiết lập các yếu tố trên server diễn ra thuận lợi, bạn sẽ cần một máy chủ linh hoạt với toàn quyền điều hành. Do đó sử dụng VPS sẽ là lựa chọn tối ưu nhất.
Hiện tại Vietnix đang là nhà cung cấp VPS tốc độ cao, ổn định và uy tín được nhiều người tin dùng tại thị trường Việt Nam hiện nay. Với đa dạng gói cấu hình cùng mức giá và quyền quản trị ở mức cao nhất, các gói VPS tại Vietnix có thể đáp ứng mọi nhu cầu sử dụng của người dùng hiện nay. Liên hệ ngay với Vietnix để nhận tư vấn gói cấu hình tối ưu nhất theo nhu cầu và ngân sách của bạn cũng như nhận ngay bộ công cụ trị giá tới 26.000.000 VND/Năm.
Ví dụ về cơ sở hạ tầng và mục tiêu của hướng dẫn
Bài hướng dẫn này sẽ giả định những yếu tố sau:
- Bạn có hai server sẽ được chỉ định làm server tên miền DNS. Trong hướng dẫn này chúng sẽ được gọi dưới tên là ns1 và ns2.
- Bạn có hai client servers bổ sung sẽ sử dụng cơ sở hạ tầng DNS mà bạn tạo ra, được gọi là host1 và host2. Bạn cũng có thể thêm bao nhiêu client server tùy ý.
- Tất cả các server này tồn tại trong cùng một datacenter là
nyc3
. - Tất cả các server này đã được bật mạng riêng và đang nằm trên subnet
10.128.0.0/16
(bạn sẽ có thể phải điều chỉnh điều này cho các server của mình). - Tất cả các server đều được kết nối với một dự án chạy trên
example.com
. Hướng dẫn này chỉ ra cách thiết lập một hệ thống DNS nội bộ, riêng tư nên bạn có thể sử dụng bất kỳ tên miền nào khác. Các server DNS luôn ưu tiên định tuyến yêu cầu bên trong, có nghĩa là chúng sẽ không cố gắng kết nối đến miền được chỉ định trên internet công cộng. Tuy nhiên, sử dụng một tên miền bạn sở hữu có thể giúp tránh xung đột với các miền được định tuyến công cộng.
Với những giả định trên, các ví dụ trong hướng dẫn này sẽ sử dụng một lược đồ đặt tên dựa trên subdomain nyc3.example.com
để tham chiếu đến subnet riêng hoặc zone. Do đó, tên miền đầy đủ của host1 trên mạng riêng sẽ là host1.nyc3.example.com
. Bảng sau chứa các chi tiết liên quan được sử dụng trong các ví dụ thuộc toàn bộ hướng dẫn này:
Host | Role | Private FQDN | IP Address |
---|---|---|---|
ns1 | Primary DNS Server | ns1.nyc3.example.com | 10.128.10.11 |
ns2 | Secondary DNS Server | ns2.nyc3.example.com | 10.128.20.12 |
host1 | Generic Host 1 | host1.nyc3.example.com | 10.128.100.101 |
host2 | Generic Host 2 | host2.nyc3.example.com | 10.128.200.102 |
Chú ý: Bạn có thể thay thế dữ liệu thành tên server và địa chỉ IP riêng của mình. Đồng thời cũng không nhất thiết phải sử dụng tên lược đồ làm tên zone của datacenter. Bài viết quy định như vậy chỉ để thể hiện rằng các server này thuộc mạng riêng của một datacenter cụ thể. Nếu server trong nhiều datacenter, bạn có thể thiết lập một DNS nội bộ cho mỗi datacenter tương ứng.
Khi kết thúc hướng dẫn này, bạn sẽ có một server DNS chính là ns1 và một server phụ ns2 (đóng vai trò như server dự phòng).
Ngoài ra, để không bị nhầm lẫn lệnh giữa các server, bài viết này sẽ quy định mã màu như sau:
Bất kỳ lệnh nào chạy trên ns1 sẽ có nền màu xanh lam:
ns1$
Tương tự, bất kỳ lệnh nào chạy trên ns2 sẽ có nền màu đỏ:
ns2$
Lệnh nào chạy trên một trong các client servers sẽ có nền màu xanh lá:
$
Cuối cùng, bất kỳ lệnh nào chạy trên nhiều servers sẽ có nền màu xanh navy:
$
Cuối cùng, hãy nhớ rằng bất kỳ khi nào một lệnh hoặc code block chứa văn bản được làm nổi bật như thế này
thì đây là văn bản quan trọng. Chúng sẽ đánh dấu các chi tiết cần phải thay thế bằng cài đặt của riêng bạn hoặc văn bản được đó cần được sửa đổi hoặc thêm vào tệp cấu hình. Giả sử, văn bản host1.nyc3.example.com
sẽ cần được thay thế bằng FQDN server của riêng bạn.
Bây giờ, hãy bắt đầu bằng cách cài đặt BIND trên cả server DNS chính và server DNS phụ của bạn, ns1 và ns2.
Bước 1: Cài đặt BIND trên server DNS
Trên cả hai server DNS (ns1 và ns2), hãy cập nhật gói apt
bằng cách:
sudo apt update
Sau đó hãy cài đặt BIND vào mỗi server:
Sudo apt install bind9 bind9utils bind9-doc
Hãy thiết lập BIND sang chế độ IPv4. Trên cả hai server, hãy chỉnh sửa tệp cài đặt mặc định named
bằng trình chỉnh sửa văn bản. Ví dụ sau sử dụng nano
:
sudo nano /etc/default/named
Thêm -4
vào cuối của dòng OPTIONS
:
OPTIONS="-u bind -4"
Lưu và thoát khi bạn đã hoàn tất. Nếu sử dụng nano
, bạn có thể ấn tổ hợp phím CTRL + X
, Y
và ENTER
Khởi động lại BIND để áp dụng các thay đổi:
sudo systemctl restart bind9
Bây giờ, BIND đã được cài đặt thành công, hãy chuyển sang bước 2.
Bước 2: Hiệu chỉnh server DNS chính
Cấu hình của BIND bao gồm nhiều tệp như tệp cấu hình chính và named.conf
. Tên các tệp này bắt đầu bằng named
vì đó là tên của tiến trình mà BIND chạy (với named
được rút gọn từ “name daemon”, như trong “domain name daemon”). Bạn sẽ bắt đầu bằng cách cấu hình tệp named.conf.options
.
Cấu hình tệp Options
Trên server ns1, mở file named.conf.options
:
sudo nano /etc/bind/named.conf.options
Ở trên khối options
, hãy tạo mới một khối ACL với tên trusted
. Đây là nơi bạn sẽ định nghĩa danh sách máy khách, từ đó cho phép các truy vấn đệ quy DNS (tức là các server của bạn nằm trong cùng datacenter với ns1). Để thêm ns1, ns2, host1 và host2 vào danh sách máy khách được tin tưởng, thực hiện lệnh dưới đây. Lưu ý thay thế những địa chỉ IP riêng trong ví dụ bằng địa chỉ của bạn.
acl "trusted" {
10.128.10.11; # ns1
10.128.20.12; # ns2
10.128.100.101; # host1
10.128.200.102; # host2
};
options {
. . .
Bây giờ bạn đã có danh sách server DNS tin cậy, giờ thì hãy chỉnh sửa khối options
:
. . .
};
options {
directory "/var/cache/bind";
. . .
}
Bên dưới directory
, thêm các dòng cấu hình được làm nổi bật (và thay thế địa chỉ IP riêng của ns1 thích hợp):
. . .
};
options {
directory "/var/cache/bind";
recursion yes; # enables recursive queries
allow-recursion { trusted; }; # allows recursive queries from "trusted" clients
listen-on { 10.128.10.11; }; # ns1 private IP address - listen on private network only
allow-transfer { none; }; # disable zone transfers by default
forwarders {
8.8.8.8;
8.8.4.4;
};
. . .
};
Lưu ý rằng khối forwarders
sẽ bao gồm hai địa chỉ IP: 8.8.8.8
và 8.8.4.4
. Khối này xác định forwarders, một cơ chế đặc biệt mà BIND sử dụng để giảm lưu lượng liên kết tới các server bên ngoài. BIND cũng có thể sử dụng forwarders để cho phép các truy vấn bởi các server không có truy cập trực tiếp vào internet. Điều này có thể giúp tăng tốc độ phản hồi cho các truy vấn.
Hai địa chỉ IP trong khối này đại diện cho Public DNS Server của Google, nhưng địa chỉ IP của bất kỳ Public DNS Server nào khác cũng có thể hoạt động ở đây. Ví dụ, bạn có thể sử dụng địa chỉ IP của server DNS của Cloudflare (1.1.1.1
) để thay thế.
Sau khi hoàn thành, lưu và đóng tệp named.conf.options
. Lúc này, những server của riêng bạn (server trusted
) mới có thể truy vấn tới server DNS. Tiếp theo, bạn sẽ chỉ định các DNS zone của mình bằng cách cấu hình tệp named.conf.local
.
Cấu hình tệp Local
Trong ns1, mở tệp named.conf.local
để chỉnh sửa:
sudo nano /etc/bind/named.conf.local
Ngoại trừ một vài comments, tệp này sẽ trống. Ở đây bạn sẽ chỉ định các forward zones và reverse zones của mình. Các DNS zone chỉ định phạm vi cụ thể để dễ quản lí và xác định các bản ghi DNS. Vì tất cả các tên miền ví dụ trong hướng dẫn này đều nằm trong phân vùng con nyc3.example.com
, nên bạn sẽ sử dụng nó để làm forward zone. Địa chỉ IP riêng của các server trong ví dụ này đều nằm trong IP 10.128.0.0/16
, ví dụ sau sẽ thiết lập một reverse zone để bạn có thể xác định đảo ngược trong phạm vi đó.
Thêm forward zone với các dòng sau, hãy nhớ thay thế tên zone thành của bạn và địa chỉ IP riêng của server DNS thứ cấp trong allow-transfer
:
zone "nyc3.example.com" {
type primary;
file "/etc/bind/zones/db.nyc3.example.com"; # zone file path
allow-transfer { 10.128.20.12; }; # ns2 private IP address - secondary
};
Giả sử subnet riêng của bạn là 10.128.0.0/16
, hãy thêm reverse zone bằng các dòng sau (lưu ý rằng tên reverse zone của bạn bắt đầu bằng 128.10
là sự đảo ngược của octet 10.128
):
. . .
};
zone "128.10.in-addr.arpa" {
type primary;
file "/etc/bind/zones/db.10.128"; # 10.128.0.0/16 subnet
allow-transfer { 10.128.20.12; }; # ns2 private IP address - secondary
};
Nếu các server của bạn trải dài trên nhiều subnet riêng nhưng lại nằm trong cùng một datacenter, hãy đảm bảo chỉ định thêm một zone và zone file cho mỗi subnet riêng biệt. Khi bạn đã thêm tất cả các zone mong muốn, hãy lưu và đóng tệp named.conf.local
.
Bây giờ khi các zones đã được chỉ định trong BIND, bạn cần tạo các reverse zone files và forward zone files tương ứng.
Khởi tạo forward zone file
Forward zone file là nơi bạn xác định các bản ghi DNS để tra cứu DNS chuyển tiếp. Tức là, khi DNS nhận được một truy vấn tên, ví dụ như host1.nyc3.example.com
, nó sẽ tìm kiếm trong forward zone file để phản hồi địa chỉ IP riêng tương ứng của host1.
Tạo một thư mục nơi chứa các zone file. Theo như tệp cấu hình named.conf.local
, ví trí của zone file sẽ là /etc/bind/zones
:
sudo mkdir /etc/bind/zones
Bạn sẽ dựa trên forward zone file tại mẫu db.local
. Sao chép nó đến vị trí đúng bằng các lệnh sau:
sudo cp /etc/bind/db.local /etc/bind/zones/db.nyc3.example.com
Tiếp đến, hãy chỉnh sửa forward zone file:
sudo nano /etc/bind/zones/db.nyc3.example.com
Nó sẽ chứa những thông tin như sau:
$TTL 604800
@ IN SOA localhost. root.localhost. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS localhost. ; delete this line
@ IN A 127.0.0.1 ; delete this line
@ IN AAAA ::1 ; delete this line
Đầu tiên, bạn hãy chỉnh sửa bản ghi SOA. Thay
localhost
đầu tiên bằng FQDN của ns1, sau đó thay root.localhost
bằng admin.nyc3.example.com
. Mỗi khi chỉnh sửa một zone file, bạn cần tăng giá trị Serial
trước khi khởi động lại quá trình named
. Ở đây, tăng nó lên 3
:
. . .
;
$TTL 604800
@ IN SOA ns1.nyc3.example.com. admin.nyc3.example.com. (
3 ; Serial
. . .
Tiếp theo, xóa 3 bản ghi ở cuối tệp (sau bản ghi SOA). Nếu bạn không chắc chắn xóa những dòng nào thì hãy tìm bằng chú thích ‘delete this line
’.
Ở cuối tệp, thêm các bản ghi server với các dòng sau (thay tên bằng tên của bạn). Lưu ý rằng cột thứ hai chỉ định rằng đây là các bản ghi NS
:
. . .
; name servers - NS records
IN NS ns1.nyc3.example.com.
IN NS ns2.nyc3.example.com.
Bây giờ, thêm các bản ghi A cho các server thuộc về zone này. Điều này bao gồm bất kỳ server nào có tên kết thúc bằng nyc3.example.com
(thay tên và địa chỉ IP riêng). Thực hiện thêm các bản ghi A cho ns1, ns2, host1 và host2 như sau:
. . .
; name servers - A records
ns1.nyc3.example.com. IN A 10.128.10.11
ns2.nyc3.example.com. IN A 10.128.20.12
; 10.128.0.0/16 - A records
host1.nyc3.example.com. IN A 10.128.100.101
host2.nyc3.example.com. IN A 10.128.200.102
Forward zone file cuối cùng của bạn sẽ chứa nội dung sau:
$TTL 604800
@ IN SOA ns1.nyc3.example.com. admin.nyc3.example.com. (
3 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
; name servers - NS records
IN NS ns1.nyc3.example.com.
IN NS ns2.nyc3.example.com.
; name servers - A records
ns1.nyc3.example.com. IN A 10.128.10.11
ns2.nyc3.example.com. IN A 10.128.20.12
; 10.128.0.0/16 - A records
host1.nyc3.example.com. IN A 10.128.100.101
host2.nyc3.example.com. IN A 10.128.200.102
Lưu và đóng tệp db.nyc3.example.com
. Sau đó hãy chuyển sang bước tiếp theo.
Khởi tạo reverse zone file
Reverse zone files là nơi bạn xác định các bản ghi DNS PTR để tra cứu các DNS ngược. Đó là, khi DNS nhận được một truy vấn bằng địa chỉ IP, ví dụ như 10.128.100.101
, nó sẽ tìm kiếm trong các reverse zone files để phản hồi FQDN tương ứng, trong trường hợp này là host1.nyc3.example.com
.
Trên ns1, với mỗi reverse zone files được chỉ định trong tệp named.conf.local
, hãy tạo một reverse zone file. Bạn sẽ dựa trên reverse zone file mẫu db.127
để tạo các tệp khác. BIND sử dụng tệp này để lưu trữ thông tin cho giao diện loopback cục bộ; 127
là octet đầu tiên của địa chỉ IP đại diện cho localhost (127.0.0.1
). Sao chép tệp này vào vị trí đúng với các lệnh sau (thay thế tên tệp đích để phù hợp với định nghĩa reverse zone của bạn):
sudo cp /etc/bind/db.127 /etc/bind/zones/db.10.128
Chỉnh sửa reverse zone file tương ứng với các reverse zones được xác định trong tệp named.conf.local
:
sudo nano /etc/bind/zones/db.10.128
Ban đầu, tệp sẽ chứa nội dung như sau:
$TTL 604800
@ IN SOA localhost. root.localhost. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS localhost. ; delete this line
1.0.0 IN PTR localhost. ; delete this line
Tương tự như forward zone file, bạn sẽ phải chỉnh sửa bản ghi SOA và tăng giá trị số phiên bản (serial):
@ IN SOA ns1.nyc3.example.com. admin.nyc3.example.com. (
3 ; Serial
. . .
Bây giờ hãy xóa hai bản ghi ở cuối tệp (sau bản ghi SOA). Nếu không chắc chắn dòng nào cần được xóa, hãy chú ý tới những dòng đánh dấu bởi “Delete this line
“.
Ở cuối tệp, thêm các bản ghi server bằng các dòng sau (thay thế bằng tên của riêng bạn). Lưu ý rằng cột thứ hai chỉ ra rằng đây là các bản ghi NS
:
. . .
; name servers - NS records
IN NS ns1.nyc3.example.com.
IN NS ns2.nyc3.example.com.
Tiếp theo, thêm các bản ghi PTR
cho tất cả các server có địa chỉ IP trên subnet của zone file đang chỉnh sửa. Trong phạm vi bài viết này sẽ bao gồm tất cả các server vì chúng đều ở trong subnet 10.128.0.0/16
. Lưu ý rằng cột đầu tiên bao gồm hai octet cuối cùng của địa chỉ IP riêng của server theo thứ tự đảo ngược. Hãy đảm bảo thay thế các tên và địa chỉ IP riêng để phù hợp với server của bạn:
. . .
; PTR Records
11.10 IN PTR ns1.nyc3.example.com. ; 10.128.10.11
12.20 IN PTR ns2.nyc3.example.com. ; 10.128.20.12
101.100 IN PTR host1.nyc3.example.com. ; 10.128.100.101
102.200 IN PTR host2.nyc3.example.com. ; 10.128.200.102
Reverse zone file cuối cùng của bạn sẽ chứa nội dung sau:
$TTL 604800
@ IN SOA nyc3.example.com. admin.nyc3.example.com. (
3 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
; name servers
IN NS ns1.nyc3.example.com.
IN NS ns2.nyc3.example.com.
; PTR Records
11.10 IN PTR ns1.nyc3.example.com. ; 10.128.10.11
12.20 IN PTR ns2.nyc3.example.com. ; 10.128.20.12
101.100 IN PTR host1.nyc3.example.com. ; 10.128.100.101
102.200 IN PTR host2.nyc3.example.com. ; 10.128.200.102
Lưu và đóng reverse zone file (lặp lại phần này nếu bạn cần thêm reverse zone file). Bạn đã hoàn tất chỉnh sửa tệp của mình, tiếp theo bạn có thể kiểm tra các tệp của mình để tìm lỗi.
Kiểm tra cú pháp cấu hình BIND
Chạy câu lệnh sau để kiểm tra cú pháp của tệp named.conf*
:
sudo named-checkconf
Nếu tệp cấu hình của bạn không có lỗi cú pháp, sẽ không có bất kỳ thông báo lỗi nào xuất hiện và bạn sẽ trở lại dấu nhắc shell. Nếu có vấn đề với tệp cấu hình, hãy xem lại thông báo lỗi và phần Configure Primary DNS Server
, sau đó thử lại lệnh named-checkconf
.
Lệnh named-checkzone
có thể được sử dụng để kiểm tra tính chính xác của các zone file. Đối số đầu tiên chỉ định tên zone, và đối số thứ hai chỉ định zone file tương ứng, hai đối số này đều được xác định trong tệp named.conf.local
.
Ví dụ, để kiểm tra cấu hình forward zone nyc3.example.com
, hãy chạy lệnh sau (thay đổi tên để phù hợp với forward zone và tệp của bạn):
sudo named-checkzone nyc3.example.com /etc/bind/zones/db.nyc3.example.com
Output
zone nyc3.example.com/IN: loaded serial 3
OK
Để kiểm tra cấu hình reverse zone 128.10.in-addr.arpa
, hãy chạy lệnh sau (thay đổi số để phù hợp với reverse zone và tệp của bạn):
sudo named-checkzone 128.10.in-addr.arpa /etc/bind/zones/db.10.128
Khi tất cả các tệp cấu hình và vùng không có lỗi, bạn đã sẵn sàng để khởi động lại dịch vụ BIND.
Khởi động lại BIND
Để khởi động lại BIND, thực hiện lệnh sau:
sudo systemctl restart bind9
Nếu bạn đã cấu hình tường lửa UFW, hãy mở truy cập đến BIND bằng cách nhập lệnh:
sudo ufw allow Bind9
Server DNS chính của bạn đã sẵn sàng để phản hồi lại truy vấn DNS. Hãy chuyển sang bước tiếp theo để hiệu chỉnh server DNS thứ cấp.
Bước 3: Cấu hình server DNS thứ cấp
Trong hầu hết các môi trường, việc thiết lập một server DNS phụ sẽ hỗ trợ phản hồi các yêu cầu nếu server chính không khả dụng. Thêm vào đó, quá trình định cấu hình server DNS phụ đơn giản hơn nhiều so với việc thiết lập server chính.
Trên ns2, chỉnh sửa tệp named.conf.options
sudo nano /etc/bind/named.conf.options
Phía trên cùng của tệp, thêm ACL với địa chỉ IP riêng của tất cả server tin cậy:
acl "trusted" {
10.128.10.11; # ns1
10.128.20.12; # ns2
10.128.100.101; # host1
10.128.200.102; # host2
};
options {
Phía dưới directory
, thêm dòng bên dưới:
. . .
recursion yes;
allow-recursion { trusted; };
listen-on { 10.128.20.12; }; # ns2 private IP address
allow-transfer { none; }; # disable zone transfers by default
forwarders {
8.8.8.8;
8.8.4.4;
};
. . .
Lưu và đóng tệp named.conf.options
. Tệp này phải giống với tệp named.conf.options
của ns1 trừ khi nó được cấu hình để nghe trên địa chỉ IP riêng của ns2.
Bây giờ hãy chỉnh sửa tệp named.conf.local
:
sudo nano /etc/bind/named.conf.local
Xác định các zone phụ tương ứng với các zone trên server DNS chính. Lưu ý rằng với loại slave
, tệp sẽ không chứa đường dẫn và có một lệnh masters
sẽ được đặt thành địa chỉ IP riêng của server DNS chính. Nếu bạn đã xác định nhiều reverse zone trong server DNS chính, hãy đảm bảo thêm tất cả chúng vào đây:
zone "nyc3.example.com" {
type slave;
file "db.nyc3.example.com";
masters { 10.128.10.11; }; # ns1 private IP
};
zone "128.10.in-addr.arpa" {
type slave;
file "db.10.128";
masters { 10.128.10.11; }; # ns1 private IP
};
Lưu ý: Vietnix sẽ tránh các thuật ngữ như “master” và “slave” bất cứ khi nào có thể vì chúng mang lại ý nghĩa khá tiêu cực. Trong các phiên bản BIND gần đây hơn, bạn có thể sử dụng primaries
thay vì masters
và secondary
thay vì slave
. Tuy nhiên, phiên bản BIND được cài đặt từ repositories Ubuntu 20.04 mặc định sẽ không nhận ra các tuỳ chọn này, nghĩa là bạn phải sử dụng thuật ngữ cũ trừ khi nâng cấp lên phiên bản cao hơn.
Bây giờ hãy lưu và đóng tệp named.conf.local
.
Chạy câu lệnh sau để kiểm tra tính hợp lệ của tệp cấu hình:
sudo named-checkconf
Nếu không có bất cứ lỗi này, hãy khởi động lại BIND:
sudo systemctl restart bind9<br>
Cuối cùng, hãy cho phép các kết nối DNS đến server bằng cách thay đổi tường lửa UFW:
sudo ufw allow Bind9
Bước tiếp theo bạn phải cấu hình các clients server để sử dụng các server DNS riêng của bạn.
Bước 4: Hiệu chỉnh DNS Clients
Trước khi tất cả các server trong danh sách ACL đáng tin cậy
có thể truy vấn tới server DNS của bạn, bạn sẽ cần thực hiện cấu hình mỗi server để sử dụng ns1 và ns2 với vai trò name server.
Giả sử các server khách đang chạy Ubuntu, bạn sẽ cần biết được thiết bị nào đang liên kết với mạng riêng của mình. Bạn có thể thực hiện điều này bằng cách truy vấn subnet riêng tư với lệnh ip address
. Chạy lệnh sau trên mỗi máy khách của bạn, thay thế subnet bằng mạng của riêng bạn:
ip address show to 10.128.0.0/16
Output
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
inet 10.128.100.101/16 brd 10.128.255.255 scope global eth1
valid_lft forever preferred_lft forever
Trong ví dụ này, interface riêng tư là eth1
. Bạn có thể thay đổi thành interface riêng tư tương ứng trên các server của riêng bạn.
Trên Ubuntu 20.04, mạng được cấu hình với Netplan, một bản tính năng trừu tượng cho phép bạn viết chuẩn hoá cấu hình mạng và áp dụng nó cho phần mềm mạng backend tương thích. Để cấu hình DNS, bạn cần viết một tệp cấu hình Netplan.
Tạo một tệp mới trong /etc/netplan
gọi là 00-private-nameservers.yaml
:
sudo nano /etc/netplan/00-private-nameservers.yaml
Bên trong tệp cấu hình Netplan, thêm nội dung sau. Bạn sẽ cần sửa đổi interface của mạng riêng, các địa chỉ của server DNS ns1 và ns2 và khu vực DNS:
Lưu ý: Netplan sử dụng định dạng chuỗi dữ liệu YAML cho các tệp cấu hình. Do YAML sử dụng lùi đầu dòng và khoảng trắng để xác định cấu trúc dữ liệu của nó, vì vậy hãy đảm bảo rằng định nghĩa của bạn sử dụng lùi đầu dòng nhất quán để tránh lỗi. Bạn có thể khắc phục sự cố tệp YAML của mình bằng cách sử dụng một trình kiểm tra YAML như YAML Lint.
network:
version: 2
ethernets:
eth1: # Private network interface
nameservers:
addresses:
- 10.128.10.11 # Private IP for ns1
- 10.132.20.12 # Private IP for ns2
search: [ nyc3.example.com ] # DNS zone
Lưu và đóng tệp khi bạn hoàn tất.
Tiếp theo, cho Netplan sử dụng tệp cấu hình mới bằng cách sử dụng lệnh netplan try
. Nếu có vấn đề gây mất kết nối mạng, Netplan sẽ tự động hoàn tác các thay đổi sau một khoảng thời gian chờ đợi:
sudo netplan try
Output
Warning: Stopping systemd-networkd.service, but it can still be activated by:
systemd-networkd.socket
Do you want to keep these settings?
Press ENTER before the timeout to accept the new configuration
Changes will revert in 120 seconds
Nhấn ENTER
để chấp nhận cấu hình mới.
Bây giờ, kiểm tra resolver DNS của hệ thống để xác định liệu cấu hình DNS của bạn đã được áp dụng hay chưa bằng cách chạy lệnh sau:
sudo systemd-resolve --status
Kéo xuống cho đến khi bạn tìm thấy phần interface mạng riêng của mạng. Địa chỉ IP riêng của các server DNS sẽ được liệt kê đầu tiên, tiếp theo là một số giá trị dự phòng. Tên miền của sẽ được liệt kê ở sau DNS Domain
:
Output
. . .
Link 3 (eth1)
Current Scopes: DNS
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
DNS Servers: 10.128.10.11
10.128.20.12
67.207.67.2
67.207.67.3
DNS Domain: nyc3.example.com
. . .
Bây giờ, máy khách Ubuntu của bạn đã được hiệu chỉnh để sử dụng server DNS nội bộ.
Bước 5: Kiểm tra thử Clients
Sử dụng lệnh nslookup
để kiểm tra xem các máy khách của bạn có thể truy vấn tới server hay không. Bạn nên thực hiện điều này trên tất cả các máy khách mà bạn đã cấu hình và nằm trong danh sách ACL được tin tưởng
.
Bây giờ, hãy bắt đầu bằng một truy vấn chuyển tiếp.
Tra cứu chuyển tiếp
Để thực hiên tra cứu chuyển tiếp nhằm lấy địa chỉ IP của host1.nyc3.example.com
, bạn có thể chạy lệnh sau:
nslookup host1
Khi truy vấn tên host1
, DNS sẽ tự mở rộng thành host1.nyc3.example.com
vì tuỳ chọn tìm kiếm (Search
option) đã được đặt thành tên miền riêng của bạn và các DNS sẽ cố gắng tìm kiếm tên miền đó trước khi tìm kiếm host trên các nơi khác. Lệnh sẽ trả về kết quả như sau:
Output
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
Name: host1.nyc3.example.com
Address: 10.128.100.101
Tiếp theo bạn có thể thực hiện kiểm thử tra cứu ngược.
Tra cứu ngược
Để kiểm thử tra cứu ngược, hãy truy vấn server DNS với địa chỉ IP riêng của host1:
nslookup 10.128.100.101
Bạn sẽ nhận được kết quả như sau:
Output
11.10.128.10.in-addr.arpa name = host1.nyc3.example.com.
Authoritative answers can be found from:
Nếu tất cả các tên và địa chỉ IP resolve đều đúng giá trị, điều đó có nghĩa các zone file của bạn đã được cấu hình đúng. Nếu bạn không may gặp lỗi, hãy xem lại các zone file trên server DNS chính (ví dụ như db.nyc3.example.com
và db.10.128
)
Bước cuối cùng, hãy tìm hiểu cách duy trì các bản ghi zone của bạn.
Bước 6: Duy trì bản ghi DNS
Bây giờ khi đã có một DNS nội bộ hoạt động, bạn cần duy trì các bản ghi DNS để phản ánh chính xác môi trường server của bạn.
Thêm Host vào DNS
Bất cứ khi nào muốn thêm một server vào môi trường của mình (trong cùng một datacenter), bạn sẽ phải thêm nó vào DNS. Đây là danh sách các bước mà bạn cần thực hiện:
Server chính
- Forward zone file: Thêm
A
record cho server mới, tăng giá trị củaSerial
. - Reverse zone file: Thêm
PTR
record cho server mới, tăng giá trị củaSerial
. - Thêm địa chỉ IP riêng của server mới vào ACL
đáng tin cậy
(named.conf.options
)
Để kiểm tra các tệp cấu hình:
sudo named-checkconf
sudo named-checkzone nyc3.example.com /etc/bind/zones/db.nyc3.example.com
sudo named-checkzone 128.10.in-addr.arpa /etc/bind/zones/db.10.128
Tải lại BIND:
sudo systemctl reload bind9
Bây giờ server chính của bạn đã được cấu hình cho host mới.
Server phụ
Hãy thêm địa chỉ IP riêng của server mới vào mục trusted
ACL trong tệp named.conf.options
.
Kiểm tra cú pháp tệp cấu hình:
Sudo named-checkconf
Sau đó hãy tải lại BIND:
Sudo systemctl reload bind9
Bây giờ server phụ của bạn đã chấp nhận kết nối từ host mới.
Cấu hình server mới để sử dụng DNS của bạn bằng cách:
- Hiệu chỉnh
/etc/resolv.conf
- Kiểm thử bằng lệnh
nslookup
Xoá host khỏi DNS
Nếu bạn muốn loại bỏ một host khỏi môi trường hoặc chỉ muốn loại nó khỏi DNS, chỉ cần loại bỏ tất cả những gì đã được thêm khi bạn thêm host vào DNS (tức là ngược lại với các bước trước đó).
Lời kết
Sau khi đã cấu hình DNS nội bộ xong, hãy đảm bảo rằng các máy chủ DNS của bạn được bảo trì đúng cách. Nếu cả hai máy chủ trở nên không khả dụng, các dịch vụ và ứng dụng của bạn phụ thuộc vào chúng cũng sẽ ngừng hoạt động. Chúc bạn thực hiện cấu hình thành công và đừng quên theo dõi những bài viết hướng dẫn tiếp theo của Vietnix nhé.