Table of Contents

No table of contents

Cấu Hình BIND Như Một Cho Máy Chủ DNS Nội Bộ Trên Ubuntu 20.04

Posted on: 9 tháng 11 năm 2022

Ubuntu

Giới thiệu

Một phần quan trọng trong việc quản lý cấu hình và cơ sở hạ tầng máy chủ là cách sắp xếp giao diện và địa chỉ IP theo một trật tự dựa vào tên gọi. Điều cần làm là bạn phải thiết lập hệ thống tên miền DNS một cách hợp lý. Việc sử dụng tên miền chất lượng( FQDNs) thay vì địa chỉ IP sẽ giúp tối ưu hóa và tăng khả năng bảo trì các tệp cấu hình. Do vậy, thiết lập DNS cho VPS là một cách tuyệt vời để cải thiện trình quản lý máy chủ của bạn. Trong bài viết này, chúng tôi sẽ hướng dẫn bạn cách thiết lập máy chủ DNS nội bộ bằng cách sử dụng 2 máy chủ Ubuntu 20.04. Bạn sẽ phải sử dụng các phần mềm máy chủ định danh BIND (BIND9) để phân giải tên VPS và địa chỉ IP. Việc làm này là không thể thiếu nếu như bạn có nhu cầu mở rộng tài nguyên và cần cùng lúc nhiều VPS.

Yêu cầu về cơ sở hạ tầng

Để có thể thực hiện được việc tùy chỉnh cấu hình BIND, bạn cần đảm bảo các cơ sở hạ tầng sau. Và phải đảm bảo mỗi VPS trong cùng một server đều đã được bật mạng riêng tư.

  • Máy chủ Ubuntu 20.04 sẽ đóng vai trò như một máy chủ DNS chính( NS1).
  • Bạn cũng được khuyên là nên có thêm một máy chủ Ubuntu 20.04 thứ hai như một máy chủ DNS phụ( NS2).
  • Có ít nhất là một máy chủ bổ sung. Bài viết này giả định bạn đọc có 2 máy chủ bổ sung, được gọi là máy chủ khách. Một lưu ý là 2 máy chủ khách này phải được tạo trong cùng một server, nơi đặt các máy chủ DNS của bạn.

Trên mỗi máy chủ, hãy định cấu hình sudo và thiết lập tường lửa để đảm bảo an toàn. Nếu lần đầu tiên thực hiện điều này, hãy tìm hiểu các khái niệm liên quan đến DNS trước tiên.

Cơ sở hạ tầng và mục tiêu chính

Chúng tôi giả định:

  • Bạn có 2 máy chủ, được chỉ định làm máy chủ định danh DNS. Để dễ phân biệt, ta gọi đó là NS1 và NS2 .
  • Tương tự, 2 máy chủ khách bổ sung lần lượt được gọi là Host1 và Host2. Bạn cũng có thể thêm bao nhiêu máy chủ khách tùy thích.
  • Tất cả các loại máy chủ nêu trên đều tạo lập và quản lý trong cùng một trung tâm dữ liệu. Chúng ta sẽ giả định trung tâm dữ liệu này được gọi là nyc3.
  • Tất cả các máy chủ này đều phải được bật mạng riêng và nằm trên mạng con 10.128.0.0/16 ( bạn có thể sẽ phải tùy chỉnh sao cho phù hợp với máy chủ của mình).
  • Tất cả các máy chủ trên đều được kết nối với một dự án đang chạy example.com. Trong bài viết này, chúng tôi sẽ hướng dẫn bạn cách thiết lập và trình bày hệ thống DNS nội bộ. Vì vậy, bạn có thể sử dụng bất kỳ tên miền nào bạn muốn thay thế example.com. Việc khuyến khích người dùng sử dụng các tên miền thuộc quyền sở hữu có thể giúp hạn chế xung đột với các miền được định tuyến công khai.

Với những giả định nêu trên, các ví dụ được đặt ra trong bài viết này sẽ sử dụng lược đồ đặt tên dựa trên miền phụ nyc3.example.com để tham chiếu. Do đó, một tên miền riêng tư đầy đủ các điều kiện (FQDN) của Host1 là host1.nyc3.example.com. Bảng phụ lục sau đây tổng kết các thông tin liên quan dược sử dụng xuyên xuốt trong các ví dụ.

