Computer >> Máy Tính >  >> Kết nối mạng >> Internet

Tại sao gốc của miền không thể là CNAME - và các mẩu tin khác về DNS

Bài đăng này sẽ sử dụng câu hỏi trên để khám phá DNS , dig , A bản ghi, CNAME bản ghi và ALIAS/ANAME hồ sơ từ quan điểm của người mới bắt đầu. Vì vậy, hãy bắt đầu.

Đầu tiên, một số định nghĩa

  • Hệ thống tên miền (DNS):hệ thống tổng thể để chuyển đổi tên miền dễ nhớ của con người (example.com) thành địa chỉ IP (93.184.216.34). Địa chỉ IP là của một máy chủ, thường là máy chủ web, nơi lưu trữ các tệp cần thiết để hiển thị một trang web.
  • Máy chủ DNS (còn được gọi là máy chủ định danh hoặc máy chủ định danh):Sử dụng phần mềm DNS để lưu trữ thông tin về địa chỉ miền. Có một số cấp độ - những cấp độ đó thuộc về từng ISP, Người dùng gốc (tổng số 13 trên toàn thế giới), Miền cấp cao nhất (TLD, ví dụ:‘.com’) và Máy chủ DNS cấp miền.
  • Tên miền :tên miền (ví dụ) được kết hợp với TLD (.com). Thuật ngữ 'miền' thường được sử dụng đồng nghĩa với tên miền, mặc dù chúng khác nhau. Khi bạn mua 'miền' từ công ty đăng ký tên miền hoặc người bán lại, bạn mua quyền đối với một tên miền cụ thể (example.com) và bất kỳ miền phụ nào bạn muốn tạo (my-site.example.com, mail.example.com, vv).

Luồng truy vấn cấp cao

Quy trình cấp cao về những gì xảy ra khi bạn nhập “example.com” vào trình duyệt của mình có thể được đơn giản hóa để loại bỏ các bước nhảy tới Máy chủ DNS ISP, Gốc và TLD như bên dưới:

Tại sao gốc của miền không thể là CNAME - và các mẩu tin khác về DNS
Luồng yêu cầu DNS được đơn giản hóa, có thể xem thêm trong luồng chi tiết hơn

Một miền thường có hai hoặc nhiều máy chủ định danh, chứa các bản ghi liên quan đến tên miền (example.com).

Nhiều loại bản ghi có thể được lưu trữ, hầu hết trong số đó có thể có nhiều mục nhập cho mỗi loại:

  • A :Bản ghi địa chỉ ánh xạ tên miền với địa chỉ IP
  • CNAME :Bản ghi tên hợp quy. Được sử dụng để đặt bí danh một tên miền (hoặc tên miền phụ) cho một tên miền khác. Chúng ta sẽ xem xét vấn đề này chi tiết hơn sau.
  • MX :Bản ghi eXchange qua thư cho các nhân viên gửi email biết nơi họ sẽ gửi email của bạn
  • TXT :các bản ghi Văn bản linh hoạt, để lưu trữ các chuỗi cho nhiều mục đích sử dụng khác nhau
  • SOA :bản ghi Start of Authority số ít được lưu giữ ở cấp cao nhất của miền. Chứa thông tin bắt buộc cụ thể về miền, ví dụ như máy chủ định danh chính của miền đó
  • NS :Máy chủ định danh được liên kết với miền

Khi thiết bị của bạn gửi một truy vấn tới máy chủ định danh, máy chủ sẽ tìm trong nút bản ghi của miền để tìm A bản ghi và địa chỉ IP được lưu trữ liên quan (example.com:93.184.216.34). Sau đó, điều này sẽ được trả lại cho thiết bị, được sử dụng để gửi yêu cầu đến máy chủ web chính xác để truy xuất trang web hoặc tài nguyên được yêu cầu.

Sử dụng ‘dig’

dig ( nhà cung cấp thông tin miền ) là một công cụ dòng lệnh để truy vấn máy chủ DNS. Lệnh này thường được sử dụng để khắc phục sự cố hoặc bây giờ để hiểu thêm về thiết lập hệ thống.

