Nguyên tắc làm thế nào để phân giải tên DNS hoạt động?


10

Ngay bây giờ tôi đang tham gia một khóa học trực tuyến cho Linux sysadmin và tôi đã được hỏi một câu hỏi mà tôi thường không hiểu. Tôi biết cách tìm kiếm một máy chủ tên, nếu tôi ít nhất là nó sử dụng lệnh đào để tìm địa chỉ trong lệnh phần bổ sung, nhưng tôi đã bị mất một chút khi hỏi câu hỏi sau.

Giả sử máy chủ tên được cấu hình của bạn không có bất kỳ kết quả được lưu trong bộ nhớ cache nào, thì có bao nhiêu máy chủ tên phải truy vấn máy chủ tên của bạn để giải quyết maps.google.com? Bạn sẽ sử dụng lệnh nào để tìm tất cả các máy chủ tên này? Liệt kê một từ mỗi cấp độ và giải thích tại sao mức độ này là cần thiết.

Tôi không muốn câu trả lời, tôi chỉ muốn biết chính xác những gì tôi được yêu cầu làm.


Tôi đã suy nghĩ dig +trace, nhưng tôi không chắc ý nghĩa của các cấp là gì. Đây có thể là một câu hỏi cho Server Fault.
Big McLUNDHuge

Xin chào linux8807. Tôi đã chỉnh sửa câu hỏi của bạn để hy vọng làm cho nó rõ ràng hơn; đặc biệt, tôi đã cố gắng đặt một tiêu đề tốt hơn trên nó. Nếu bạn cảm thấy tôi đã thay đổi ý định của mình, vui lòng hoàn nguyên chỉnh sửa (nhấp vào liên kết "đã chỉnh sửa" và sau đó "khôi phục" phía trên bản sửa đổi ban đầu).
một CVn

Tôi nghĩ rằng video này giải thích nó: youtube.com/watch?v=2ZUxoi7YNss

Câu trả lời:


13

Giả sử máy chủ tên được cấu hình của bạn không có bất kỳ kết quả được lưu trong bộ nhớ cache nào, thì có bao nhiêu máy chủ tên phải truy vấn máy chủ tên của bạn để giải quyết maps.google.com? Bạn sẽ sử dụng lệnh nào để tìm tất cả các máy chủ tên này? Liệt kê một từ mỗi cấp độ và giải thích tại sao mức độ này là cần thiết.

Chà, hãy chọn cái này ra.

"Giả sử máy chủ tên được cấu hình của bạn không có bất kỳ kết quả được lưu trong bộ nhớ cache nào" - trước hết, nếu nó không có dữ liệu được lưu trong bộ nhớ cache, thì nó không thể giải quyết bất cứ điều gì. Để xử lý bộ đệm của bộ giải quyết, bạn cần có các bản ghi NS và địa chỉ (A, AAAA) cho vùng .(gốc AKA). Đó là các máy chủ tên gốc, được tìm thấy trong root-servers.net.khu vực. Không có gì kỳ diệu về khu vực đó hoặc các máy chủ DNS đó. Tuy nhiên, dữ liệu này thường được cung cấp "ngoài băng" cho trình phân giải DNS, chính xác để lấy bộ đệm của bộ phân giải. Máy chủ tên chỉ có thẩm quyền không cần dữ liệu này, nhưng giải quyết máy chủ tên thì có.

Ngoài ra, "giải quyết" để làm gì? Bất kỳ RRtype ở tên đó? Một ARR? Hay cái gì khác? Lớp nào ( CH/ Chaosnet, IN/ Internet, ...)? Quá trình chính xác sẽ khác nhau, nhưng ý tưởng chung vẫn giống nhau.

Nếu chúng ta có thể giả định rằng chúng ta biết cách tìm các máy chủ tên gốc nhưng không có gì hơn, và bằng cách "giải quyết", chúng ta có nghĩa là có được nội dung của bất kỳ IN ARR nào được liên kết với tên đó, nó sẽ thực tế hơn rất nhiều.

Để phân giải tên DNS, về cơ bản, bạn chia tên thành nhãn và sau đó thực hiện theo cách từ phải sang trái. Đừng quên .cuối cùng; bạn thực sự sẽ được giải quyết maps.google.com.chứ không phải maps.google.com. Điều đó khiến chúng tôi cần phải giải quyết (chúng tôi biết điều này, nhưng việc triển khai trình phân giải DNS có thể sẽ không):

  • .
  • com.
  • google.com.
  • maps.google.com.