Column 1 Vai trò FQDN riêng Địa chỉ IP riêng
NS1 Máy chủ DNS 1 ns1.nyc3.example.com 10.128.10.11
NS2 Máy chủ DNS 2 ns2.nyc3.example.com 10.128.20.12
Host1 Máy chủ bổ sung 1 host1.nyc3.example.com 10.128.100.101
Host2 Máy chủ bổ sung 2 host2.nyc3.example.com 10.128.200.102

Lưu ý: Các thiết lập trên VPS của bạn sẽ khác. Nhưng các thông tin về địa chỉ IP, tên mẫu đều sẽ được sử dụng để trình bày cách tùy chỉnh cấu hình máy chủ DNS. Đương nhiên, bạn hoàn toàn có thể điều chỉnh những điều này sao cho phù hợp nhất bằng cách thay đổi tên máy chủ và địa chỉ IP bằng tên của bạn. Không nhất thiết phải sử dụng tên vùng trong quá trình đặt tên của bạn, Nhưng trong bài viết này, chúng tôi sẽ sử dụng nó để biểu thị rằng các máy chủ này nằm trong một trung tâm dữ liệu cụ thể. Nếu bạn chạy máy chủ cùng lúc trong nhiều trung tâm dữ liệu, bạn có thể thiết lập một DNS nội bộ trong mỗi trung tâm dữ liệu tương ứng.

Sau khi hoàn thành những hướng dẫn trên, bạn hiện có một máy chủ DNS chính( NS1) và một máy chủ DNS phụ( NS2) sẽ phục vụ như một bản sao lưu. Khi bạn làm theo hướng dẫn tron bài viết này của chúng tôi, sẽ có lúc bạn phải chạy các lệnh nhất định trên một máy chủ cụ thể. Nhưng lưu ý là ở bất kỳ lệnh nào chạy trên NS1 cũng sẽ phải có nền màu xanh lam, như sau:

ns1$

Tương tự như vậy, với bất kỳ lệnh nào phải chạy trên NS2, đều sẽ có nền màu đỏ:

ns2$

Và bất kỳ lệnh nào phải chạy trên một trong các máy chủ định danh của bạn sẽ có nền màu xanh lục:

Và bất kỳ lệnh nào phải chạy trên nhiều máy chủ sẽ có nền xanh đậm như sau:


Cuối cùng, hãy lưu ý rằng, bất kỳ lệnh hay dòng code chứa văn bảng nào được ký hiệu như này, đều có nghĩa là nó quan trọng. Kiểu đánh dấu như thế này sẽ xuất hiện khá nhiều trong bài hướng dẫn. Nhằm để biểu thị các chi tiết cần được thay thế bằng cài đặt của riêng bạn hoặc văn bản được đánh dấu cần phải sửa đổi cũng như cần thêm vào tệp cấu hình. Ví dụ như khi bạn thấy một cái gì đó như host1.nyc3.example.com, có nghĩa là hãy thay thế nó bằng FQDN của máy chủ 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ả máy chủ DNS chính và phụ của bạn.

Bước 1: Cài đặt BIND trên máy chủ DNS

Trên cả hai máy chủ DNS là NS1NS2, hãy cập nhật bộ đệm ẩn gói apt bằng cách nhập:

  1. sudo apt update

Sau đó tiến hành cài đặt BIND trên mỗi máy chủ:

  1. sudo apt install bind9 bind9utils bind9-doc

Trên cả hai máy chủ, hãy chỉnh sửa tệp cài đặt mặc định được đặt tên theo ý thích hoặc chủ đích trước đó của bạn bằng cách sử dụng nano:

  1. sudo nano /etc/default/named

Và hãy thêm -4 vào tham số OPTIONS:

/etc/default/named
. . .
OPTIONS="-u bind -4"
}

Đến đây thì bạn đã hoàn tất quá trình cài đặt BIND.

Bước 2: Tùy chỉnh cấu hình Máy chủ DNS chính

