CNAME ควรใช้กับโดเมนย่อยหรือไม่


84

ฉันจัดการหลายเว็บไซต์ที่มีการกำหนดค่า DNS ต่อไปนี้:

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

นี่เป็นการใช้ระเบียน CNAME ที่เหมาะสมหรือไม่ ฉันดูออนไลน์และไม่พบคำตอบที่ชัดเจน บางคนอ้างว่าระเบียน CNAME ไม่ดี (ไม่ชัดเจนว่าเป็นเพราะเหตุใด) และเสนอการตั้งค่าต่อไปนี้:

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

ข้อใดต่อไปนี้เป็นวิธีที่ดีกว่า (และทำไม)

หมายเหตุ:โดเมนย่อยไม่ต้องการระเบียน MX ของตัวเองดังนั้นจึงไม่มีปัญหาที่นี่


1
ฉันรู้สึกว่านี่ควรเป็นคำตอบของวิกิ DNS นั้นยากที่จะเข้าใจและคำตอบที่ได้รับการยอมรับนี้ยังดีอยู่ 6 ปีหลังจากนี้
0

1
@ the0ther ใช่แม้กระทั่งทุกวันนี้คำตอบที่ได้รับการตรวจสอบจากJesper Mortensenยังคงใช้ได้ (แม้ว่าใคร ๆ ก็สามารถโต้เถียงเกี่ยวกับการตั้งชื่อของสิ่งต่าง ๆ หรือค่า TTL ที่ถูกต้องที่จะใช้ แต่สิ่งเหล่านี้เป็นประเด็นแยกต่างหาก ) DNS เป็นโปรโตคอลเก่า 30 รายการดังนั้นสิ่งพื้นฐานเช่นระเบียน CNAME จะไม่เปลี่ยนแปลงเมื่อเวลาผ่านไป
Patrick Mevzek

คำตอบ:


85

ใช่นั่นคือการใช้ CNAME ที่เหมาะสม ในการอภิปรายฉันได้เป็นส่วนหนึ่งของข้อโต้แย้งมีแนวโน้มที่จะเป็นเช่นนี้:

กับ CNAMEs:

  • มีการลงโทษประสิทธิภาพเล็กน้อย (เล็ก) เนื่องจากแคช DNS แบบดาวน์สตรีมจำเป็นต้องทำการค้นหา DNS 2 รายการหนึ่งรายการสำหรับ CNAME และอีกรายการหนึ่งสำหรับ A-Record the CNAME ชี้ไปที่
  • ข้อโต้แย้งปลอมเกี่ยวกับ CNAME ที่มีปัญหา "สิทธิ์" หรือความเข้ากันได้น้อยกว่า

ในความโปรดปรานของ CNAMEs:

  • พวกเขาให้นามธรรมที่สะอาดระหว่างฮาร์ดแวร์ (เซิร์ฟเวอร์ทางกายภาพ) และบริการ
  • พวกเขาลดความซับซ้อนของการจัดการ DNS - เมื่อเซิร์ฟเวอร์ย้ายคุณจะต้องเปลี่ยนหนึ่งระเบียน

หลังจากลองทำหลายวิธีแล้วตอนนี้ฉันมีสไตล์ที่เป็นส่วนตัว มันคือ:

  • หนึ่งระเบียนสำหรับแต่ละเซิร์ฟเวอร์จริง ด้วย TTL ค่อนข้างต่ำ (อาจ 30 นาที); ให้เซิร์ฟเวอร์ชื่อเป็นมิตรกับมนุษย์
  • หนึ่ง CNAME สำหรับแต่ละบริการ ด้วย TTL สูง (อาจ 24 ชั่วโมง); ชี้ไปที่ชื่อเซิร์ฟเวอร์ด้านบน
  • ในฐานะที่เป็น exeption แต่เพียงผู้เดียวของกฎข้างต้นรูทโดเมนคือ A-Record ชี้ไปที่เว็บเซิร์ฟเวอร์ / ตัวโหลดบาลานซ์ของเว็บ (เครื่องหมาย @ ต้องเป็น A-record)

ฉันพบว่าการตั้งค่านี้ทำงานได้ดี มันทำให้การค้นหา DNS พิเศษสำหรับ CNAMES ลดลง และหากเซิร์ฟเวอร์ล่มฉันยังคงสามารถเปลี่ยน DNS สาธารณะได้อย่างรวดเร็ว

นี่คือตัวอย่าง (กลอนสด)ในไวยากรณ์ 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
ขอบคุณในที่สุดความเห็นที่สมเหตุสมผลเกี่ยวกับ CNAME ที่วางไว้อย่างชัดเจนและรัดกุม
ไทเลอร์

@Jesper Mortensen: คุณช่วยอัปเดตคำตอบเล็กน้อยด้วยตัวอย่างเล็ก ๆ ได้ไหมโดยเฉพาะฉันไม่เข้าใจจุดที่ 3 ของคุณเมื่อคุณพูดว่า "ในฐานะที่เป็นผู้ยกเว้นกฎข้างต้นรากโดเมนคือ A-Record" กล่าวไว้ในข้อที่ 1 ว่าคุณใช้ A Record หนึ่งระเบียนสำหรับแต่ละเซิร์ฟเวอร์เลเยอร์ทางกายภาพ (ลิงก์ BTW ได้หายไป)
Marco Demaio

2
@Marco Demaio: เกี่ยวกับ "domain root A-Record": โดเมนระดับที่สองที่ชอบcompany.comคือ Zone apex มันต้องการบันทึก SOA ดังนั้นจึงต้องเป็นระเบียน A และไม่ใช่ CNAME - ดูserverfault.com/questions/170194/…
Jesper Mortensen

4
@ ไม่จำเป็นต้องมีระเบียน A ค่อนข้างห้ามใช้ CNAME
Michael Hampton

1
แค่ต้องการเพิ่มว่า CNAME มีประโยชน์อย่างยิ่งหากเซิร์ฟเวอร์ของคุณรองรับที่อยู่ IPv6 เช่นกันเนื่องจากคุณจะต้องมีอย่างน้อยสองรายการต่อเซิร์ฟเวอร์ (หนึ่ง A และ AAAA แต่ละระเบียน) เพื่อใช้ CNAME สำหรับโดเมนย่อย ในกรณีนี้มากง่ายกว่ามาก หากคุณใช้คำแนะนำของ Jesper สำหรับ TTL (หรือผู้ให้บริการ DNS ของคุณมีการจัดการแบบอัตโนมัติที่ดี) ก็ไม่ควรมีการลงโทษประสิทธิภาพที่แท้จริง
Haravikk

13

ใช่มันเหมาะสม

แนวทางปฏิบัติที่ดีที่สุดของฉันซึ่งหลาย ๆ คนแบ่งปันจะต้องสร้าง 1 A ระเบียนสำหรับแต่ละ IP ของเซิร์ฟเวอร์ และใช้ CNAMES เพื่อสิ่งอื่น

ตัวอย่างทั่วไป ได้แก่ :

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

ฉันรู้ว่าในคำถามนี้พวกเขาบอกว่าเมลไม่ใช่ปัญหาที่นี่ แต่สมมติว่าคุณใช้เมลด้วยคุณจะไปกับระเบียน MX ได้อย่างไร ขอบคุณ!
Marco Demaio

1
ระเบียน MX จะชี้ไปที่ชื่อเซิร์ฟเวอร์เช่นกัน IN MX server1และเพื่อความสะดวกของฉันจะแนะนำยังการตั้งค่าimapหรือpopและsmtpCNAMEs อาจยังmailโปรแกรมอีเมลมากที่สุดเท่าที่เดานี้ การตั้งค่าระเบียน SRV ที่ถูกต้องเป็นความคิดที่ดีเช่นกัน แต่เนื่องจากนี่เป็นคำถามพื้นฐานที่บันทึก SRV อาจจะค่อนข้างมากสำหรับการกำหนดค่าอย่างง่าย
Chris S

1
ความคิดเห็นด่วนMXบันทึกต้องไม่เป็น CNAME ดูที่serverfault.com/a/232243/2874 มันอาจใช้งานได้ดีในทางปฏิบัติ - แต่ก็ยังดีกว่าที่จะไม่ทำเช่นนั้น
Jesper Mortensen

BIND จะปฏิเสธที่จะโหลดโซนหากคุณชี้ระเบียน MX หรือ SRV ที่ CNAME ... ฉันอาจจะต้องทำให้ชัดเจนว่าระเบียน MX นั้นจำเป็นต้องชี้ไปที่ระเบียน A ขอขอบคุณ.
Chris S

@ChrisS วิธีแก้ไขคำตอบของคุณและพูดถึงข้อเท็จจริงที่ชัดเจนว่าระเบียน MX ไม่สามารถชี้ไปที่รายการ CNAME ได้
Alexis Wilke
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.