0
0
Lập trình
Admin Team
Admin Teamtechmely

DNS: Hệ thống tên miền - Hướng dẫn toàn diện cho lập trình viên

Đăng vào 1 tháng trước

• 12 phút đọc

Giới thiệu về DNS

Hệ thống tên miền (DNS) là "sổ điện thoại" của Internet, là một hệ thống phân cấp, phân phối toàn cầu giúp dịch các tên miền dễ nhớ (như www.example.com) thành các địa chỉ IP mà máy tính có thể hiểu (như 192.0.2.1).

Tại sao sử dụng DNS?

DNS chủ yếu được sử dụng để giúp người dùng truy cập các trang web và tài nguyên trên Internet thông qua các tên miền dễ nhớ thay vì phải ghi nhớ các địa chỉ IP phức tạp.

Lợi ích của DNS

  • Giúp điều hướng dễ dàng: Con người thường dễ nhớ tên hơn là các chuỗi số.
  • Cho phép lưu trữ linh hoạt: Địa chỉ IP của một trang web có thể thay đổi, nhưng tên miền vẫn giữ nguyên. DNS sẽ xử lý việc cập nhật, đảm bảo lưu lượng truy cập vẫn đến đúng máy chủ.
  • Cân bằng tải và khả năng chịu lỗi: DNS có thể được cấu hình để hướng lưu lượng cho một tên miền đến nhiều địa chỉ IP khác nhau, phân phối tải và đảm bảo trang web vẫn khả dụng nếu một máy chủ gặp sự cố.

Cách DNS hoạt động: Quá trình phân giải

Khi bạn nhập tên miền vào trình duyệt, một quá trình gọi là phân giải DNS diễn ra, thường trong vài mili giây, liên quan đến nhiều loại máy chủ khác nhau:

Bước 1: Kiểm tra bộ nhớ cache cục bộ

Máy tính của bạn (hoặc thiết bị mạng cục bộ) sẽ kiểm tra bộ nhớ cache của nó để xem liệu nó đã biết địa chỉ IP cho tên miền đó hay chưa.

Bước 2: Truy vấn đến DNS Resolver

Nếu không tìm thấy, yêu cầu sẽ được gửi đến một DNS Resolver (thường do nhà cung cấp dịch vụ Internet của bạn quản lý hoặc một dịch vụ công cộng như Google DNS). Nhiệm vụ của resolver là tìm câu trả lời cuối cùng.

Bước 3: Truy vấn đến Root Server

Resolver truy vấn đến Root Name Server (cấp cao nhất trong hệ thống DNS), máy chủ này sẽ trả lời và hướng resolver đến TLD Name Server thích hợp (ví dụ: máy chủ cho .com, .org, v.v.).

Bước 4: Truy vấn đến TLD Server

Resolver truy vấn đến TLD Name Server thích hợp, sau đó máy chủ này sẽ hướng resolver đến Authoritative Name Server của miền.

Bước 5: Truy vấn đến Authoritative Server

Resolver truy vấn đến Authoritative Name Server, nơi lưu trữ các bản ghi DNS chính thức cho miền đó (ví dụ: example.com). Máy chủ này sẽ cung cấp địa chỉ IP tương ứng.

Bước 6: Phản hồi và kết nối

Resolver gửi địa chỉ IP trở lại trình duyệt của bạn, và sau đó trình duyệt sử dụng địa chỉ IP để kết nối đến máy chủ của trang web và tải trang.

BIND DNS Server: Nguồn sức mạnh phía sau sự phân giải tên miền

Berkeley Internet Name Domain (BIND) là phần mềm máy chủ DNS được sử dụng rộng rãi nhất trên Internet. Daemon chính (quá trình máy chủ) cho BIND là named (đọc là "name-dee"), viết tắt cho Name Daemon.

Daemon named và cấu hình cốt lõi

