Bản ghi NS (NS record)

Bản ghi NS

Bản ghi NS (viết tắt của "name server" – máy chủ tên miền) được sử dụng để chỉ định các máy chủ DNS Authoritative cho một tên miền. Nó cho các bộ phân giải DNS (DNS resolvers) biết nên liên hệ với máy chủ nào khi cần truy vấn các bản ghi DNS của tên miền đó. Đây là cơ chế cho phép các tổ chức khác nhau sở hữu các tên miền riêng biệt.

Giống như một số loại bản ghi DNS khác, loại bản ghi này đã được giới thiệu trong các đặc tả DNS gốc (RFC 1034 và RFC 1035) vào năm 1987. Cùng với bản ghi Start of Authority (SOA), các bản ghi NS là thành phần thiết yếu để DNS hoạt động một cách chính xác.

Cấu trúc của bản ghi NS theo RFC 1035 như sau:

<Tên miền> <class> <ttl> NS < tên máy chủ tên miền>

Mỗi bản ghi NS xác định tên của một máy chủ DNS Authoritative cho một vùng DNS cụ thể. Để chỉ định danh sách các máy chủ DNS Authoritative cho một vùng DNS, một tập hợp các bản ghi NS sẽ được công bố, trong đó mỗi bản ghi NS trong tập hợp xác định một máy chủ DNS Authoritative.

Máy chủ DNS Authoritative là gì?

Máy chủ tên miền (name server) là một máy chủ chạy phần mềm DNS và lắng nghe các truy vấn DNS qua cổng 53. Khi máy chủ này nhận được một truy vấn DNS, nó sẽ tra cứu cơ sở dữ liệu DNS cục bộ của mình. Nếu tìm thấy câu trả lời trong cơ sở dữ liệu, nó sẽ phản hồi với dữ liệu được yêu cầu. Nếu không tìm thấy, tùy thuộc vào vai trò và cấu hình của máy chủ, nó sẽ hoặc trả về lỗi, hoặc liên hệ với các máy chủ tên miền khác để xác định câu trả lời.

Máy chủ DNS Authoritative là một máy chủ tên miền đã được phân cấp chuyển giao một zone tên miền, và lưu trữ bản sao đầy đủ của zone tên miền đó. Do đó, một máy chủ DNS Authoritative cho zone tên miền example.vn là một máy chủ lắng nghe các truy vấn DNS trên cổng 53, có cơ sở dữ liệu DNS cục bộ chứa toàn bộ nội dung của zone example.vn.

Máy chủ DNS Authoritative chính (primary hay master) cho một zone tên miền thường lưu trữ zone này từ một tập tin dữ liệu DNS tiêu chuẩn. Zone tên miền phải có ít nhất một máy chủ DNS Authoritative khác và thường sẽ có tổng cộng khoảng bốn máy chủ. Chỉ có một máy chủ chính (primary/master) cho một zone tên miền, do đó các máy chủ DNS Authoritative còn lại sẽ sử dụng cơ chế đồng bộ dữ liệu (zone transfer) (xem RFC 5936 và RFC 1995) để sao chép dữ liệu từ máy chủ chính.

Những máy chủ sử dụng cơ chế đồng bộ dữ liệu (zone transfer) để lấy bản sao của một zone tên miền được gọi là máy chủ phụ (secondary). Tuy nhiên – và đây là điểm dễ gây nhầm lẫn – các máy chủ phụ này vẫn là DNS Authoritative. Chúng lưu trữ bản sao của zone tên miền và có quyền trả lời truy vấn với mức độ xác thực (authoritativeness) tương đương với máy chủ chính.

Ví dụ, nếu một zone tên miền có bốn máy chủ DNS Authoritative, thì có thể bao gồm một máy chủ chính và ba máy chủ phụ. Mô hình này phổ biến, nhưng không phải lúc nào cũng là phương án tối ưu. Máy chủ master có thể được ẩn đi để bảo vệ khỏi các cuộc tấn công, và bốn máy chủ DNS Authoritative được công bố trong bản ghi NS của zone có thể đều là máy chủ phụ.

