Cài đặt và cấu hình máy chủ DNS

Hệ thống Tên miền (DNS - Domain Name System) là một hệ thống phân cấp và phân tán cho phép dịch tên miền mà con người dễ nhớ sang địa chỉ IP dạng số mà máy tính sử dụng để xác định vị trí nhau trên mạng Internet. Thay vì phải ghi nhớ các chuỗi số IP phức tạp như "119.75.217.109", người dùng chỉ cần nhập tên miền thân thiện như "www.example.com" để truy cập tài nguyên trên mạng.

Chức năng của DNS

DNS ánh xạ tên máy chủ (hostname) với địa chỉ IP tương ứng. Mỗi thiết bị kết nối mạng đều có một địa chỉ IP duy nhất. Việc sử dụng tên máy chủ giúp người dùng không cần nhớ các địa chỉ IP khó nhằn. Chức năng cốt lõi của DNS là cung cấp một cơ chế để phân giải các tên máy chủ này thành địa chỉ IP, cho phép các thiết bị giao tiếp với nhau qua mạng.

Có hai phương pháp chính để thực hiện ánh xạ tên máy chủ sang địa chỉ IP:

  • Ánh xạ tĩnh: Mỗi thiết bị tự cấu hình một bảng ánh xạ cục bộ. Bảng này chỉ được sử dụng bởi chính thiết bị đó và cần được cập nhật thủ công trên từng máy.
  • Ánh xạ động: Thiết lập một hệ thống DNS tập trung. Các máy chủ DNS sẽ lưu trữ và quản lý các bản ghi ánh xạ tên máy chủ với địa chỉ IP. Khi một thiết bị cần giao tiếp bằng tên máy chủ, nó sẽ truy vấn máy chủ DNS để lấy địa chỉ IP tương ứng.

Quá trình tìm ra địa chỉ IP từ một tên máy chủ được gọi là phân giải tên miền. Có thể kết hợp cả hai phương pháp, ưu tiên sử dụng ánh xạ tĩnh cho các tên miền thường xuyên truy cập để tăng tốc độ phân giải.

Tầm quan trọng của DNS

  • Về mặt kỹ thuật: DNS là phương thức định vị thực tế cho phần lớn các ứng dụng trên Internet. Sự phát triển của công nghệ tên miền và các ứng dụng dựa trên nó đã làm phong phú thêm các dịch vụ và giao thức Internet.
  • Về mặt tài nguyên: Tên miền đóng vai trò như định danh duy nhất và không lặp lại trên Internet, trở thành một tài nguyên chiến lược quốc gia quan trọng trong bối cảnh toàn cầu hóa.

Nguyên lý hoạt động của DNS

Hãy xem xét quy trình truy cập `www.example.com` trên hệ thống Windows:

  1. Máy khách (client) kiểm tra tệp `hosts` cục bộ (thường nằm ở `c:\windows\system32\drivers\etc\hosts`) để tìm địa chỉ IP tương ứng. Nếu tìm thấy, nó sẽ truy cập trực tiếp trang web.
  2. Nếu không tìm thấy trong tệp `hosts`, máy khách sẽ kiểm tra bộ nhớ đệm (cache) cục bộ của nó. Nếu có thông tin, nó sẽ truy cập trực tiếp.
  3. Nếu không có trong bộ nhớ đệm cục bộ, yêu cầu sẽ được gửi đến máy chủ DNS cục bộ (local DNS server). Máy chủ DNS cục bộ này cũng kiểm tra bộ nhớ đệm của nó. Nếu tìm thấy, nó sẽ trả lại địa chỉ IP cho máy khách.
  4. Nếu máy chủ DNS cục bộ không có thông tin trong bộ nhớ đệm, nó sẽ kiểm tra các tệp vùng (zone files) mà nó quản lý. Nếu tìm thấy bản ghi, nó sẽ trả lại địa chỉ IP cho máy khách.
  5. Nếu vẫn chưa tìm thấy, máy chủ DNS cục bộ sẽ gửi yêu cầu đến một máy chủ DNS gốc (root DNS server) được chỉ định trong tệp cấu hình cache.
  6. Máy chủ DNS gốc nhận yêu cầu, kiểm tra bản ghi của nó. Nếu không có thông tin, nó sẽ trả về địa chỉ IP của máy chủ chịu trách nhiệm cho tên miền cấp cao nhất (TLD), ví dụ như máy chủ cho `.com`.
  7. Máy chủ `.com` nhận yêu cầu, kiểm tra bản ghi của nó. Nếu không tìm thấy, nó sẽ trả về địa chỉ IP của máy chủ DNS chịu trách nhiệm cho tên miền cụ thể (ví dụ: `example.com`).
  8. Máy chủ DNS của `example.com` nhận yêu cầu, phân tích tên miền cần phân giải (`www`). Nếu tìm thấy, nó sẽ trả về địa chỉ IP của `www.example.com` cho máy chủ DNS cục bộ.
  9. Cuối cùng, máy chủ DNS cục bộ trả địa chỉ IP của `www.example.com` về cho máy khách. Máy khách sử dụng địa chỉ IP này để thiết lập kết nối với máy chủ web.

Cài đặt phần mềm máy chủ DNS

Trên hệ thống CentOS 7, bạn có thể cài đặt phần mềm máy chủ DNS (BIND) bằng lệnh sau:

[root@CentOS7 ~]# yum install bind

Cấu hình các tệp liên quan

  • Tệp cấu hình chính của DNS: `/etc/named.conf`, `/etc/named.rfc1912.zones`.
  • Thư mục chứa tệp cơ sở dữ liệu DNS: `/var/named/`. Mỗi tệp vùng (domain) sẽ được lưu trữ tại đây.
  • Tệp script dịch vụ DNS: `/etc/rc.d/init.d/named`.

1. Phân giải thuận (Forward Lookup)

Chúng ta sẽ cấu hình cho tên miền `mytest.com`. Mục tiêu là ánh xạ:

  • `www.mytest.com` tới IP `192.168.29.100`
  • `ftp.mytest.com` tới IP `1.1.1.1`

Bước 1: Chỉnh sửa tệp `/etc/named.conf`

Thêm hoặc sửa đổi các dòng sau để cho phép máy chủ lắng nghe và trả lời các truy vấn từ mọi địa chỉ IP:

        listen-on port 53 { any; };
        allow-query     { any; };
        dnssec-enable no;
        dnssec-validation no;

Bước 2: Chỉnh sửa tệp cấu hình vùng `/etc/named.rfc1912.zones`

Định nghĩa vùng `mytest.com` và chỉ định tệp chứa bản ghi của nó:

zone "mytest.com" IN {
        type master;
        file "mytest.com";
};

Định dạng chung cho một khai báo vùng là:

zone "TÊN_VÙNG" IN {
        type master;
        file "TÊN_TỆP_VÙNG.zone"
}

Bước 3: Tạo tệp cơ sở dữ liệu phân giải `/var/named/mytest.com.zone`

Tạo và chỉnh sửa tệp này để định nghĩa các bản ghi A:

[root@CentOS7 ~]# vim /var/named/mytest.com.zone
$TTL 1D
$ORIGIN mytest.com.
@       IN SOA  mytest.com. admin.mytest.com. (
                                        20170526; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        IN  NS  @  ; Tên miền chính của máy chủ DNS
        IN  A     2.2.2.2; IP của tên miền chính
mytest.com. IN  NS  ns1.mytest.com.

ns1     IN  A   192.168.29.100
www     IN  A   172.16.254.13
ftp     IN  A   1.1.1.1

Bước 4: Sửa đổi quyền sở hữu tệp cơ sở dữ liệu

Đảm bảo dịch vụ `named` có thể đọc tệp:

[root@CentOS7 ~]# chgrp named /var/named/mytest.com.zone

Bước 5: Kiểm tra cú pháp cấu hình

(1) Kiểm tra cú pháp tệp cấu hình chính:

[root@CentOS7 ~]# named-checkconf

(2) Kiểm tra cú pháp tệp cấu hình vùng:

[root@CentOS7 ~]# named-checkzone mytest.com  /var/named/mytest.com.zone
zone mytest.com/IN: loaded serial 20170526
OK

Bước 6: Khởi động dịch vụ named

[root@CentOS7 ~]# systemctl start   named

Bước 7: Kiểm tra

Lưu ý: Cấu hình máy khách DNS trỏ về địa chỉ IP của máy chủ DNS này, hoặc sử dụng lệnh `dig` để kiểm tra trực tiếp.

[root@CentOS7 ~]# nslookup  www.mytest.com
Server:		127.0.0.1
Address:	127.0.0.1#53

Name:	www.mytest.com
Address: 172.16.254.13
[root@CentOS7 ~]# nslookup  ftp.mytest.com
Server:		127.0.0.1
Address:	127.0.0.1#53

Name:	ftp.mytest.com
Address: 1.1.1.1

Kiểm tra thành công! Phân giải thuận đã hoạt động.

2. Phân giải đảo (Reverse Lookup)

Chúng ta sẽ cấu hình để ánh xạ địa chỉ IP về tên miền cho tên miền `mytest.com`:

  • IP `192.168.29.100` tương ứng với `www.mytest.com`
  • IP `192.168.29.200` tương ứng với `ftp.mytest.com`

Bước 1: Chỉnh sửa tệp `/etc/named.conf`

Các tùy chọn `listen-on`, `allow-query`, `dnssec-enable`, `dnssec-validation` tương tự như phần phân giải thuận.

Bước 2: Chỉnh sửa tệp cấu hình vùng `/etc/named.rfc1912.zones`

Định nghĩa vùng phân giải đảo cho dải mạng `192.168.29.x`:

zone "29.168.192.in-addr.arpa" IN {
        type master;
        file "name.29.168.192";
};

Định dạng chung:

zone "DẢI_IP_ĐẢO_NGƯỢC.in-addr.arpa" IN {
        type master;
        file "TÊN_TỆP_VÙNG_ĐẢO";
};

Bước 3: Tạo tệp cơ sở dữ liệu phân giải đảo

Tạo tệp `/var/named/name.29.168.192` với các bản ghi PTR:

$TTL 1D
$ORIGIN 29.168.192.in-addr.arpa.
@       IN SOA  mytest.com. admin.mytest.com. (
                                        20170526; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
         IN     NS      mytest.com.
100     IN      PTR     www.mytest.com.
200     IN      PTR     ftp.mytest.com.

Bước 4: Sửa đổi quyền sở hữu tệp cơ sở dữ liệu

[root@CentOS7 ~]# chgrp named name.29.168.192

Bước 5: Kiểm tra cú pháp

(1) Kiểm tra tệp cấu hình chính:

[root@CentOS7 ~]# named-checkconf

(2) Kiểm tra tệp cấu hình vùng đảo:

[root@CentOS7 ~]# named-checkzone 29.168.192.in-addr.arpa /var/named/name.29.168.192
zone 29.168.192.in-addr.arpa/IN: loaded serial 20170526
OK

Bước 6: Khởi động dịch vụ named

[root@CentOS7 ~]# systemctl start   named

Bước 7: Kiểm tra

[root@centos7 ~]# dig -x 192.168.29.200 @192.168.29.100
; <<>> DiG 9.9.4-RedHat-9.9.4-37.el7 <<>> -x 192.168.29.200 @192.168.29.100
[……]
200.29.168.192.in-addr.arpa. 86400 IN  PTR   ftp.mytest.com.
[root@centos7 ~]# dig -x 192.168.29.100 @192.168.29.100
[……]
;; ANSWER SECTION:
100.29.168.192.in-addr.arpa. 86400 IN  PTR   www.mytest.com.
;; AUTHORITY SECTION:
29.168.192.in-addr.arpa. 86400  IN  NS  mytest.com.

Kiểm tra thành công!

3. DNS Master-Slave (Chủ-Tớ)

Cấu hình này bao gồm một máy chủ DNS chính (Master) và một hoặc nhiều máy chủ DNS phụ (Slave) để tăng cường khả năng chịu lỗi và phân tải.

  • Địa chỉ IP máy chủ chính (Master): `192.168.29.100`
  • Địa chỉ IP máy chủ phụ (Slave): `192.168.29.3`
  • Mục tiêu phân giải: `www.mytest.com` -> `172.16.254.13`, `ftp.mytest.com` -> `1.1.1.1`

Bước 1: Chỉnh sửa tệp `/etc/named.conf` trên máy chủ Master

Cho phép truy vấn và đệ quy:

        listen-on port 53 { any; };
        allow-query     { any; };
        recursion yes;

        dnssec-enable no;
        dnssec-validation no;

Bước 2: Chỉnh sửa tệp cấu hình vùng `/etc/named.rfc1912.zones` trên máy chủ Master

Cho phép truyền tải vùng (zone transfer) đến máy chủ Slave:

zone "mytest.com" IN {
        type master;
        file "mytest.com.zone";
        allow-transfer {192.168.29.3; };  // IP của máy chủ Slave
};

Bước 3: Tạo tệp cơ sở dữ liệu vùng trên máy chủ Master (`/var/named/mytest.com.zone`)

Thêm bản ghi NS cho máy chủ Slave:

$TTL 1D
$ORIGIN mytest.com.
@   IN SOA  mytest.com. admin.mytest.com. (
                    20170526; serial
                    1D  ; refresh
                    1H  ; retry
                    1W  ; expire
                    3H )    ; minimum
mytest.com. IN  NS  ns1.mytest.com.
mytest.com. IN  NS  slave.mytest.com.   // Thêm bản ghi NS cho máy chủ Slave

ns1 IN  A   192.168.29.100
slave   IN  A   192.168.29.3    // Chỉ định IP của máy chủ Slave
www IN  A   172.16.254.13
ftp IN  A   1.1.1.1

Bước 4: Chỉnh sửa tệp `/etc/named.conf` trên máy chủ Slave

Cấu hình tương tự máy chủ Master về `listen-on`, `allow-query`, `recursion`.

Bước 5: Cấu hình tệp `/etc/named.rfc1912.zones` trên máy chủ Slave

Khai báo máy chủ này là Slave và chỉ định máy chủ Master:

zone "mytest.com" IN {
    type slave; // Đánh dấu đây là máy chủ Slave
    file "slaves/mytest.com";   // Đường dẫn tương đối đến tệp vùng được đồng bộ (thực tế là /var/named/slaves/mytest.com)
    masters {192.168.29.100; };  // Địa chỉ IP của máy chủ Master
};

Bước 6: Kiểm tra cú pháp

Thực hiện kiểm tra cú pháp trên cả máy chủ Master và Slave:

[root@CentOS7 ~]# named-checkconf

Bước 7: Khởi động dịch vụ named trên cả hai máy chủ

[root@CentOS7 ~]# systemctl start named

Bước 8: Kiểm tra

(1) Kiểm tra xem máy chủ Slave đã nhận được tệp vùng từ Master chưa:

[root@centos7 ~]# ll  /var/named/slaves/
total 4
-rw-r--r--. 1 named named 348 May 26 15:22 mytest.com

(2) Sử dụng máy chủ Slave để phân giải `www.mytest.com`:

[root@centos7 ~]# dig -t A www.mytest.com @192.168.29.3
[……]
;; ANSWER SECTION:
www.mytest.com.     86400 IN  A   172.16.254.13

;; AUTHORITY SECTION:
mytest.com.     86400 IN  NS  slave.mytest.com.
mytest.com.     86400 IN  NS  ns1.mytest.com.

;; ADDITIONAL SECTION:
ns1.mytest.com.     86400 IN  A   192.168.29.100
slave.mytest.com.     86400 IN  A   192.168.29.3

;; Query time: 2 msec
;; SERVER: 192.168.29.3#53(192.168.29.3)
;; WHEN: Fri May 26 15:37:13 CST 2017
;; MSG SIZE  rcvd: 129

Phân giải thành công cho thấy máy chủ Slave đã hoạt động.

4. Ủy quyền Subdomain (Subdomain Delegation)

Cấu hình này cho phép một máy chủ DNS khác quản lý một tên miền con (subdomain).

  • Máy chủ DNS cho subdomain (`haha.mytest.com`): `192.168.29.110`

Bước 1: Sửa đổi tệp cơ sở dữ liệu vùng trên máy chủ quản lý `mytest.com` (`/var/named/mytest.com.zone`)

Thêm bản ghi NS và A cho subdomain:

[root@CentOS7 ~]# cat /var/named/mytest.com.zone
$TTL 1D
$ORIGIN mytest.com.
@   IN SOA  mytest.com. admin.mytest.com. (
                    20170526; serial
                    1D  ; refresh
                    1H  ; retry
                    1W  ; expire
                    3H )    ; minimum
    IN  NS  @  ; Tên miền chính
    IN  A     2.2.2.2; IP của tên miền chính
mytest.com. IN  NS  ns1.mytest.com.
mytest.com. IN  NS  slave.mytest.com.
haha.mytest.com.    IN NS  ns2.haha.mytest.com.  // Dòng mới: Ủy quyền cho subdomain

ns1 IN  A   192.168.29.100
slave   IN  A   192.168.29.3
www IN  A   172.16.254.13
ftp IN  A   1.1.1.1
ns2.haha.mytest.com. IN A 192.168.29.110 // Dòng mới: Chỉ định IP của máy chủ DNS cho subdomain

Bước 2: Chỉnh sửa tệp cấu hình chính trên máy chủ DNS của subdomain (`/etc/named.conf`)

Cấu hình tương tự như các máy chủ DNS khác.

Bước 3: Chỉnh sửa tệp cấu hình vùng trên máy chủ DNS của subdomain (`/etc/named.rfc1912.zones`)

Định nghĩa vùng `haha.mytest.com` và cho phép truyền tải:

[root@CentOS7 ~]# vim  /etc/named.rfc1912.zones
zone "haha.mytest.com" IN {
        type master;
        file "haha.zone";
        allow-transfer {192.168.29.0/24; }; // Cho phép IP trong mạng con
};

Bước 4: Tạo tệp cơ sở dữ liệu vùng trên máy chủ DNS của subdomain (`/var/named/haha.zone`)

Định nghĩa các bản ghi cho `haha.mytest.com`:

[root@CentOS7 ~]# vim /var/named/haha.zone
$TTL 1D
$ORIGIN haha.mytest.com.
@       IN SOA  haha.mytest.com. admin.haha.mytest.com. (
                                        20170528; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        IN  NS  @  ; Tên miền chính
        IN  A     3.3.3.3; IP của tên miền chính
haha.mytest.com. IN     NS      ns2.haha.mytest.com.

ns2     IN      A       192.168.29.110
www     IN      A       172.16.11.11
ftp     IN       A      2.2.2.2

Bước 5: Kiểm tra cú pháp

Thực hiện kiểm tra cú pháp trên cả hai máy chủ DNS:

[root@CentOS7 ~]# named-checkconf

Bước 6: Khởi động dịch vụ named trên cả hai máy chủ

[root@CentOS7 ~]# systemctl start named

Bước 7: Kiểm tra

Kiểm tra phân giải `www.haha.mytest.com` từ máy chủ chính của `mytest.com`:

[root@centos7 ~]# dig -t A  www.haha.mytest.com @192.168.29.100

; <<>> DiG 9.9.4-RedHat-9.9.4-37.el7 <<>> -t A www.haha.mytest.com @192.168.29.100
[…….]
;; ANSWER SECTION:
www.haha.mytest.com.    86400 IN  A   172.16.11.11

;; AUTHORITY SECTION:
haha.mytest.com.    86400 IN  NS  ns2.haha.mytest.com.

;; ADDITIONAL SECTION:
ns2.haha.mytest.com.    86400 IN  A   192.168.29.110

Phân giải thành công, cho thấy việc ủy quyền subdomain đã hoạt động chính xác.

Thẻ: dns bind linux CentOS cấu hình máy chủ

Đăng vào ngày 13 tháng 7 lúc 18:45