Công việc của daemon named là lắng nghe trên cổng 53 (cả UDP và TCP) cho các truy vấn DNS và phản hồi cho chúng. Nó tải cấu hình từ tệp chính, thường là /etc/named.conf (hoặc đôi khi là một tệp tương tự như /etc/bind/named.conf hoặc một tập hợp các tệp được bao gồm bởi tệp chính).

Các thành phần chính của named.conf

  • options { ... };: Chứa các cài đặt máy chủ toàn cầu, hoạt động như một tập hợp các mặc định cho tất cả các vùng trừ khi bị ghi đè.
  • listen-on port 53 { IP_ADDRESS; };: Chỉ định các địa chỉ IP cục bộ mà máy chủ nên lắng nghe cho các truy vấn đến. Theo mặc định, nó có thể lắng nghe trên tất cả các giao diện.
  • directory "/var/named";: Định nghĩa thư mục làm việc mà daemon tìm các tệp vùng (nếu một đường dẫn tương đối được sử dụng trong định nghĩa vùng).
  • allow-query { any; };: Kiểm soát những máy chủ nào được phép truy vấn máy chủ DNS. "any" có nghĩa là tất cả, trong khi bạn thường sẽ hạn chế điều này cho mạng nội bộ của bạn cho các máy chủ caching.
  • forwarders { IP_of_External_DNS_1; IP_of_External_DNS_2; };: Nếu máy chủ không thể giải quyết một truy vấn từ các vùng cục bộ của nó, nó sẽ chuyển tiếp yêu cầu đến các máy chủ DNS bên ngoài này (như Google’s 8.8.8.8) thay vì thực hiện một truy vấn từ root đến TLD.

Các bản ghi tài nguyên (RRs) trong tệp vùng

Tệp vùng (/var/named/forward.zone, v.v.) chứa các ánh xạ và siêu dữ liệu thực tế. Mỗi bản ghi có định dạng chuẩn: [name] [TTL] [class] [type] [data].

Các loại bản ghi DNS thiết yếu

Loại bản ghi Mô tả Ví dụ
SOA (Start of Authority) Bản ghi đầu tiên cần có trong mọi tệp vùng. Định nghĩa quản trị viên của vùng, số sê-ri và các bộ đếm khác nhau (Refresh, Retry, Expire, TTL). @ IN SOA ns1.example.com. admin.example.com. (...)
NS (Name Server) Chỉ định các máy chủ tên ủy quyền cho miền. @ IN NS ns1.example.com.
A (Address) Ánh xạ tên miền tới một địa chỉ IPv4 (Phân giải thuận). web IN A 192.168.1.10
AAAA (Quad-A Address) Ánh xạ tên miền tới một địa chỉ IPv6. web IN AAAA 2001:db8::1
PTR (Pointer) Ánh xạ một địa chỉ IP tới một tên miền (Phân giải ngược). 10 IN PTR web.example.com.
MX (Mail Exchanger) Chỉ định máy chủ thư cho miền và độ ưu tiên của chúng. @ IN MX 10 mail.example.com.
CNAME (Canonical Name) Tạo một bí danh (nickname) cho tên miền khác. ftp IN CNAME web.example.com.

Ví dụ về cài đặt DNS Master-Client-Slave đầy đủ

Hãy cấu hình một mạng nội bộ nhỏ sử dụng miền internal.local và subnet 192.168.10.0/24.

Máy Vai trò Địa chỉ IP Tên máy (FQDN)
Server 1 (Master) DNS chính 192.168.10.10 ns1.internal.local
Server 2 (Slave) DNS phụ 192.168.10.20 ns2.internal.local
Client Máy trạm 192.168.10.50 client.internal.local

Bước 1: Cấu hình máy chủ DNS chính (Master) - 192.168.10.10

A. Chỉnh sửa /etc/named.conf (Master)

Chúng tôi định nghĩa các tùy chọn toàn cầu, vùng chuyển tiếp cho internal.local và vùng đảo ngược cho 192.168.10.x. Lưu ý cài đặt allow-transfer quan trọng.