Bắt đầu với việc tìm ra nơi để yêu cầu nội dung .. Điều đó thật dễ dàng; chúng tôi đã có thông tin đó: tên máy chủ tên gốc và địa chỉ IP . Vì vậy, chúng tôi có một máy chủ tên gốc. Giả sử chúng tôi quyết định sử dụng 198.41.0.4 ( a.root-servers.net, cũng 2001: 503: ba3e :: 2: 30) để tiếp tục phân giải tên. Trong thực tế, một trong những điều đầu tiên được trình giải quyết thực hiện có thể là sử dụng dữ liệu máy chủ gốc được cung cấp để yêu cầu một trong các máy chủ vùng gốc cung cấp danh sách chính xác các máy chủ tên cho vùng gốc, do đó đảm bảo rằng nếu có bất kỳ Tên và địa chỉ IP là hợp lệ và có thể truy cập, nó sẽ có một bộ dữ liệu đầy đủ và đầy đủ cho vùng gốc khi bắt đầu phân giải.

Bắn ra một truy vấn DNS cho maps.google.com. IN A198.41.0.4. Nó sẽ cho bạn biết trong câu trả lời "không, sẽ không làm điều đó, nhưng đây là người có thể biết"; đó là một lời giới thiệu. Nó chứa NScác bản ghi cho vùng gần nhất mà máy chủ đang nghi vấn biết, cùng với bất kỳ bản ghi keo nào mà máy chủ tình cờ có sẵn. Nếu không có dữ liệu keo nào, trước tiên bạn phải giải quyết máy chủ có tên trong bản ghi NS bạn đã chọn, do đó, tạo ra một độ phân giải tên riêng để lấy địa chỉ IP; nếu dữ liệu keo có sẵn, bạn sẽ có địa chỉ IP của máy chủ tên ít nhất là "gần" hơn với câu trả lời. Trong trường hợp này, đó sẽ là tập hợp các máy chủ cho com.vùng và dữ liệu keo cũng được cung cấp.

Lặp lại quá trình, hỏi một trong những com.máy chủ tên cùng một câu hỏi. Họ cũng không biết, nhưng sẽ giới thiệu bạn đến các máy chủ tên có thẩm quyền của Google. Tại thời điểm này trong trường hợp chung, nó sẽ bị đánh hoặc bỏ lỡ liệu dữ liệu keo có được cung cấp hay không; chẳng có gì ngăn cản một comtên miền chỉ có máy chủ tên nl, ví dụ, trong trường hợp đó, dữ liệu keo không có khả năng có sẵn từ các máy chủ gTLD. Dữ liệu keo được cung cấp cũng có thể không đầy đủ hoặc nếu bạn thực sự không may mắn thì thậm chí có thể không chính xác! Bạn phải luôn sẵn sàng để sinh ra độ phân giải tên riêng mà tôi đã đề cập ở trên.

Về cơ bản, bạn tiếp tục đi cho đến khi bạn nhận được câu trả lời với bộ aacờ (câu trả lời có thẩm quyền). Câu trả lời đó sẽ cho bạn biết những gì bạn đang yêu cầu hoặc RR mà bạn yêu cầu không tồn tại (hoặc có NXDOMAINhoặc NOERRORkhông có bản ghi dữ liệu phản hồi). Tiếp tục tìm kiếm các câu trả lời như SERVFAIL(và lùi lại một bước và thử máy chủ khác nếu bạn nhận được; nếu tất cả các máy chủ được đặt tên quay lại SERVFAIL, không thực hiện quy trình giải quyết tên và SERVFAILtự trả lại cho khách hàng).

Cách khác để yêu cầu toàn bộ RRname từ mỗi máy chủ (mà có thể được coi là xấu thực hành) là sử dụng danh sách chia-up của nhãn mà chúng ta xác định trước đó, hãy hỏi các máy chủ tên được đưa ra bởi máy chủ hơn nữa về phía gốc cho IN NSIN A/ IN AAAARR cho nhãn đó và sử dụng các nhãn đó để tiếp tục quá trình phân giải tên. Điều đó chỉ khác một chút trong thực tế và quy trình tương tự vẫn được áp dụng.

Bạn có thể mô phỏng toàn bộ quá trình này bằng cách sử dụng +tracetùy chọn cho digtiện ích, là một phần của BIND hoặc set debugtrong nslookup.

Nó cũng đáng ghi nhớ rằng một số RRtypes (đáng chú ý NS, MXvà một vài người khác; cũng vậy, A6được khá tốt được sử dụng trong một thời gian nhưng đã bị phản đối) có thể và làm tài liệu tham khảo RR khác. Trong trường hợp đó, bạn có thể cần phải sinh ra một quy trình giải quyết tên khác để trả lời đầy đủ và hữu ích cho khách hàng của mình.


1
Tôi nghĩ rằng câu trả lời này khá phù hợp với yêu cầu của OP để hiểu các khái niệm thay vì chỉ là thủ tục.
111 ---

Vì vậy, những gì tôi đang làm là đào maps.google.com IN A, sau đó tôi sẽ đào theo cách tương tự nhưng với ns1.google.com nếu điều đó là chính xác, nếu đó là, giáo viên đang nói về cấp độ nào và tại sao họ sẽ nói về Cần thiết?
linux8807