Ngoài ra, một số nhà cung cấp DNS quy mô lớn sử dụng giao thức sao chép riêng thay vì cơ chế đồng bộ dữ liệu (zone transfer). Điều này thường thấy ở các nhà cung cấp DNS quy mô đám mây.

Cuối cùng, phương thức sao chép dữ liệu DNS giữa các máy chủ DNS Authoritative không quan trọng bằng việc đảm bảo rằng tất cả các máy chủ DNS Authoritative đều có bản sao đầy đủ của zone tên miền, và luôn sẵn sàng phản hồi truy vấn DNS cho tất cả các tên miền nằm trong zone đó. Xem thêm RFC 8499 để có định nghĩa kỹ thuật chính xác hơn về “authoritative server” và các thuật ngữ liên quan đến DNS.

Bản ghi NS trong zone tên miền

Mỗi zone tên miền trong DNS bắt buộc phải có chính xác một bản ghi SOA và hai hoặc nhiều hơn bản ghi NS. Các bản ghi SOA và NS này là bắt buộc, và cùng nhau xác định sự tồn tại của một zone trong hệ thống DNS. Một zone tên miền có thể bao gồm các bản ghi như trong ví dụ dưới đây:

example.vn. 86400 SOA  ns1.example.vn. admin.example.vn. (...)
example.vn. 86400 NS   ns1.example.vn.
example.vn. 86400 NS   ns2.example.vn.
example.vn. 86400 NS   ns3.example.vn.
example.vn. 86400 NS   ns4.example.vn.

Trong ví dụ này, chúng ta có một bản ghi SOA và bốn bản ghi NS. Việc có bốn bản ghi NS cho một zone là điều phổ biến. Hầu hết các nhà cung cấp DNS đám mây hiện nay tự động cung cấp bốn bản ghi máy chủ tên miền (name server), nhưng việc có ít nhất hai bản ghi NS vẫn được xem là hợp lệ theo chuẩn.

Yêu cầu tối thiểu phải có hai bản ghi NS nhằm đảm bảo một mức độ dự phòng cơ bản, được quy định trong RFC 1034, mục 4.1 và RFC 1912, mục 2.8. Một zone có thể có nhiều hơn bốn bản ghi NS, nhưng điều này thường không cần thiết.

Giá trị TTL (time-to-live) cho các bản ghi NS nên được đặt tương đối dài – điển hình là từ một đến hai ngày. Không nên sử dụng giá trị TTL ngắn cho bản ghi NS. Như đã được đề cập trong bài viết về việc chọn TTL trong DNS, nếu xảy ra sự cố DNS ngắn hạn kéo dài lâu hơn TTL của bản ghi NS, toàn bộ zone có thể gặp sự cố gián đoạn hoàn toàn do không còn truy cập được bất kỳ bản ghi DNS nào bên trong zone.

Bản ghi NS trong các phân cấp chuyển giao (delegations)

Như đã được giải thích trong bài viết về phân cấp chuyển giao zone tên miền trong DNS, các bản ghi NS tồn tại trong cả chính zone đó và trong zone tên miền cha (parent zone). Để phân giải (resolve) một tên miền, một trình phân giải DNS (DNS resolver) phải đi theo một chuỗi, hoặc một "dấu vết", các bản ghi NS. Chuỗi này bắt đầu từ Root zone và đi xuống qua các zone con (child zone).

Trong ví dụ này, chuỗi sẽ bắt đầu từ zone Root ".", tiếp theo là vn., và sau đó là vnnic.vn.

Bằng cách sử dụng các bản ghi NS để lần theo chuỗi này bắt đầu từ zone gốc, một DNS resolver sẽ cuối cùng đến được máy chủ DNS Authoritative cho zone tên miền cần truy vấn. Máy chủ DNS Authoritative đó sẽ cung cấp câu trả lời cho truy vấn DNS ban đầu.

 

 

 