Copy
options {
    listen-on port 53 { 127.0.0.1; 192.168.10.10; };
    directory "/var/named";
    dump-file "/var/named/data/cache_dump.db";
    allow-query { any; };
    // Các tùy chọn khác ở đây...
};

// Vùng chuyển tiếp
zone "internal.local" IN {
    type master;
    file "internal.local.zone"; // Vị trí tệp vùng
    allow-transfer { 192.168.10.20; }; // Cho phép chuyển giao tới Slave
    notify yes; // Thông báo cho slave về các thay đổi vùng
};

// Vùng đảo ngược cho 192.168.10.x
zone "10.168.192.in-addr.arpa" IN {
    type master;
    file "10.168.192.rev";
    allow-transfer { 192.168.10.20; }; // Cho phép chuyển giao tới Slave
    notify yes;
};

B. Tạo tệp vùng Forward /var/named/internal.local.zone

Số sê-ri của SOA phải được tăng lên mỗi khi tệp vùng được sửa đổi để kích hoạt chuyển giao vùng tới slave.

Copy
$TTL 86400
@ IN SOA ns1.internal.local. admin.internal.local. (
              2025092701 ; Serial YYYYMMDDNN
              3600       ; Refresh (1 giờ)
              1800       ; Retry (30 phút)
              604800     ; Expire (1 tuần)
              86400 )    ; TTL tối thiểu (1 ngày)

@       IN      NS      ns1.internal.local.
@       IN      NS      ns2.internal.local. ; Slave NS

ns1     IN      A       192.168.10.10
ns2     IN      A       192.168.10.20

client  IN      A       192.168.10.50
web     IN      A       192.168.10.60

C. Tạo tệp vùng đảo ngược /var/named/10.168.192.rev

Lưu ý rằng chỉ có octet cuối cùng của địa chỉ IP được sử dụng cho bản ghi PTR.

Copy
$TTL 86400
@ IN SOA ns1.internal.local. admin.internal.local. (
              2025092701 ; Serial
              3600       ; Refresh (1 giờ)
              1800       ; Retry (30 phút)
              604800     ; Expire (1 tuần)
              86400 )    ; TTL tối thiểu (1 ngày)

@       IN      NS      ns1.internal.local.
@       IN      NS      ns2.internal.local.

10      IN      PTR     ns1.internal.local.
20      IN      PTR     ns2.internal.local.
50      IN      PTR     client.internal.local.
60      IN      PTR     web.internal.local.

D. Kiểm tra và khởi động/tải lại

Copy
$TTL 86400
@ IN SOA ns1.internal.local. admin.internal.local. (
              2025092701 ; Serial
              3600       ; Refresh (1 giờ)
              1800       ; Retry (30 phút)
              604800     ; Expire (1 tuần)
              86400 )    ; TTL tối thiểu (1 ngày)

@       IN      NS      ns1.internal.local.
@       IN      NS      ns2.internal.local.

10      IN      PTR     ns1.internal.local.
20      IN      PTR     ns2.internal.local.
50      IN      PTR     client.internal.local.
60      IN      PTR     web.internal.local.

Bước 2: Cấu hình máy chủ DNS phụ (Slave) - 192.168.10.20

Cấu hình của máy chủ slave đơn giản hơn rất nhiều; nó chỉ cần biết IP của máy chủ master và vai trò của nó như một slave.

A. Chỉnh sửa /etc/named.conf (Slave)

Loại được đặt thành slave, và phần masters chỉ tới máy chủ chính.

Copy
$TTL 86400
@ IN SOA ns1.internal.local. admin.internal.local. (
              2025092701 ; Serial YYYYMMDDNN
              3600       ; Refresh (1 giờ)
              1800       ; Retry (30 phút)
              604800     ; Expire (1 tuần)
              86400 )    ; TTL tối thiểu (1 ngày)

@       IN      NS      ns1.internal.local.
@       IN      NS      ns2.internal.local. ; Slave NS