$ dig example.com dẫn đến một phản hồi dài được in tới thiết bị đầu cuối, kết quả đầu ra mặc định được nêu chi tiết tại đây, mà chúng tôi quan tâm đến ANSWER SECTION .

;; ANSWER SECTION:
example.com.       72703      IN     A       93.184.216.34

Và ở đó, chúng ta có thể thấy rằng example.com trả về A bản ghi của 93.184.216.34 . Đôi khi tên miền sẽ có nhiều hơn một A ghi lại, nếu nhiều máy chủ web có thể cung cấp thông tin cần thiết.

Còn nữa! Nếu chúng ta thử một số ví dụ khác, chúng ta có thể sớm thấy rằng một bản ghi chung khác xuất hiện:CNAME .

$ dig www.skyscanner.net :

;; ANSWER SECTION:
www.skyscanner.net. 169 IN CNAME www.skyscanner.net.edgekey.net.
www.skyscanner.net.edgekey.net. 5639 IN CNAME e11316.a.akamaiedge.net.
e11316.a.akamaiedge.net. 20 IN A 23.217.6.192
www.skyscanner.net.edgekey.net. 5639 IN CNAME e11316.a.akamaiedge.net.
e11316.a.akamaiedge.net. 20 IN A 23.217.6.192

Sử dụng +short cờ cho phép chúng tôi thấy rõ đường dẫn được hình thành:

$ dig www.skyscanner.net +short

www.skyscanner.net.edgekey.net.
e11316.a.akamaiedge.net.
23.217.6.192

CNAME

A CNAME bản ghi cho phép một tên miền được sử dụng làm bí danh cho một miền chuẩn (true) khác.

Khi máy chủ DNS trả về CNAME ghi lại, nó sẽ không trả lại cho khách hàng. Thay vào đó, nó sẽ lại tra cứu tên miền được trả về và lần lượt trả về A địa chỉ IP của bản ghi. Chuỗi này có thể tiếp tục nhiều CNAME sâu, nhưng sau đó bị ảnh hưởng hiệu suất nhỏ từ nhiều lần tra cứu trước khi bộ nhớ đệm diễn ra.

Một ví dụ đơn giản về điều này có thể là nếu bạn có một máy chủ nơi bạn lưu giữ tất cả các bức ảnh của mình. Bạn có thể truy cập thông thường thông qua photos.example.com . Tuy nhiên, bạn cũng có thể muốn nó cho phép truy cập qua photographs.example.com . Một cách để thực hiện điều này là thêm CNAME ghi lại điểm photographs thành photos . Điều này có nghĩa là khi ai đó truy cập photographs.example.com chúng sẽ được cung cấp nội dung giống như photos.example.com .

Sử dụng truy vấn $ dig photographs.example.com chúng ta sẽ thấy:

photographs.example.com    IN   CNAME photos.example.com
photos.example.com         IN   A     xx.xxx.x.xxx

Điều quan trọng cần lưu ý là CNAME là mảnh đó ở phía bên tay phải. Phía bên tay trái là tên bí danh hoặc nhãn.

Một cách sử dụng phổ biến khác là cho www tên miền phụ. Đã mua example.com bạn cũng có thể muốn những người dùng nhập www.example.com để xem cùng một nội dung.

Điều đáng chú ý ở đây là example.com có thể được gọi là tên miền đỉnh, gốc hoặc tên miền rỗng.

Một tùy chọn sẽ là thiết lập một A khác ghi lại, trỏ đến cùng một địa chỉ IP như cho example.com . Điều này hoàn toàn hợp lệ và là example.com thực có, nhưng nó không mở rộng quy mô tốt. Điều gì xảy ra nếu bạn cần cập nhật địa chỉ IP example.com chỉ tới? Bạn cũng cần cập nhật nó cho www tên miền phụ và bất kỳ tên miền nào khác mà bạn có thể sử dụng.

Nếu một CNAME bản ghi được sử dụng để làm bí danh www.example.com để trỏ tới example.com thì chỉ có miền gốc mới phải được cập nhật, vì tất cả các nút khác đều trỏ đến nó.