Địa chỉ IP của các máy chủ tên miền (name servers)

Chúng ta có thể đã nhận thấy rằng mỗi bản ghi NS chứa tên (hostname) của một máy chủ DNS Authoritative duy nhất, ví dụ: ns4.example.vn. Tuy nhiên, chỉ thông tin này là chưa đủ để một trình phân giải DNS (DNS resolver) có thể liên hệ với máy chủ DNS đó. Để một DNS resolver có thể liên lạc được với máy chủ tên miền, nó phải biết địa chỉ IP (hoặc các địa chỉ IP) của máy chủ đó.

DNS ở đây có một tính chất hơi "đệ quy": chính DNS được sử dụng để tra cứu địa chỉ IP của các máy chủ DNS, và sau đó các địa chỉ IP này lại được sử dụng bởi DNS để liên hệ với các máy chủ DNS khác trong hệ thống DNS.

Ví dụ, nếu một trình phân giải DNS đệ quy (recursive DNS resolver) cần trả lời một truy vấn cho một tên miền nằm trong example.vn, thì nó sẽ cần phải thực hiện các truy vấn DNS bổ sung để xác định địa chỉ IP của ns1.example.vn, ns2.example.vn, v.v.

DNS được thiết kế để giảm thiểu số lượng truy vấn bổ sung này bằng cách cho phép các địa chỉ IP được đính kèm dưới dạng dữ liệu bổ sung (additional data) trong phản hồi từ quá trình phân cấp chuyển giao (delegation). Bên cạnh đó, cơ chế cache cũng được sử dụng để giảm tải cho hệ thống và tăng tốc độ phân giải.

Tuy nhiên, điều cực kỳ quan trọng là DNS phải có khả năng phân giải tên host của từng máy chủ DNS Authoritative trong mỗi zone tên miền. Nếu điều này không được đảm bảo, zone tên miền đó sẽ không thể phân giải được, và sẽ gây ra sự cố gián đoạn dịch vụ đối với bất kỳ client nào cố gắng truy cập một máy chủ web hoặc tài nguyên nào đó thuộc zone đó.

Thứ tự và ưu tiên của bản ghi NS

Người vận hành một zone tên miền trong DNS không thể chỉ định rằng một máy chủ tên miền nào đó là master và nên được truy vấn trước. Điều này có nghĩa là người quản trị zone phải đảm bảo rằng tất cả các máy chủ DNS Authoritative cho zone đó chứa dữ liệu zone giống hệt nhau và quá trình đồng bộ dữ liệu (zone transfer) giữa các máy chủ diễn ra nhanh chóng và đáng tin cậy.

DNS resolver sẽ cố gắng thực hiện phân giải thông qua nhiều máy chủ tên miền khác nhau nếu cần thiết. Ví dụ, nếu ns3.example.vn tạm thời ngừng hoạt động để bảo trì, các DNS resolver cố gắng truy vấn nó trong khoảng thời gian đó sẽ tự động truy vấn lại một máy chủ tên miền khác trong cùng zone.

Anycast cho địa chỉ IP của máy chủ tên miền

Đối với các dịch vụ trên Internet, việc đảm bảo phản hồi nhanh nhất có thể đến người dùng là điều rất quan trọng – không ai muốn một trang web tải chậm, giật lag cả! Giao thức DNS là bắt buộc đối với HTTP và hầu hết các giao thức trên Internet, nên việc phân giải DNS nhanh là yếu tố then chốt.

Một cách để tăng tốc độ phân giải DNS là đặt các máy chủ DNS Authoritative càng gần với người dùng càng tốt. Vì lý do này, nhiều nhà cung cấp dịch vụ DNS trên nền tảng đám mây (cloud DNS providers) đã triển khai hàng trăm trung tâm dữ liệu trên toàn cầu, giúp gần như mọi người trên Trái Đất đều có thể nhận được phản hồi DNS nhanh chóng.

