Menu

8/6/25

Dựng DNS server trên Almalinux

 Mục tiêu:

  • Cài đặt và cấu hình BIND trên AlmaLinux.

  • Tạo một zone cho homelab.local để phân giải các host trong mạng nội bộ của bạn.

  • Cấu hình DNS server để lắng nghe trên địa chỉ IP của nó.

  • Cấu hình firewall để cho phép truy cập DNS.

Bước 1: Cài đặt BIND

Trước tiên, hãy cập nhật hệ thống và cài đặt gói bindbind-utils.

sudo dnf update -y
sudo dnf install bind bind-utils -y

Bước 2: Cấu hình BIND

File cấu hình chính của BIND là /etc/named.conf. Chúng ta sẽ chỉnh sửa file này và tạo các file zone.

Chỉnh sửa /etc/named.conf

Mở file cấu hình chính:

sudo nano /etc/named.conf

Bạn cần tìm và thay đổi một số dòng sau:

  1. listen-on port 53: Thay đổi 127.0.0.1 thành địa chỉ IP của máy chủ DNS của bạn hoặc any để nó lắng nghe trên tất cả các interface. Ví dụ, nếu IP của bạn là 192.168.1.100:

    listen-on port 53 { 127.0.0.1; 192.168.1.100; };
    

    Hoặc nếu bạn muốn nó lắng nghe trên tất cả các IP:

    listen-on port 53 { any; };
    
  2. allow-query: Cho phép các client trong mạng của bạn gửi truy vấn. Thay đổi localhost thành dải mạng của bạn. Ví dụ:

    allow-query { localhost; 192.168.1.0/24; };
    
  3. Thêm zone cho homelab.local: Thêm một block zone vào cuối file để định nghĩa zone mới của chúng ta.

    zone "homelab.local" IN {
        type master;
        file "homelab.local.zone";
        allow-update { none; };
    };
    
  4. Thêm zone cho phân giải ngược (Reverse Zone): Để các client có thể phân giải IP thành tên miền, bạn cần tạo một zone phân giải ngược. Giả sử dải mạng của bạn là 192.168.1.0/24, bạn sẽ định nghĩa zone như sau:

    zone "1.168.192.in-addr.arpa" IN {
        type master;
        file "homelab.local.rev";
        allow-update { none; };
    };
    

    Lưu ý: Tên zone phải là dải mạng của bạn viết ngược lại, cộng thêm .in-addr.arpa.

Sau khi chỉnh sửa xong, file /etc/named.conf của bạn có thể trông giống như thế này (đã rút gọn):

options {
    listen-on port 53 { any; };
    listen-on-v6 port 53 { none; };
    directory "/var/named";
    dump-file "/var/named/data/cache_dump.db";
    statistics-file "/var/named/data/named_stats.txt";
    memstatistics-file "/var/named/data/named_mem_stats.txt";
    recursing-file "/var/named/data/named.recursing";
    secroots-file "/var/named/data/named.secroots";
    allow-query { any; };
    recursion yes;
    dnssec-enable yes;
    dnssec-validation yes;
    ...
};

logging { ... };

zone "." IN {
    type hint;
    file "named.ca";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

zone "homelab.local" IN {
    type master;
    file "homelab.local.zone";
    allow-update { none; };
};

zone "1.168.192.in-addr.arpa" IN {
    type master;
    file "homelab.local.rev";
    allow-update { none; };
};

Tạo file zone forward /var/named/homelab.local.zone

File này sẽ chứa các bản ghi phân giải tên miền thành địa chỉ IP.

sudo nano /var/named/homelab.local.zone

Nội dung file:

$TTL 86400
@       IN      SOA     ns1.homelab.local. admin.homelab.local. (
                2023080601      ; Serial
                3600            ; Refresh
                1800            ; Retry
                604800          ; Expire
                86400           ; Minimum TTL
)

        IN      NS      ns1.homelab.local.

ns1     IN      A       192.168.1.100       ; IP của DNS Server
router  IN      A       192.168.1.1         ; IP của router
web     IN      A       192.168.1.101       ; Một máy chủ web

Giải thích:

  • $TTL: Thời gian tồn tại mặc định của bản ghi.

  • @ IN SOA: Bản ghi "Start of Authority" (SOA), định nghĩa máy chủ DNS chính cho zone này.

  • ns1.homelab.local.: Tên máy chủ DNS của bạn.

  • admin.homelab.local.: Email của quản trị viên (dấu @ được thay bằng dấu chấm).

  • Serial: Số phiên bản của file cấu hình. Mỗi khi bạn thay đổi file, hãy tăng số này lên.

  • @ IN NS: Bản ghi Name Server, chỉ định máy chủ DNS cho zone này.

  • ns1 IN A 192.168.1.100: Bản ghi "A" (Address) phân giải tên ns1 thành địa chỉ IP 192.168.1.100.

Tạo file zone reverse /var/named/homelab.local.rev

File này sẽ chứa các bản ghi phân giải IP thành tên miền.

sudo nano /var/named/homelab.local.rev

Nội dung file:

$TTL 86400
@       IN      SOA     ns1.homelab.local. admin.homelab.local. (
                2023080601      ; Serial
                3600            ; Refresh
                1800            ; Retry
                604800          ; Expire
                86400           ; Minimum TTL
)

        IN      NS      ns1.homelab.local.

100     IN      PTR     ns1.homelab.local.
1       IN      PTR     router.homelab.local.
101     IN      PTR     web.homelab.local.

Giải thích:

  • 100 IN PTR ns1.homelab.local.: Bản ghi "PTR" (Pointer) phân giải IP 192.168.1.100 (chỉ viết phần cuối của IP) thành tên miền ns1.homelab.local..

Đặt quyền sở hữu cho các file zone

Sau khi tạo, bạn cần đảm bảo BIND có thể đọc được các file này.

sudo chown named:named /var/named/homelab.local.zone
sudo chown named:named /var/named/homelab.local.rev

Bước 3: Kiểm tra cấu hình và khởi động BIND

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

Sử dụng lệnh named-checkconfnamed-checkzone để kiểm tra các file cấu hình.

sudo named-checkconf
sudo named-checkzone homelab.local /var/named/homelab.local.zone
sudo named-checkzone 1.168.192.in-addr.arpa /var/named/homelab.local.rev

Nếu không có lỗi, các lệnh này sẽ không trả về gì hoặc hiển thị thông báo OK.

Khởi động và kích hoạt dịch vụ BIND

sudo systemctl start named
sudo systemctl enable named
sudo systemctl status named
sudo systemctl reload named

Đảm bảo dịch vụ đang chạy (trạng thái active (running)).

Bước 4: Cấu hình Firewall

Mở cổng 53 (cổng mặc định của DNS) trên firewall để cho phép các client truy cập.

sudo firewall-cmd --permanent --add-service=dns
sudo firewall-cmd --reload

Bước 5: Kiểm tra hoạt động của DNS server

Bạn có thể kiểm tra trực tiếp trên máy chủ DNS bằng cách thay đổi file /etc/resolv.conf hoặc sử dụng các công cụ như dig.

# Sử dụng dig để kiểm tra
dig @127.0.0.1 ns1.homelab.local
dig @127.0.0.1 web.homelab.local
dig @127.0.0.1 -x 192.168.1.101

Nếu bạn thấy các bản ghi ANSWER SECTION trả về đúng, DNS server của bạn đã hoạt động.

Bước 6: Cấu hình Client để sử dụng DNS server

Trên các máy client trong mạng của bạn, hãy cấu hình DNS server thành địa chỉ IP của máy chủ DNS bạn vừa dựng (192.168.1.100).

  • Trên Linux: Chỉnh sửa file /etc/resolv.conf hoặc cấu hình trong NetworkManager.

    sudo nano /etc/resolv.conf
    

    Thêm dòng sau:

    nameserver 192.168.1.100
    
  • Trên Windows/macOS: Vào cài đặt mạng và thay đổi DNS server.

Sau khi cấu hình, bạn có thể kiểm tra từ máy client:

ping web.homelab.local

Lệnh này sẽ ping đến 192.168.1.101 nếu cấu hình DNS của bạn chính xác.


No comments:

Post a Comment