Các giới hạn của CNAME

Vào thời điểm các tiêu chuẩn DNS được viết ra, một số quy tắc đã được đặt ra để chi phối việc sử dụng chúng. RFC 1912 và RFC 2181 đặt ra rằng:

  • SOANS các bản ghi bắt buộc phải có ở miền gốc
  • CNAME bản ghi chỉ có thể tồn tại dưới dạng bản ghi đơn lẻ và không thể được kết hợp với bất kỳ bản ghi tài nguyên nào khác (DNSSEC SIG , NXTKEY RR hồ sơ bị loại trừ)

Điều này không bao gồm CNAME được sử dụng trên miền gốc, vì hai quy tắc sẽ mâu thuẫn với nhau.

Điều quan trọng ở đây là đây là giới hạn hợp đồng, không phải giới hạn kỹ thuật. Có thể sử dụng CNAME tận gốc, nhưng nó có thể dẫn đến các lỗi không mong muốn, vì nó đang phá vỡ hợp đồng hành vi được mong đợi.

Ví dụ về điều này được Cloudflare cho biết, mô tả các sự cố họ gặp phải với máy chủ thư Microsoft Exchange sau khi sử dụng CNAME trên miền gốc của họ:

Tên miền thường chỉ định máy chủ xử lý email của họ thông qua cái được gọi là Bản ghi MX. Vấn đề là các máy chủ Exchange… có thể nhận CNAME ở bản ghi gốc và sau đó không tôn trọng đúng cách CNAME được đặt tại bản ghi MX. Bạn thực sự không thể đổ lỗi cho Exchange. Chúng đang hoạt động theo các giả định do đặc tả DNS đưa ra.

Ở đây bạn sẽ thấy nhược điểm có thể xuất hiện trong một số phần mềm hoặc thư viện máy chủ. Vì có một tiêu chuẩn cho CNAME duy nhất bản ghi tại một nút, không có bản ghi nào khác được tìm kiếm. Tất cả các bản ghi khác sẽ bị bỏ qua một cách im lặng, không có cảnh báo hoặc thông báo lỗi. Ngay cả khi MX bản ghi đã được thiết lập để nhận email, MX sẽ bị bỏ qua như thể nó không tồn tại vì CNAME được đánh giá đầu tiên. Điều này cũng đúng nếu có A record:CNAME sẽ được ưu tiên hơn và A bản ghi sẽ không được đọc.

Internet hiện đại

Vì vậy, tại sao đây là một vấn đề? Tại sao bạn lại muốn sử dụng CNAME cho tên miền gốc của bạn? Chắc chắn đó là phần cuối của con đường khi tìm kiếm địa chỉ IP của máy chủ web lưu trữ nội dung của bạn?

Trong bối cảnh internet hiện đại, điều đó không còn đúng nữa. Thế giới rất khác so với khi các tiêu chuẩn DNS được viết ra.

Bạn có thể chọn sử dụng Nền tảng làm nhà cung cấp Dịch vụ (PaaS) như Heroku và lưu trữ nội dung trên máy chủ web của họ. Bạn kiểm soát nội dung, nhưng không kiểm soát cơ sở hạ tầng và nhà cung cấp PaaS thực hiện công việc bảo trì mạng. Họ thường cung cấp cho bạn một URL (my-app.herokuapp.com ) là miền phụ của miền gốc của chúng và bạn có thể xem địa chỉ IP cho (các) máy chủ web mà nội dung của bạn đang sử dụng. Nhưng những điều này hoàn toàn nằm trong sự kiểm soát của nhà cung cấp PaaS và sẽ thay đổi mà không cần cảnh báo trước.

Quy mô và tần suất của các thay đổi phụ trợ do nhà cung cấp PaaS thực hiện có thể gây khó khăn cho việc duy trì miền gốc của bạn A bản ghi trỏ đến một địa chỉ IP duy nhất. Lý tưởng nhất là bạn muốn làm điều này:

example.com      IN   CNAME    my-app.herokuapp.com.www.example.com  IN   CNAME    my-app.herokuapp.com.example.com      IN   CNAME    my-app.herokuapp.com.
www.example.com  IN   CNAME    my-app.herokuapp.com.

để cho phép Heroku (hoặc nhà cung cấp máy chủ đã chọn của bạn) quản lý việc cập nhật A ghi lại rằng CNAME chỉ đến mà không có bất kỳ thay đổi nào được thực hiện từ phía bạn. Tuy nhiên, như chúng ta đã biết, điều này phá vỡ đặc điểm kỹ thuật DNS, vì vậy đó là một ý tưởng rất tồi.

Có thể chỉ cần triển khai chuyển hướng 301/302 từ example.com thành www.example.com. Tuy nhiên, hướng dẫn đó diễn ra trên máy chủ web (vì vậy vẫn gặp sự cố khi cần sử dụng A cố định ghi lại trong DNS để trỏ đến máy chủ web đó) hoặc chuyển hướng nhà cung cấp DNS tùy chỉnh (gặp phải các biến chứng với HTTPS).

Điều này cũng có tác dụng phụ là thay đổi miền mà bạn thấy trên thanh URL mà bạn có thể không muốn. Phương pháp này dành cho khi trang web của bạn đã di chuyển vĩnh viễn hoặc khi bạn đang cố gắng duy trì thứ hạng SEO, thay vì giải quyết vấn đề của chúng tôi là trỏ đến một phần phụ trợ thay đổi phức tạp theo cách có thể mở rộng.

Giải pháp

Một số nhà cung cấp DNS hiện đã phát triển các giải pháp tùy chỉnh để khắc phục sự cố này, bao gồm:

  • ALIAS tại DNSimple
  • ANAME tại DNS Made Easy
  • ANAME tại easyDNS
  • CNAME (ảo) tại CloudFlare

Đây là tất cả các loại bản ghi ảo cung cấp CNAME như hành vi, không có nhược điểm nào. Việc triển khai chính xác có thể khác nhau, nhưng ở cấp độ cao khi máy chủ DNS nhìn thấy một trong các loại bản ghi ảo này, nó sẽ hoạt động như một trình phân giải DNS. Nó tuân theo chuỗi được tạo bởi bí danh cho đến khi nó phân giải ở A ghi lại (hoặc các bản ghi) và trả về các A này các bản ghi vào máy chủ DNS. Điều này 'làm phẳng' CNAME chuỗi vào A (các) bản ghi được trả về, và không thể phân biệt được với truy vấn đã gửi. Truy vấn chỉ thấy một A thuần túy bản ghi, không phá vỡ đặc điểm kỹ thuật DNS và không có bất kỳ nhược điểm nào của CNAME .

Các bản ghi ảo này có thể nằm cùng với các bản ghi khác tại gốc mà không sợ các hành vi ngoài ý muốn. Tùy thuộc vào phương pháp phân giải DNS của nhà cung cấp khi thực hiện theo CNAME chuỗi, chúng cũng có thể có lợi ích về hiệu suất từ ​​việc lưu vào bộ nhớ đệm các lần tra cứu trước đó.

Để thiết lập DNSimple, chúng tôi sẽ định cấu hình như bên dưới. Giải pháp này có tất cả các ưu điểm của bí danh tên miền và không có rủi ro nào khi sử dụng nó ở cấp cơ sở.

example.com      IN   ALIAS    my-app.herokuapp.com.www.example.com  IN   CNAME    my-app.herokuapp.com.

Cảm ơn vì đã đọc! ?

Như mọi khi, sẵn sàng cho mọi chỉnh sửa hoặc điểm bổ sung.

Tài nguyên

  • Máy chủ DNS là gì
  • Thiết lập Máy chủ Định danh DNS
  • Các trang hỗ trợ đơn giản và blog ALIAS
  • Hỗ trợ Cloudflare và blog CNAME
  • dig HowTo
  • Một số bài đăng tuyệt vời về Stack Overflow hoặc StackExchange
  • Các mục nhập Wikipedia được viết tốt
  • Netlify blog 'Có www hay không có www'