Pertanyaan Haruskah CNAME Digunakan Untuk Subdomain?


Saya mengelola beberapa situs web yang saat ini memiliki konfigurasi DNS berikut:

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

Apakah ini penggunaan yang tepat dari data CNAME? Saya sudah melihat online dan belum menemukan jawaban yang jelas. Beberapa orang mengklaim bahwa catatan CNAME buruk (mereka tidak jelas mengapa ini) dan mengusulkan pengaturan berikut:

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

Manakah dari ini adalah pendekatan yang lebih baik (dan mengapa)?

catatan: Subdomain tidak memerlukan data MX mereka sendiri, jadi itu bukan masalah di sini.


76
2017-09-16 17:55




Saya merasa seperti ini harus menjadi jawaban wiki. DNS sangat sulit untuk diterima dan apakah jawaban yang diterima ini masih bagus 6 tahun kemudian? - the0ther
@ the0ther Ya, bahkan hari ini jawaban yang divalidasi, dari Jesper Mortensen, masih valid (bahkan jika seseorang dapat berdebat tentang penamaan hal-hal atau nilai TTL yang benar untuk digunakan, tetapi ini adalah poin terpisah dari masalah menggunakan catatan CNAME atau tidak). DNS adalah protokol lama 30, jadi hal-hal dasar seperti catatan CNAME tidak berubah seiring waktu. - Patrick Mevzek


Jawaban:


Ya, itu penggunaan yang tepat dari CNAME. Dalam diskusi yang saya ikuti, argumennya cenderung seperti ini:

Terhadap CNAME:

  • Ada penalti kinerja (kecil), karena cache DNS hilir perlu melakukan 2 pencarian DNS, satu untuk CNAME dan satu untuk A-Record poin CNAME untuk.
  • Argumen tidak jelas dan palsu tentang CNAME memiliki lebih sedikit "otoritas" atau masalah kompatibilitas.

Mendukung CNAME:

  • Mereka menyediakan abstraksi yang bersih antara perangkat keras (server fisik) dan layanan.
  • Mereka menyederhanakan manajemen DNS - ketika server bergerak, Anda hanya perlu mengubah satu catatan.

Setelah mencoba beberapa cara berbeda untuk melakukan ini, saya sekarang memiliki gaya favorit pribadi. Ini:

  • Satu Rekam untuk setiap server fisik; dengan TTL yang cukup rendah (mungkin 30 menit); memberi server a nama ramah manusia.
  • Satu CNAME untuk setiap layanan; dengan TTL tinggi (mungkin 24 jam); menunjuk ke nama server di atas.
  • Sebagai satu-satunya pengecualian terhadap aturan di atas, akar domain adalah Rekaman A, yang menunjuk ke webserver / load penyeimbang web. (The @ diminta untuk menjadi A-record.)

Saya menemukan bahwa pengaturan ini berfungsi dengan baik. Ini membuat pencarian DNS ekstra untuk CNAMES turun; dan jika server crash saya masih dapat mengubah DNS publik sekitar cukup cepat.

Berikut ini contoh (improvisasi) dalam sintaks 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

80
2017-09-16 19:45



Terima kasih, akhirnya ada pendapat wajar tentang CNAME yang ditata dengan jelas dan ringkas. - Tyler
@Jesper Mortensen: bisakah Anda memperbarui sedikit jawaban dengan contoh kecil, terutama saya tidak mengerti poin ketiga Anda ketika Anda mengatakan "Sebagai satu-satunya pengecualian terhadap aturan di atas, akar domain adalah Rekaman A," Anda sudah mengatakan dalam poin 1 bahwa Anda menggunakan satu Rekam A untuk setiap server lapisan fisik. (BTW tautannya telah hilang) - Marco Demaio
@Marco Demaio: Tentang "root domain A-Record": Domain level kedua seperti company.comadalah puncak zona. Perlu catatan SOA. Jadi itu harus menjadi A Record dan bukan CNAME - lihat serverfault.com/questions/170194/… - Jesper Mortensen
@ tidak perlu memiliki rekam A; sebaliknya, CNAME dilarang. - Michael Hampton♦
Hanya ingin menambahkan bahwa CNAME sangat berguna jika server Anda (s) mendukung alamat IPv6 juga, karena Anda akan membutuhkan setidaknya dua entri per server (satu A dan AAAA record masing-masing) sehingga menggunakan CNAME untuk sub-domain dalam hal ini jauh lebih sederhana. Jika Anda menggunakan rekomendasi Jesper untuk TTL (atau penyedia DNS Anda memiliki penanganan otomatis yang baik) maka seharusnya tidak ada penalti kinerja nyata. - Haravikk


Ya itu pantas.

Praktik Terbaik Saya, yang dibagikan banyak orang, adalah membuat catatan 1 A untuk setiap server IP; dan gunakan CNAMES untuk hal lain.

Contoh umum adalah:

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

12
2017-09-16 18:03



Saya tahu dalam pertanyaan ini mereka mengatakan bahwa surat tidak menjadi masalah di sini, tetapi anggaplah Anda menggunakan juga email bagaimana Anda akan menggunakan data MX? Terima kasih! - Marco Demaio
Catatan MX akan menunjuk ke nama server juga. IN MX server1 dan untuk kenyamanan saya akan merekomendasikan juga pengaturan imap atau pop dan smtp CNAME, mungkin juga mail, karena banyak program surel menebak ini. Menyiapkan catatan SRV yang benar juga merupakan ide yang bagus, tetapi karena ini adalah catatan SRV pertanyaan yang relatif dasar mungkin agak banyak untuk konfigurasi sederhana. - Chris S
Komentar singkat, MXcatatan tidak boleh CNAME, lihat serverfault.com/a/232243/2874  Ini mungkin berfungsi dengan baik dalam praktek - tetapi tetap saja, lebih baik tidak melakukannya. - Jesper Mortensen
BIND akan menolak untuk memuat zona jika Anda menunjukkan data MX atau SRV di CNAME ... Saya mungkin harus menjelaskan bahwa data MX harus mengarah ke catatan A. Terima kasih. - Chris S
@ChrisS, bagaimana dengan mengedit jawaban Anda dan dengan jelas menyebutkan fakta bahwa catatan MX tidak dapat mengarah ke entri CNAME? - Alexis Wilke