Dành cho những ai chưa biết, cấu hình của BIND có khá nhiều tệp, bao gồm các tệp cấu hình chính, name.conf. Các tên tệp này bắt đầu bằng tên bởi vì đó là tên quá trình mà BIND khởi chạy (với tên là viết tắt của "name daemon'', như trong “domain name daemon”). Chúng tôi sẽ bắt đầu với việc tùy chỉnh cấu hình với tệp name.conf.options.

Định cấu hình của các tệp tùy chọn

Trên NS1, hãy mở tệp names.conf.options để chỉnh sửa:

ns1$ sudo nano /etc/bind/named.conf.options

Phía trên khối options hiện có, hãy tạo một khối ACL (danh sách kiểm soát lương truy cập) mới được gọi là Trust. Đây là nơi bạn sẽ xác định danh sách các máy khách được phép các truy vấn DNS (tức là các máy chủ của bạn nằm trong cùng một trung tâm dữ liệu với NS1). Thực hiện lệnh sau để thêm NS1, NS2, Host1 và cả Host2 vào danh sách các máy khách đáng tin cậy của bạn. Và phải đảm bảo thay thế các địa chỉ IP riêng mẫu bằng các địa chỉ IP của riêng bạn:

/etc/bind/named.conf.options — 1 of 3
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ó một danh sách các máy khách DNS đáng tin cậy, bạn đã có thể bắt đầu tùy chỉnh sửa khối options. Đây hiện là phần bắt đầu của khối:

/etc/bind/named.conf.options — 2 of 3
      . . .
};

options {
        directory "/var/cache/bind";
        . . .
}
    . . .
}

Bây giờ, ngay dưới phần chỉ thị directory hãy thêm các dòng cấu hình dưới đây. Và thay thế bằng địa chỉ IP riêng NS1 thích hợp.

/etc/bind/named.conf.options — 3 of 3
. . .

};

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 ý ở khối forwarders sẽ bao gồm 2 địa chỉ IP 8.8.8.88.8.4.4. Khối này được hiểu như là một bộ chuyển tiếp, một cơ chế đặc biệt mà BIND sử dụng để giảm lưu lượng truy cập qua các liên kết đến bên ngoài các máy chủ định danh. BIND cũng có thể sử dụng trình chuyển tiếp này để cho phép việc truy vấn của các máy chủ không có quyền truy cập trực tiếp vào internet. Điều này có thể giúp tăng nhanh khả năng phản hồi các truy vấn bằng cách giảm tải trên mạng cục bộ. Hai địa chỉ IP trong khối này đại diện cho trình phân giải DNS công khai của Google. Ví dụ: bạn có thể sử dụng địa chỉ IP của máy chủ DNS của Cloudflare (1.1.1.1) để thay thế. Khi bạn hoàn tất các quá trình trên, hãy đóng tệp và lưu tệp name.conf.options. Cấu hình trên chỉ định rằng chỉ các máy chủ của riêng bạn (là những máy chủ trust) mới có thể truy vấn máy chủ DNS của bạn cho các miền khác bên ngoài. Tiếp theo, bạn sẽ chỉ định các vùng DNS của mình bằng cách định cấu hình tệp names.conf.local.

Định cấu hình tệp cục bộ

Trên NS1, mở tệp name.conf.local và tiến hành chỉnh sửa:

NS1$ sudo nano /etc/bind/named.conf.local

Tại các vị trí tệp còn trống, bạn sẽ chỉ định các vùng chuyển tiếp và đảo ngược của mình. Vùng DNS được chỉ định trong một phạm vi cụ thể để quản lý và xác định các bản ghi. Bởi vì tất cả các miền mẫu được sử dụng trong hướng dẫn này đều sẽ nằm trong miền phụ nyc3.example.com, vậy nên hãy sử dụng miền đó làm vùng chuyển tiếp của mình. Vì các địa chỉ IP riêng của máy chủ mẫu đều nằm trong không gian IP 10.128.0.0/16 , nên ở ví dụ sau sẽ thiết lập vùng đảo ngược để chúng ta có thể xác định tra cứu ngược trong phạm vi đó. Thêm vùng chuyển tiếp với các dòng sau, thay thế tên vùng bằng địa chỉ IP riêng của máy chủ DNS phụ của bạn và của máy chủ DNS phụ trong lệnh allow-transfernhư sau:

/etc/bind/named.conf.local — 1 of 2
. . .

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ử rằng mạng con riêng của chúng tôi là 10.128.0.0/16, hãy thêm vùng đảo ngược bằng các dòng sau ( lưu ý rằng tên vùng đảo ngược của chúng tôi bắt đầu bằng tên 128.10đảo ngược của của 10.128 ):

/etc/bind/named.conf.local — 2 of 2


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 máy chủ của bạn sử dụng nhiều mạng con riêng tư nhưng đều cùng nằm trong cùng một trung tâm dữ liệu, hãy đảm bảo bạn đã chỉ định một vùng và tệp vùng bổ sung cho mỗi mạng con riêng biệt. Khi bạn hoàn tất việc thêm tất cả các vùng mong muốn của mình, hãy đóng và lưu tệp named.conf.local.

Bây giờ các vùng của bạn đã được chỉ định trong BIND, bạn cần tạo các tệp vùng chuyển tiếp và đảo ngược tương ứng.

Tạo tệp vùng chuyển tiếp

Tệp vùng chuyển tiếp là nơi bạn xác định các bản ghi DNS để tra cứu các DNS chuyển tiếp. Hiểu đơn giản là khi DNS nhận được một truy vấn tên, ví dụ: host1.nyc3.example.com, nó sẽ tìm kiếm trong tệp vùng chuyển tiếp để phân giải địa chỉ IP riêng tương ứng của Host1. Tạo thư mục nơi các tệp vùng của bạn sẽ được lưu trữ. Theo cấu hình names.conf.local, vị trí đó phải là / etc / bind / zone:

NS1$ sudo mkdir /etc/bind/zones

Chúng ta sẽ căn cứ vào các tệp ở vùng chuyển tiếp db.local. Sao chép nó vào vị trí thích hợp bằng các lệnh sau:

NS1$ sudo cp /etc/bind/db.local /etc/bind/zones/db.nyc3.example.com

Tiếp theo, hãy chỉnh sửa tệp vùng chuyển tiếp của bạn:

NS1$ sudo nano /etc/bind/zones/db.nyc3.example.com

Cuối cùng, nó sẽ chứa nội dung như sau:

etc/bind/zones/db.nyc3.example.com — original
$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 sẽ muốn chỉnh sửa bản ghi SOA. Thay thế localhost đầu tiên bằng FQDN của** NS1**, sau đó thay root.localhost bằng admin.nyc3.example.com. Mỗi khi bạn chỉnh sửa tệp vùng, bạn cần tăng giá trị Serial trước khi khởi động lại quy trình đã đặt name. Tại đây, hãy tăng nó lên 3:

/etc/bind/zones/db.nyc3.example.com — updated 1 of 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 dòng nào cần xóa, thì chúng được đánh dấu bằng nhận xét đọc delete this line trong ví dụ trước.

Ở cuối tệp, thêm các bản ghi máy chủ định danh của bạn bằng các dòng sau (thay thế tên bằng tên của riêng bạn). Lưu ý rằng cột thứ hai chỉ định rằng đây là các bản ghi NS:

/etc/bind/zones/db.nyc3.example.com — updated 2 of 3
. . .

; 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 máy chủ của bạn thuộc vùng này. Điều này bao gồm bất kỳ máy chủ nào có tên bạn muốn kết thúc bằng .nyc3.example.com (thay thế tên và địa chỉ IP riêng của bạn). Sử dụng tên mẫu và địa chỉ IP riêng của chúng tôi, chúng tôi sẽ thêm các bản ghi A cho NS1, NS2, Host1Host2 như sau:

/etc/bind/zones/db.nyc3.example.com — updated 3 of 3
. . .

; 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

Tệp vùng chuyển tiếp ví dụ cuối cùng của chúng tôi sẽ chứa những nội dung sau:

/etc/bind/zones/db.nyc3.example.com — updated
$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

Đóng và lưu tệp db.nyc3.example.com lại. Bây giờ chúng ta hãy chuyển sang các tệp vùng đảo ngược.

Tạo (các) tệp vùng đảo ngược

Tệp vùng đảo ngược là nơi bạn xác định bản ghi DNS PTR để tra cứu DNS ngược. Nghĩa là, khi DNS nhận được một truy vấn theo địa chỉ IP, ví dụ: 10.128.100.101, nó sẽ tìm trong (các) tệp vùng đảo ngược để phân giải FQDN, host1.nyc3.example.com tương ứng trong trường hợp này.

Trên NS1, đối với mỗi vùng đảo ngược được chỉ định trong tệp names.conf.local, hãy tạo tệp vùng đảo ngược. Chúng tôi sẽ căn cứ (các) tệp vùng đảo ngược mẫu của mình trên tệp vùng db.127 mẫu. BIND sử dụng tệp này để lưu trữ thông tin cho giao diện loopback cục bộ; 127 là nhóm ký tự đầ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í thích hợp bằng các lệnh sau:

NS1$ sudo cp /etc/bind/db.127 /etc/bind/zones/db.10.128

Chỉnh sửa tệp vùng đảo ngược tương ứng với vùng đảo ngược được xác định trong names.conf.local:

NS1$ sudo nano /etc/bind/zones/db.10.128

Ban đầu, bạn sẽ có các tếp chứa nội dung như sau:

/etc/bind/zones/db.10.128 — original
$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

Thực hiện tương tự như ví dụ ở tệp vùng chuyển tiếp, bạn sẽ muốn chỉnh sửa bản ghi SOA và tăng giá trị nối tiếp:

/etc/bind/zones/db.10.128 — updated 1 of 3
@       IN      SOA     ns1.nyc3.example.com .  admin . nyc3.example.com . (
                               3          ; Serial

                              . . .

Bây giờ, bạn cần xóa 2 bản ghi ở cuối tệp (sau bản ghi SOA). Nếu bạn không chắc chắn dòng nào cần xóa, chúng được đánh dấu bằng nhận xét delete this line. Ở cuối tệp, thêm các bản ghi máy chủ định danh của bạn bằng các dòng sau (thay thế tên bằng tên của riêng bạn). Lưu ý rằng cột thứ hai chỉ định rằng đây là các bản ghi NS:

/etc/bind/zones/db.10.128 — updated 2 of 3
. . .

; name servers - NS records
      IN      NS      ns1.nyc3.example.com.
      IN      NS      ns2.nyc3.example.com.
}

Sau đó, thêm bản ghi PTR cho tất cả các máy chủ của bạn có địa chỉ IP trên mạng con của tệp vùng mà bạn đang chỉnh sửa. Trong ví dụ này của chúng tôi, nó bao gồm tất cả các máy chủ bởi vì chúng đều nằm trên mạng con 10.128.0.0/16. Lưu ý rằng cột đầu tiên bao gồm 2 ký tự cuối cùng của địa chỉ IP riêng của máy chủ của bạn theo thứ tự đảo ngược. Đảm bảo thay thế tên và địa chỉ IP riêng để khớp với máy chủ của bạn:

/etc/bind/zones/db.10.128 — updated 3 of 3
. . .

; 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

Tệp vùng đảo ngược mẫu cuối cùng của bạn sẽ tương tự như hình sau:

/etc/bind/zones/db.10.128 — updated
$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 tệp vùng đảo ngược (lặp lại bước này nếu bạn cần thêm nhiều tệp vùng đảo ngược). Bạn đã chỉnh sửa xong các tệp của mình, vì vậy, 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ấu hình BIND

Chạy lệnh sau để kiểm tra cú pháp của tệp named.conf:

NS1$ sudo named-checkconf

Nếu các tệp cấu hình đã được đặt tên của bạn không có bất kỳ lỗi cú pháp nào, thì sẽ không có thông báo lỗi và bạn sẽ quay lại lời nhắc trước đó của mình. 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 một lần nữa với named-checkconf. Lệnh named-checkzonenày có thể được sử dụng để kiểm tra sự chính xác các tệp vùng của bạn. Đối số đầu tiên sẽ chỉ định tên vùng và đối số thứ hai chỉ định tệp vùng tương ứng. Cả hai đều được định nghĩa trong named.conf.local. Ví dụ: để kiểm tra nyc3.example.com tại cấu hình vùng chuyển tiếp, hãy chạy lệnh sau (thay đổi tên để phù hợp với vùng chuyển tiếp và tệp của bạn):

NS1$ sudo named-checkzone nyc3.example.com /etc/bind/zones/db.nyc3.example.com

Output
zone nyc3.example.com/IN: loaded serial 3 OK

Và để kiểm tra cấu hình vùng đảo ngược 1128.10.in-addr.arpa, hãy chạy lệnh sau (thay đổi các số để khớp với vùng đảo ngược và tệp của bạn):

ns1$ 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 của bạn không có lỗi, 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:

ns1$ sudo systemctl restart bind9

Nếu bạn đã định cấu hình tường lửa UFW trước đó, hãy mở quyền truy cập vào BIND bằng cách nhập:

ns1$ sudo ufw allow Bind9

Hoàn tất bước 2, máy chủ DNS chính của bạn hiện đã được thiết lập và sẵn sàng phản hồi các truy vấn DNS. Hãy chuyển sang định cấu hình máy chủ DNS phụ.

Bước 3: Định cấu hình máy chủ DNS phụ

Trước tiên, bạn nên thiết lập một máy chủ DNS phụ nhằm phản hồi các yêu cầu nếu máy chủ chính không khả dụng. Việc định cấu hình máy chủ DNS phụ ít phức tạp hơn nhiều so với việc thiết lập máy chủ chính. Tiến hành chỉnh sửa tệp names.conf.optionstrên NS2 :

NS2$ sudo nano /etc/bind/named.conf.options

Ở phần đầu tệp, thêm ACL với địa chỉ IP riêng của tất cả các máy chủ đáng tin cậy của bạn:

/etc/bind/named.conf.options — updated 1 of 2 (secondary)
acl "trusted" {
        10.128.10.11;   # ns1
        10.128.20.12;   # ns2 
        10.128.100.101;  # host1
        10.128.200.102;  # host2
};

options {

        . . .
}

Bên dưới mục directory, thêm các dòng sau:

/etc/bind/named.conf.options — updated 2 of 2 (secondary)
s. . .

        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 name.conf.options. Tệp này phải giống với tệp names.conf.options của NS1 và phải được định cấu hình để nghe trên địa chỉ IP riêng của NS2. Bây giờ, tiến hành chỉnh sửa tệp named.conf.local:

NS2$ sudo nano /etc/bind/named.conf.local

Xác định các vùng phụ tương ứng với các vùng chính trên máy chủ DNS chính (NS1). Lưu ý các tệp không chứa đường dẫn và có chỉ thị chính nên được đặt thành địa chỉ IP riêng của máy chủ DNS chính. Nếu bạn đã xác định nhiều vùng đảo ngược trong máy chủ DNS chính, hãy đảm bảo thêm tất cả chúng tại đây:

/etc/bind/named.conf.local — updated (secondary)
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 ý: CloudFly luôn muốn hạn chế các thuật ngữ như “chính” và “phụ” bất cứ khi nào có thể. Trong các phiên bản gần đây hơn của Bind, bạn có thể sử dụng khối bầu sơ cấp thay vì khối chính và xác định loại của máy chủ phụ là thứ cấp thay vì khối phụ. Tuy nhiên, phiên bản BIND được cài đặt từ kho lưu trữ Ubuntu 20.04 mặc định (như đã nêu ra trong Bước 1) sẽ không nhận ra các tùy chọn này, có nghĩa là bạn sẽ phải sử dụng thuật ngữ ít bao hàm hơn trừ khi bạn nâng cấp các phiên bản khác

Bây giờ hãy lưu và đóng tệp name.conf.local lại. Chạy lệnh sau để kiểm tra tính hợp lệ của các tệp cấu hình:

NS2$ sudo named-checkconf

Nếu lệnh này không trả về bất kỳ lỗi nào, hãy khởi động lại BIND:

NS2$ sudo systemctl restart bind9

Sau đó, cho phép kết nối DNS với máy chủ bằng cách thay đổi các quy tắc tường lửa UFW:

NS2$ sudo ufw allow Bind9.

Sau khi hoàn tất các thao tác tại bước 3, bạn có các máy chủ DNS chính và phụ để phân giải tên mạng riêng và địa chỉ IP. Bây giờ bạn phải định cấu hình các máy chủ khách hàng của mình để sử dụng các máy chủ DNS riêng của mình.

Bước 4: Định cấu hình máy khách DNS