Tuy nhiên, nếu mỗi máy chủ tên miền trong một zone phải có hàng trăm địa chỉ IP thì sẽ rất khó quản lý. Giải pháp ở đây chính là Anycast, một phương pháp rất tinh tế giúp đơn giản hóa vấn đề này. Với Anycast, mỗi máy chủ tên miền chỉ cần có một hoặc hai địa chỉ IP (ví dụ một địa chỉ IPv4 và một địa chỉ IPv6).

Khi một truy vấn DNS được gửi từ bất kỳ đâu trên thế giới tới một trong những địa chỉ IP này, Anycast sẽ đảm bảo truy vấn được định tuyến tự động đến trung tâm dữ liệu gần nhất, giúp người dùng nhận được phản hồi DNS nhanh nhất có thể.

Anycast là một chủ đề khá phức tạp, được xây dựng chủ yếu dựa trên Giao thức định tuyến biên (BGP – Border Gateway Protocol). Do sự phức tạp đó, và cả vì các cuộc tấn công độc hại, một số sự cố nghiêm trọng trong quá khứ đã liên quan đến sự cố của BGP. Tuy vậy, Anycast vẫn là một công cụ vô cùng mạnh mẽ để cải thiện hiệu suất DNS và hiện đang được sử dụng bởi hầu hết các nhà cung cấp DNS lớn trên thế giới.

Các sự cố phổ biến thường gặp

Vì quá trình phân giải DNS phụ thuộc vào chuỗi bản ghi NS từ Root zone xuống đến từng zone tên miền cấp dưới, nên việc cấu hình các bản ghi NS là vô cùng quan trọng.

Một lỗi phổ biến là phân cấp chuyển giao không hợp lệ (lame delegations) – xảy ra khi một hoặc nhiều bản ghi NS bị sai. Đây là nguyên nhân phổ biến gây ra lỗi phân giải DNS. Việc duy trì bản ghi NS đồng nhất ở cả zone con và zone cha (parent zone) đôi khi là một nhiệm vụ không hề dễ dàng. Người quản trị zone DNS cần hết sức cẩn trọng khi thực hiện bất kỳ thay đổi nào đối với các bản ghi NS, vì thay đổi đó cần được thực hiện ở cả gốc của zone tên miền và ở bản ghi phân cấp chuyển giao (delegation) trong zone cha. Một lỗi trong cấu hình bản ghi NS ở bất kỳ zone nào cũng có thể dẫn đến mất kết nối hoàn toàn (outage).

Một vấn đề phổ biến khác là khi các thay đổi DNS không được đồng bộ dữ liệu (zone transfer) giữa các máy chủ tên miền. Do lỗi thao tác của con người hoặc lỗi hệ thống, thay đổi được thực hiện ở một máy chủ DNS có thể không được đồng bộ đến các máy chủ DNS khác. Trong trường hợp này, một số client sẽ thấy thay đổi, một số thì không, tùy vào máy chủ DNS nào được truy vấn. Điều này sẽ dẫn đến mất kết nối ngẫu nhiên (sporadic outages) với một số người dùng.

RFC 1912 mục 2.8 có phần trình bày rất rõ về các vấn đề tiềm ẩn với bản ghi NS.
Truy vấn các bản ghi NS của một zone

Các bản ghi NS của một zone tên miền có thể được truy vấn bằng các công cụ dòng lệnh như dig hoặc nslookup.

Để tìm bản ghi NS của tên miền vnnic.vn, chúng ta có thể dùng lệnh sau với dig:

dig NS vnnic.vn

Trên các hệ điều hành hỗ trợ nslookup, chúng ta có thể dùng lệnh sau:

nslookup -type=ns vnnic.vn

Nguyễn Văn Trí