ns1     IN      A       192.168.10.10
ns2     IN      A       192.168.10.20

client  IN      A       192.168.10.50
web     IN      A       192.168.10.60

B. Khởi động Slave named

Copy
systemctl enable named
systemctl start named

Máy chủ slave sẽ liên hệ với máy chủ master (192.168.10.10) và thực hiện một chuyển giao vùng để kéo dữ liệu vùng, tự động tạo các tệp vùng (ví dụ: slaves/internal.local.zone). Kiểm tra /var/log/messages hoặc các nhật ký cụ thể của BIND để xác nhận.

Bước 3: Cấu hình máy khách - 192.168.10.50

Máy khách chỉ cần được cấu hình để sử dụng các máy chủ DNS.

A. Chỉnh sửa /etc/resolv.conf (Client)

Đặt IP của máy chủ master và slave làm các máy chủ tên chính và phụ.

/etc/resolv.conf

Copy
nameserver 192.168.10.10  # Master DNS
nameserver 192.168.10.20  # Slave DNS
search internal.local

B. Kiểm tra phân giải (Client)

Sử dụng dig để kiểm tra cài đặt.

Kiểm tra phân giải thuận trên máy chủ chính

Copy
dig @192.168.10.10 web.internal.local

Kiểm tra phân giải thuận trên máy chủ phụ

Copy
dig @192.168.10.20 web.internal.local

Kiểm tra phân giải ngược (PTR)

Copy
dig @192.168.10.10 -x 192.168.10.50

Thực hành tốt nhất khi sử dụng DNS

  • Thường xuyên sao lưu các tệp cấu hình: Đảm bảo luôn có một bản sao lưu để khôi phục lại nếu cần.
  • Theo dõi máy chủ DNS: Sử dụng các công cụ giám sát để theo dõi hiệu suất và độ khả dụng của máy chủ DNS.
  • Đảm bảo bảo mật: Sử dụng các biện pháp bảo mật như DNSSEC để bảo vệ DNS khỏi các cuộc tấn công.

Những cạm bẫy phổ biến

  • Thiết lập sai cấu hình: Kiểm tra kỹ các tệp cấu hình để tránh lỗi không cần thiết.
  • Quên cập nhật số sê-ri: Đảm bảo số sê-ri được cập nhật sau mỗi lần thay đổi tệp vùng để các máy chủ slave nhận được bản cập nhật mới nhất.

Mẹo tăng hiệu suất

  • Sử dụng bộ nhớ cache hiệu quả: Đảm bảo rằng các truy vấn DNS được lưu trữ trong bộ nhớ cache để cải thiện thời gian phản hồi.
  • Cấu hình TTL hợp lý: Thiết lập thời gian sống (TTL) hợp lý cho các bản ghi DNS để tối ưu hóa việc cập nhật và giảm tải cho máy chủ.

Các câu hỏi thường gặp

DNS có thể hoạt động như thế nào với mạng nội bộ?

DNS có thể được cài đặt để phục vụ các yêu cầu nội bộ, giúp quản lý các tài nguyên mạng dễ dàng hơn.

Tôi có thể sử dụng DNS mà không có Internet không?

Có, bạn có thể thiết lập DNS cho mạng cục bộ mà không cần kết nối Internet.

Kết luận

Hệ thống DNS là một thành phần quan trọng trong hạ tầng Internet, giúp người dùng dễ dàng truy cập các tài nguyên trực tuyến. Việc hiểu rõ cách hoạt động và cấu hình DNS là điều cần thiết cho mọi lập trình viên và quản trị viên mạng. Hãy đảm bảo bạn áp dụng các thực hành tốt nhất để tối ưu hóa hiệu suất và bảo mật cho hệ thống DNS của mình. Nếu bạn có bất kỳ câu hỏi nào, hãy để lại phản hồi để chúng tôi có thể hỗ trợ bạn!

Nội dung bài viết

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào