CNAME có nên được sử dụng cho các tên miền phụ?


84

Tôi quản lý nhiều trang web hiện có cấu hình DNS sau:

example.com      - A Record - Production Server IP
test.example.com - A Record - Test Server IP
www.example.com  - CNAME    - example.com
beta.example.com - CNAME    - test.example.com
dev.example.com  - CNAME    - test.example.com

Đây có phải là cách sử dụng thích hợp của các bản ghi CNAME không? Tôi đã xem trực tuyến và không tìm thấy câu trả lời rõ ràng. Một số người cho rằng các bản ghi CNAME là xấu (tuy nhiên, chúng không rõ tại sao lại như vậy) và đề xuất thiết lập sau:

example.com      - A Record - Production Server IP
test.example.com - A Record - Test Server IP
www.example.com  - A Record - Production Server IP
beta.example.com - A Record - Test Server IP
dev.example.com  - A Record - Test Server IP

Cái nào trong số này là cách tiếp cận tốt hơn (và tại sao)?

Lưu ý: Các tên miền phụ không yêu cầu bản ghi MX của riêng chúng, vì vậy đó không phải là vấn đề ở đây.


1
tôi cảm thấy như đây là một câu trả lời wiki DNS rất khó để có được đúng và câu trả lời được chấp nhận này vẫn còn tốt 6 năm sau?
the0ther

1
@ the0ther Vâng, ngay cả ngày nay là câu trả lời xác nhận, từ Jesper Mortensen , vẫn còn hiệu lực (ngay cả khi người ta có thể tranh luận về việc đặt tên của những điều hay các giá trị TTL đúng để sử dụng, nhưng đây là những điểm riêng biệt từ các vấn đề của việc sử dụng bản ghi CNAME hay không ). DNS là một giao thức cũ 30, vì vậy những thứ cơ bản như bản ghi CNAME không thay đổi theo thời gian.
Patrick Mevzek

Câu trả lời:


85

Có, đó là cách sử dụng CNAME thích hợp. Trong các cuộc thảo luận tôi đã tham gia, các cuộc tranh luận có xu hướng diễn ra như sau:

Chống lại CNAME:

  • Có một hình phạt hiệu suất (nhỏ), vì bộ đệm DNS xuôi dòng cần thực hiện 2 lần tra cứu DNS, một cho CNAME và một cho A-Record các điểm CNAME.
  • Những tranh luận mơ hồ, không có thật về CNAME có ít vấn đề về "quyền hạn" hoặc khả năng tương thích.

Có lợi cho CNAME:

  • Chúng cung cấp một sự trừu tượng rõ ràng giữa phần cứng (máy chủ vật lý) và dịch vụ.
  • Chúng đơn giản hóa việc quản lý DNS - khi máy chủ di chuyển, bạn chỉ cần thay đổi một bản ghi.

Sau khi thử một vài cách khác nhau để làm điều này, bây giờ tôi có một phong cách yêu thích cá nhân. Nó là:

  • Một bản ghi A cho mỗi máy chủ vật lý; với chỉ số khá thấp (có thể là 30 phút); đưa ra các máy chủ một tên con người thân thiện .
  • Một CNAME cho mỗi dịch vụ; với chỉ số TTL cao (có lẽ 24 giờ); chỉ vào tên máy chủ ở trên.
  • Là ngoại lệ duy nhất cho các quy tắc ở trên, gốc tên miền là A-Record, trỏ đến bộ cân bằng tải webserver / web. (@ Bắt buộc phải là bản ghi A.)

Tôi thấy rằng thiết lập này hoạt động tốt. Nó giữ thêm tra cứu DNS cho CNnam xuống; và nếu máy chủ gặp sự cố, tôi vẫn có thể thay đổi DNS công cộng xung quanh khá nhanh.

Đây là một ví dụ (ngẫu hứng) trong cú pháp BIND:

;name     ttl   class rr     value 
server01  30m   IN    A      192.168.0.3
server02  30m   IN    A      192.168.0.4

webmail   24h   IN    CNAME  server01
extranet  24h   IN    CNAME  server02
ftp       24h   IN    CNAME  server02

1
Cảm ơn bạn, cuối cùng là một ý kiến ​​hợp lý về các CNAME được trình bày rõ ràng và chính xác.
Tyler

@Jesper Mortensen: bạn có thể vui lòng cập nhật một chút câu trả lời bằng một ví dụ nhỏ không, đặc biệt tôi không hiểu điểm thứ 3 của bạn khi bạn nói "Như một sự miễn trừ đối với các quy tắc ở trên, gốc tên miền là Bản ghi A", bạn đã đã nói ở điểm 1 rằng bạn sử dụng một Bản ghi A cho mỗi máy chủ lớp vật lý. (BTW các liên kết đã biến mất)
Marco Demaio

2
@Marco Demaio: Giới thiệu về "Bản ghi gốc A-domain": Tên miền cấp hai như company.comlà một đỉnh của khu vực. Nó cần một bản ghi SOA. Do đó, nó phải là Bản ghi A và không phải là CNAME - xem serverfault.com/questions/170194/ mẹo
Jesper Mortensen

4
@ không bắt buộc phải có hồ sơ A; thay vào đó, một CNAME bị cấm.
Michael Hampton

1
Chỉ muốn thêm rằng các CNAME đặc biệt hữu ích nếu máy chủ của bạn cũng hỗ trợ các địa chỉ IPv6, vì bạn sẽ cần ít nhất hai mục nhập cho mỗi máy chủ (mỗi bản ghi A và AAAA), vì vậy sử dụng CNAME cho tên miền phụ trong trường hợp này là nhiều, đơn giản hơn nhiều. Nếu bạn sử dụng các đề xuất của Jesper cho TTL (hoặc nhà cung cấp DNS của bạn có khả năng xử lý tự động tốt) thì sẽ không có hình phạt hiệu suất thực sự.
Harastak

13

Vâng, nó phù hợp.

Thực tiễn tốt nhất của tôi, được nhiều người chia sẻ, là tạo bản ghi 1 A cho mỗi IP máy chủ; và sử dụng CNnam cho bất cứ điều gì khác.

Một ví dụ phổ biến sẽ là:

server1.example.com.      IN A      192.168.0.1
server2.example.com.      IN A      192.168.5.2
www                       IN CNAME  server1
ftp                       IN CNAME  server1
beta                      IN CNAME  server2

Tôi biết trong câu hỏi này họ nói rằng thư không phải là vấn đề ở đây, nhưng giả sử rằng bạn cũng sử dụng thư thì bạn sẽ sử dụng bản ghi MX như thế nào? Cảm ơn!
Marco Demaio

1
Bản ghi MX cũng sẽ trỏ đến tên máy chủ. IN MX server1và để thuận tiện, tôi cũng khuyên bạn nên thiết lập imaphoặc popsmtpCNAME, cũng có thể mail, vì nhiều chương trình email đoán điều này. Thiết lập các bản ghi SRV chính xác cũng là một ý tưởng tốt, nhưng vì đây là một câu hỏi tương đối cơ bản, các bản ghi SRV có thể hơi nhiều cho một cấu hình đơn giản.
Chris S

1
Nhận xét nhanh, MXhồ sơ không được là CNAME, xem serverfault.com/a/232243/2874 Nó có thể hoạt động tốt trong thực tế - nhưng vẫn tốt hơn là không làm như vậy.
Jesper Mortensen

BIND sẽ từ chối tải vùng nếu bạn trỏ bản ghi MX hoặc SRV vào CNAME ... Có lẽ tôi nên nói rõ rằng bản ghi MX cần trỏ đến bản ghi A. Cảm ơn bạn.
Chris S

@ChrisS, làm thế nào về việc chỉnh sửa câu trả lời của bạn và đề cập rõ ràng đến thực tế rằng bản ghi MX không thể trỏ đến mục CNAME?
Alexis Wilke
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.