Trước khi tất cả các máy chủ của bạn trong trustACL có thể truy vấn các máy chủ DNS của bạn, bạn phải định cấu hình từng máy chủ đó để sử dụng NS1NS2 làm máy chủ định danh. Giả sử các máy chủ khách của bạn đang chạy Ubuntu, bạn sẽ cần tìm thiết bị nào được liên kết với mạng riêng của mình. Bạn có thể thực hiện việc này bằng cách truy vấn mạng con riêng với lệnh ip address. Chạy lệnh sau trên từng máy khách của bạn, thay thế mạng con được đánh dấu bằng mạng con của riêng bạn:

Host$ 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, eth1 là giao diện riêng tư. Các ví dụ được sử dụng trong suốt phần này sẽ đề cập đến eth1 là giao diện riêng tư, nhưng bạn nên thay đổi để phản ánh giao diện riêng tư của máy chủ của bạn. Trên Ubuntu 20.04, mạng được định cấu hình bằng Netplan, một tính năng trừu tượng cho phép bạn viết cấu hình mạng chuẩn hóa và áp dụng nó vào phần mềm mạng phụ trợ 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 có tên 00-private-nameservers.yaml:

  1. sudo nano /etc/netplan/00-private-nameservers.yaml

Bạn sẽ cần sửa đổi giao diện của mạng riêng, địa chỉ của các máy chủ DNS NS1NS2 và vùng DNS:

Lưu ý: Netplan sử dụng định dạng tuần tự hóa dữ liệu YAML cho các tệp cấu hình của nó. Vì YAML sử dụng thụt lề và khoảng trắng để xác định cấu trúc dữ liệu của nó, hãy đảm bảo rằng định nghĩa của bạn sử dụng thụt lề 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 trình kiểm tra YAML như YAML Lint.

/etc/netplan 00-private-nameservers.yaml
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 lệnh. Tiếp theo, yêu cầu Netplan sử dụng tệp cấu hình mới bằng cách sử dụng netplan try. Nếu có sự cố gây mất mạng, Netplan sẽ tự động khôi phục các thay đổi sau một thời gian chờ:

  1. 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

Nếu bộ đếm ngược đang cập nhật chính xác ở phía dưới, cấu hình mới ít nhất đủ chức năng để không làm đứt kết nối SSH của bạn. Nhấn ENTER để chấp nhận cấu hình mới. Bây giờ, hãy kiểm tra xem trình phân giải DNS của hệ thống để xác định xem cấu hình DNS của bạn đã được áp dụng hay chưa:

  1. sudo systemd-resolve --status

Lướt xuống cho đến khi bạn tìm thấy phần dành cho giao diện mạng riêng của mình. Địa chỉ IP riêng cho máy chủ DNS của bạn phải được liệt kê đầu tiên, sau đó là một số giá trị dự phòng. Miền của bạn 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 . . .

Ứng dụng khách Ubuntu của bạn hiện đã được định cấu hình để sử dụng các máy chủ DNS nội bộ.

Bước 5: Kiểm tra khách hàng

Sử dụng nslookupđể kiểm tra xem khách hàng của bạn có thể truy vấn máy chủ định danh của bạn hay không. Bạn có thể thực hiện việc này trên tất cả các máy khách mà bạn đã định cấu hình và nằm trong trustedACL. Bạn có thể bắt đầu bằng cách thực hiện tra cứu chuyển tiếp.

Tra cứu chuyển tiếp

Thực hiện tra cứu chuyển tiếp để truy xuất địa chỉ IP của host1.nyc3.example.com, hãy chạy lệnh sau:

  1. nslookup host1

Truy vấn Host1 mở rộng thành host1.nyc3.example.com vì tùy chọn search được đặt thành tên miền phụ riêng tư của bạn và các truy vấn DNS sẽ cố gắng tìm kiếm tên miền phụ đó trước khi tìm kiếm máy chủ lưu trữ ở nơi khác. Lệnh trước đó 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ể kiểm tra tra cứu ngược.

Tra cứu ngược

Để kiểm tra tra cứu ngược, hãy truy vấn máy chủ DNS bằng địa chỉ IP riêng của Host1:

  1. nslookup 10.128.100.101

Lệnh này sẽ trả về kết quả đầu ra như sau:

Output
11.10.128.10.in-addr.arpa name = host1.nyc3.example.com.