@ linux8807 Bạn sẽ digđặt tên ns1.google.com khi bạn đã nhận được một lượt giới thiệu đến nó không bao gồm địa chỉ IP trong hồ sơ keo được cung cấp. Sau đó, bạn sẽ tiếp tục với quá trình giải quyết tên trước đó.
một CVn

@ MichaelKjorling Tất cả các bản ghi ns1-4.google.com đều có địa chỉ IP trong hồ sơ keo. i.imgur.com/o79aIGB.png
linux8807

@ linux8807 Điều đó sẽ rất thường xảy ra khi các bản ghi keo nằm dưới cùng TLD như tên miền được truy vấn. Bạn không thể dựa vào nó trong trường hợp chung .
một CVn

7

Có một dnstracerlệnh (bạn có thể cần phải cài đặt nó, ít nhất là trên Debian, đó cũng là tên gói) sẽ theo dõi độ phân giải tên. Bạn cũng có thể (như Koveras chỉ ra trong một bình luận) sử dụng dig.

Đây là với dnstracer. -s .có nghĩa là bắt đầu với gốc; -4có nghĩa là sử dụng IPv4 (v6 bị hỏng ở đây ...); -ocó nghĩa là thực sự hiển thị các địa chỉ IP được giải quyết ở cuối (Tôi đã bỏ qua phần đầu ra đó, có rất nhiều địa chỉ đó).

anthony@Zia:~$ dnstracer -s . -4 -o maps.google.com
Tracing to maps.google.com[a] via A.ROOT-SERVERS.NET, maximum of 3 retries
A.ROOT-SERVERS.NET [.] (198.41.0.4) 
 |\___ m.gtld-servers.net [com] (192.55.83.30) 
 |     |\___ ns4.google.com [google.com] (216.239.38.10) Got authoritative answer 
 |     |\___ ns3.google.com [google.com] (216.239.36.10) Got authoritative answer 
 |     |\___ ns1.google.com [google.com] (216.239.32.10) Got authoritative answer 
 |      \___ ns2.google.com [google.com] (216.239.34.10) Got authoritative answer 
⋮

Đầu ra đó tiếp tục, vì dnstracer theo dõi tất cả các đường dẫn (vì vậy bạn có thể thấy nếu, ví dụ, một số máy chủ tên có vùng lỗi thời).

Vì vậy, bạn có thể thấy nó cần một truy vấn đến máy chủ tên gốc, sau đó một truy vấn đến các máy chủ gtld (máy chủ cho vùng .com), cuối cùng là một truy vấn đến máy chủ tên Google.

Với dig, đầu ra dài dòng hơn nhiều (vì vậy tôi sẽ thực hiện nhiều thao tác cắt):

dig -4 maps.google.com. +norecurse +trace
; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> maps.google.com. +norecurse +trace
;; global options: +cmd
.                       425379  IN      NS      b.root-servers.net.
⋮
com.                    172800  IN      NS      f.gtld-servers.net.
⋮
google.com.             172800  IN      NS      ns2.google.com.
⋮
maps.google.com.        300     IN      A       74.125.228.70
⋮

digngoài ra cho thấy rằng nó đã thực hiện một truy vấn để có được danh sách các máy chủ tên gốc hiện tại. Đây là điều mà một máy chủ DNS thường sẽ làm rất ít khi. Vì vậy, tôi không chắc chắn nếu bạn đếm nó trong trường hợp bộ nhớ cache lạnh của bạn.

Tất nhiên bạn cũng có thể xem các truy vấn thực tế trên dây, ví dụ : wireshark.


Tôi sẽ không thể cài đặt bất cứ thứ gì vì nó được thiết lập trong một thiết bị đầu cuối nhưng một khi tôi đi làm về, tôi sẽ thử dnstracer và xem nó có hoạt động không, và cô ấy có yêu cầu * (216.239,38.10) (216.239.36.10) ( 216.239.32.10) (216.239.34.10) * này? Nếu vậy, tôi đã có ý thức có thể truy cập vào đó nhưng không phải bằng một câu trả lời có thẩm quyền. Ngoài ra, đây có phải là những gì cô ấy đang đề cập đến theo cấp độ?
linux8807

@ linux8807 Bạn có thể sử dụng dignếu bạn không có dnstracer(hoặc nếu bạn thích digđịnh dạng của nó). Các địa chỉ IP mà dnstracer đang xuất là các địa chỉ IP của máy chủ tên; tên của họ ở bên trái. a.root-servers.net là 198.41.0.4, v.v ... Đó là những máy chủ đang được truy vấn và nó cho bạn biết khu vực nào trong dấu ngoặc vuông. Tôi nghi ngờ cấp độ đầu tiên là * .root-server.net (for .), cấp độ thứ hai là * .gtld-server.net (for .com), v.v.
derobert
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.