Nếu tất cả các tên và địa chỉ IP phân giải thành các giá trị chính xác, điều đó có nghĩa là các tệp vùng của bạn được định cấu hình đúng cách. Nếu bạn nhận được các giá trị không mong muốn, hãy nhớ xem lại các tệp vùng trên máy chủ DNS chính của bạn (ví dụ: db.nyc3.example.comdb.10.128). Bước cuối cùng, hướng dẫn này sẽ trình bày về cách bạn có thể duy trì các bản ghi vùng của mình.

Bước 6: Duy trì Bản ghi DNS

Bây giờ bạn đã có một DNS nội bộ đang hoạt động, bạn cần duy trì các bản ghi DNS của mình để chúng phản ánh chính xác nhất môi trường máy chủ của bạn.

Thêm máy chủ lưu trữ vào DNS

Bất cứ khi nào bạn thêm một máy chủ vào môi trường của mình (trong cùng một trung tâm dữ liệu), bạn sẽ muốn thêm nó vào DNS. Dưới đây là danh sách các bước bạn cần thực hiện:

Máy chủ định danh chính

  • Chuyển tiếp vùng tệp: Thêm bản ghi A cho máy chủ mới, tăng giá trị của Serial
  • Tệp vùng đảo ngược: Thêm bản ghi PTR cho máy chủ mới, tăng giá trị của Serial
  • Thêm địa chỉ IP riêng của máy chủ mới của bạn vào trust ACL (name.conf.options)

Kiểm tra các tệp cấu hình của bạn:

NS1$ sudo named-checkconf

NS1$ sudo named-checkzone nyc3.example.com /etc/bind/zones/db.nyc3.example.com

NS1$ sudo named-checkzone 128.10.in-addr.arpa /etc/bind/zones/db.10.128

Sau đó tải lại BIND:

ns1$ sudo systemctl reload bind9.

Máy chủ chính của bạn sẽ được định cấu hình cho máy chủ mới ngay bây giờ.

Máy chủ định danh phụ

  • Thêm địa chỉ IP riêng của máy chủ mới của bạn vào trust ACL (name.conf.options).

Kiểm tra cú pháp cấu hình:

$ sudo named-checkconf.

Sau đó tải lại BIND:

$ sudo systemctl reload bind9

Máy chủ phụ của bạn bây giờ sẽ chấp nhận các kết nối từ máy chủ mới.

Định cấu hình máy chủ mới để sử dụng DNS của bạn

  • Định cấu hình /etc/resolv.conf để sử dụng máy chủ DNS của bạn.
  • Kiểm tra bằng nslookup

Xóa máy chủ khỏi DNS

Nếu bạn xóa một máy chủ khỏi môi trường của mình hoặc chỉ muốn lấy nó ra khỏi DNS, chỉ cần xóa tất cả những thứ đã được thêm vào khi bạn thêm máy chủ vào DNS (tức là ngược lại với các bước trước đó).

Kết luận

Giờ đây, bạn có thể đề cập đến các giao diện mạng riêng của máy chủ của mình theo tên, thay vì địa chỉ IP. Điều này làm cho việc cấu hình các dịch vụ và ứng dụng trở nên đơn giản hơn vì bạn không còn phải nhớ các địa chỉ IP riêng và các tệp sẽ giảm đi sự khó đọc và khó hiểu. Ngoài ra, bây giờ bạn có thể thay đổi cấu hình của mình để trỏ đến một máy chủ mới ở một nơi duy nhất, máy chủ DNS chính của bạn, thay vì phải chỉnh sửa nhiều tệp cấu hình phân tán, giúp tối ưu hóa việc bảo trì. Khi bạn đã thiết lập DNS nội bộ và các tệp cấu hình của bạn đang sử dụng FQDN riêng tư để chỉ định kết nối mạng, điều quan trọng là các máy chủ DNS của bạn phải được duy trì đúng cách. Nếu cả hai đều không khả dụng, các dịch vụ và ứng dụng của bạn dựa vào chúng sẽ ngừng hoạt động bình thường. Đây là lý do tại sao bạn nên thiết lập DNS của mình với ít nhất một máy chủ phụ và duy trì các bản sao lưu hoạt động của tất cả chúng.

0 replies