Kök alan CNAME kısıtlamalarının üstesinden nasıl gelinir?


117

Müşterilerimiz için birçok web uygulamasını barındırıyoruz. Açıkça görüldüğü gibi, bu uygulamalara başvurmak için kendi etki alanlarını kullanmak isterler, genellikle web uygulamalarını yazan http://www.customer1.exampleveya http://customer1.exampleweb uygulamalarına giden herhangi bir kullanıcının olmasını isterler.

Karşılaştığımız durum, yakın gelecekte IP adreslerini değiştirme esnekliğine sahip olmamız gerektiğidir. Ve müşterinin alan adlarında A rekoru değişikliğini yapmasına güvenmek istemiyoruz. Bu yüzden CNAMEkayıtları kullanmanın işe yarayacağını düşündük , ancak CNAMEöğrendikçe kayıtların kök etki alanı için çalışmayacağını öğrendik.

Temelde:

customer1.example IN CNAME customer1.mycompanydomain.example //this is invalid as the RFC
www.customer1.example IN CNAME customer1.mycompanydomain.example //this is valid and will work

IP adresini customer1.mycompanydomain.exampleveya Akaydını değiştirebilmek istiyoruz ve müşterilerimiz üzerinde kontrolümüz olan bu kaydı takip edecekler.

DNS'mizde şöyle görünecektir:

customer1.mycompanydomain.example IN A 192.0.2.1

Herhangi bir fikir?


Neden "CNAME'deki müşteri1.com müşteri1.mycompanydomain.com" adresinin geçersiz olduğunu anlamıyorum. Çalışması gerektiğine inanıyorum. Bu çözümle ilgili sorunun nerede olduğunu açıklayabilir misiniz?
sleske

3
Evet, lütfen aşağıdaki soru ve cevabı okuyun. DNS RFC'ye göre geçersizdir. stackoverflow.com/questions/655235/…
Geo

2
Sorunun başlığını anlamadım. "Kök" (.) Nerede yer alıyor?
bortzmeyer

2
"kök" değil, bir bölgenin kökü anlamına geliyor
Alnitak

2
Öyleyse, bu normal DNS sözlüğü değil. "Apeks" doğru kelime değil mi? Veya Lisp programcıları için "üst düzey" mi? :-)
bortzmeyer

Yanıtlar:


63

Bu sorunun hala sık sık ortaya çıkmasının nedeni, bahsettiğiniz gibi, bir şekilde önemli olduğu varsayılan birinin RFC'nin önlerinde alt alan adı olmayan alan adlarının geçerli olmadığını yazmasıdır. Ancak RFC'yi dikkatlice okursanız, bunun tam olarak yazdığı gibi olmadığını göreceksiniz. Aslında, RFC 1912 şunları belirtir:

CNAME'lerle denize girmeyin. Ana bilgisayarları yeniden adlandırırken bunları kullanın, ancak onlardan kurtulmayı planlayın (ve kullanıcılarınızı bilgilendirin).

Bazı DNS ana bilgisayarları, özel bir kayıt türü kullanarak bölge tepe noktasında (açık alan adı için kök etki alanı düzeyinde) CNAME benzeri işlevsellik elde etmenin bir yolunu sağlar. Bu tür kayıtlar, örneğin şunları içerir:

  • DNSimple şirketinde ALIAS
  • DNS'de ANAME Kolaylaştı
  • EasyDNS'de ANAME
  • CloudFlare'de CNAME

Her sağlayıcı için kurulum benzerdir: apex alanınız için ALIAS veya ANAME girişini, tıpkı bir CNAME kaydında yaptığınız gibi example.domain.com'a yönlendirin. DNS sağlayıcısına bağlı olarak, boş bir @ Name değeri bölge tepesini tanımlar.

ALIAS veya ANAME veya @ example.domain.com.

DNS sağlayıcınız böyle bir kayıt türünü desteklemiyorsa ve bunu yapan birine geçiş yapamıyorsanız, bunu yapması gereken protokole veya sunucu yazılımına bağlı olarak o kadar da zor olmayan alt etki alanı yeniden yönlendirmesi kullanmanız gerekecektir. .

Bunun sadece "amatör yöneticiler" veya bu tür fikirler tarafından yapıldığı şeklindeki ifadeye kesinlikle katılmıyorum. Basit bir "Adın ve hizmetinin ne yapması gerekiyor?" anlaşın ve sonra DNS yapılandırmanızı bu isteklere hizmet edecek şekilde uyarlayın; Ana hizmetleriniz web ve e-postaysa, CNAME'leri sonsuza dek bırakmanın sorunlu olmasının hiçbir GEÇERLİ nedenini göremiyorum. Sonuçta, kim @ subdomain.domain.org'u @ domain.org yerine kim tercih eder? Protokolün kendisi zaten ayarlanmışsa kimin "www" ye ihtiyacı var? Bir kök alan adı kullanımının geçersiz olacağını varsaymak mantıksızdır.


1
Bir CDN'de kök düzeyindeki bir alanı işaret etmek istediğim için bu yanıt bana çok yardımcı oldu. Çoğu CDN, farklı yerlerde veya zamanlarda farklı IP'lere çözümlenebildiği için zorunlu olarak bir FQDN'dir. DNS Made Easy kullanıyorum ve ANAME kayıt türünü kullanabildim.
Rubix

3
Daha fazla katılamadım. Bir siteyi 'açık' alan adından barındırmak istemek, yapılacak yaygın ve mantıklı bir şeydir. Daha az karakter kullanır, daha iyi görünür, vb. URL'nin kendi protokol tanımlayıcısı (www), ilk etapta gerekli olsa bile (değildi) url'nin artık bir parçasıdır.
Ed Bishop

3
ANAME'ler güzel, ya da www olmayanların tümünü www'ye 301 yapabilirsiniz. ücretsiz 301 yönlendirme hizmeti aracılığıyla 198.251.86.133
Jacob Evans

51

Bir kök kaydın CNAME'lenmesi teknik olarak RFC'ye aykırı değildir, ancak bunun tavsiye edilmeyen bir uygulama olduğu anlamına gelen sınırlamaları vardır.

Normalde kök kaydınızın birden çok girişi olacaktır. Ad sunucularınız için 3 ve ardından bir IP adresi için bir tane diyelim.

RFC başına:

Bir düğümde bir CNAME RR mevcutsa, başka hiçbir veri bulunmamalıdır;

Ve IETF Başına 'Ortak DNS Çalışma ve Yapılandırma Hataları' Belgesi:

Bu genellikle deneyimsiz yöneticiler tarafından, alan adınızın aynı zamanda bir ana bilgisayar olmasına izin vermenin açık bir yolu olarak denenir. Ancak, BIND gibi DNS sunucuları CNAME'i görecek ve bu ad için başka kaynaklar eklemeyi reddedecektir. CNAME ile başka kayıtların bir arada bulunmasına izin verilmediğinden, NS girişleri göz ardı edilir. Bu nedenle podunk.xx etki alanındaki tüm ana bilgisayarlar da göz ardı edilir!

Referanslar:


17
Ancak NEDEN başka bir kaydın CNAME ile bir arada bulunmasına izin verilmez. Bu sadece RFC'nin yazarı tarafından eklenen bir sınırlama mı yoksa bunun teknik bir nedeni var mı? Bunun teknik bir nedeni yoksa, o zaman kolayca bir RFC uzantısı ile gelebilir.
Sven

Öyleyse, benim için çalışıyorsa (kök kayıt için CNAME kullanın, bu etki alanı için diğer alt alanlar hala çalışıyor), bu sadece şanslı olduğum ve sağlayıcılarımın DNS uygulaması ek kayıtların yapabileceğini düşündüğünü görmezden gelmediği anlamına mı geliyor? Ayrıca DNS sunucusu bunu bu şekilde ele aldığı sürece istemci tarafında herhangi bir sorundan korkmam gerekmediği anlamına mı geliyor?
didi_X8

Bu, başka bir soruyu yanıtlama girişimidir, "CNAME'lere zirvede neden izin verilmiyor", oysa asıl soru "bu sınırlamanın nasıl aşılacağı" dır. -1.
rustyx

Nedenini öğrenmek için serverfault.com/questions/613829/…
rhand

Bir kök kaydın CNAME'i teknik olarak RFC'ye aykırı değildir , bunun RFC1034 bölüm 3.6.2'ye aykırı olmadığını açıklamanız gerekir: Bir düğümde bir CNAME RR varsa, başka hiçbir veri bulunmamalıdır; bu, kurallı bir ad ve takma adlarının verilerinin farklı olmamasını sağlar. . Tabii ki "kök" (bu bağlamda tam olarak tepe noktası) zaten NSve SOAkayıtlara sahiptir ve bu nedenle CNAMEkayıtlara sahip olamaz .
Patrick Mevzek

4

Bundan nasıl sıyrıldıklarını veya ne gibi olumsuz yan etkileri olabileceğini bilmiyorum, ancak bazı alan adlarımı barındırmak için Hover.com'u kullanıyorum ve kısa süre önce alanımın tepe noktasını CNAME olarak kuruyorum. DNS düzenleme araçları hiç şikayet etmedi ve alan adım, atanan CNAME aracılığıyla mutlu bir şekilde çözüldü.

Dig'in bu alan adı için bana gösterdiği şey (alanadim.com olarak gizlenmiş gerçek alan adı):

; <<>> DiG 9.8.3-P1 <<>> mydomain.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2056
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;mydomain.com.          IN  A

;; ANSWER SECTION:
mydomain.com.       394 IN  CNAME   myapp.parseapp.com.
myapp.parseapp.com. 300 IN  CNAME   parseapp.com.
parseapp.com.       60  IN  A   54.243.93.102

Gizleme, gerçekten gerekliyse (DNS herkese açıktır ....), RFC2606 kılavuzunu kullanmalıdır. Ve IP adresleri için RFC5737 veya 3849
Patrick Mevzek

3

Bizim durumumuzda www.company.com yerine xyz.company.com olmasına rağmen, şirketim onlar için bir web sitesi barındırdığımız bazı müşteriler için aynı şeyi yapıyor. Onlardan, xyz.company.com'daki A kaydını kendilerine tahsis ettiğimiz bir IP adresini gösterecek şekilde ayarlamalarını sağlarız.

IP adresindeki bir değişiklikle nasıl başa çıkabileceğinize gelince, mükemmel bir çözüm olduğunu düşünmüyorum. Bazı fikirler şunlardır:

  • Bir NAT veya IP yük dengeleyici kullanın ve müşterilerinize ona ait bir IP adresi verin. Web sunucusunun IP adresinin değişmesi gerekiyorsa, NAT veya yük dengeleyicide güncelleme yapabilirsiniz,

  • Bir DNS barındırma hizmeti de sunun ve müşterilerinizin alanlarını sizinle birlikte barındırmalarını sağlayın, böylece A kayıtlarını güncelleyebilecek bir konumda olursunuz,

  • Müşterilerinizin A kayıtlarını bir ana web sunucusuna ayarlamalarını sağlayın ve her müşterinin web istekleri için bir HTTP yeniden yönlendirmesi kullanın.


3

Sipwiz doğru, bunu doğru şekilde yapmanın tek yolu HTTP ve DNS hibrit yaklaşımıdır. Kayıt şirketim Tucows için bir yeniden satıcı ve ücretsiz bir katma değerli hizmet olarak kök alan adı yönlendirme hizmeti sunuyorlar.

Etki alanınız blah.com ise, etki alanının nereye yönlendirilmesini istediğinizi sorarlar ve siz de www.blah.com yazın. A kaydını apache sunucularına atarlar ve blah.com'u otomatik olarak bir DNS vhost olarak eklerler. Vhost, onları uygun URL'ye yönlendiren bir HTTP 302 hatasıyla yanıt verir. Komut dosyası / kurulumu basittir ve düşük uç tarafından işlenebilir, aksi takdirde donanım hurdaya çıkarılır.

Bir örnek için aşağıdaki komutu çalıştırın: curl -v eclecticengineers.com


3

Müşteri1.mycompanydomain.com.localdomain demek istediğinizi düşünmemesi için harici alanın sonuna bir nokta koymanız gerekir;

Yani sadece değiştirin:

customer1.com IN CNAME customer1.mycompanydomain.com

için

customer1.com IN CNAME customer1.mycompanydomain.com.

Benim için (BIND 9.8.2), eğer kayıtlar etki alanına customer1.comyönelikse, bu işe yarar ... ancak bir alt etki alanı için CNAMe belirtiliyor olarak yorumlanır customer1.com.customer1.com. İlk maddeye bir nokta eklersem kayıt doğru yorumlanacak, ancak artık çalışmıyor. Burada çözüm göremiyorum.
Jussi Hirvi

-2

Readytocloud.com'un Apache 2.2'de barındırıldığını görüyorum.

Apache'de www olmayan siteyi www sitesine yönlendirmenin çok daha basit ve verimli bir yolu var.

Aşağıdaki yeniden yazma kurallarını Apache yapılandırmalarına ekleyin (sanal konağın içinde veya dışında. Önemli değil):

RewriteCond %{HTTP_HOST} ^readytocloud.com [NC]
RewriteRule ^/$ http://www.readytocloud.com/ [R=301,L]

Veya www olmayan siteden www siteye URL'lerin 1'e 1 eşlenmesini istiyorsanız, aşağıdaki kuralları yeniden yazın:

RewriteCond %{HTTP_HOST} ^readytocloud.com [NC]
RewriteRule (.*) http://www.readytocloud.com$1 [R=301,L]

Bunun çalışması için mod_rewrite modülünün yüklenmesi gerektiğini unutmayın. Neyse ki readytocloud.com varsayılan olarak mod_rewrite'ı yükleyen bir CentOS kutusu üzerinde çalışıyor.

Apache 2.2'yi çalıştıran ve 3.000'den az etki alanına ve yaklaşık 4.000 yönlendirmeye sahip bir istemci sunucumuz var, ancak, sunucudaki yük 0.10 - 0.20 civarında.


Soru DNS ile ilgiliydi. Apache web sunucusu hakkında değil.
SamTzu

-7

Hem sipwiz hem de MrEvil'e teşekkürler. Kullanıcının girdiği URL'yi ayrıştırıp wwwüstüne yapıştıran bir PHP betiği geliştirdik . (örneğin, müşteri kiragiannis.com'a girerse , www.kiragiannis.com'a yönlendirecektir ). Böylece müşterimiz köklerini işaret eder (ör customer1.com. AWeb yeniden yönlendiricimizin nerede olduğunu kaydetmek için) ve sonra www CNAMEgerçekA bizim tarafımızdan yönetilen kayda işaret eder.

Gelecekteki bizlerle ilgilenmeniz durumunda kodun altında.

<?php
$url = strtolower($_SERVER["HTTP_HOST"]);

if(strpos($url, "//") !== false) { // remove http://
  $url = substr($url, strpos($url, "//") + 2);
}

$urlPagePath = "";
if(strpos($url, "/") !== false) { // store post-domain page path to append later
  $urlPagePath = substr($url, strpos($url, "/"));
  $url = substr($url, 0, strpos($url,"/"));
}


$urlLast = substr($url, strrpos($url, "."));
$url = substr($url, 0, strrpos($url, "."));


if(strpos($url, ".") !== false) { // get rid of subdomain(s)
  $url = substr($url, strrpos($url, ".") + 1);
}


$url = "http://www." . $url . $urlLast . $urlPagePath;

header( "Location:{$url}");
?>

10
Bu aslında 69 binden fazla insanın bu konuya geldiği soruyu cevaplamıyor. Soru daha çok DNS ile ilgili ve PHP ile ilgisi yok.
Matt Clark

1
Soru DNS ile ilgiliydi. PHP kodlamasıyla ilgili değil.
SamTzu

HTTP_HOST, adından da anlaşılacağı gibi bir URL değil, ana bilgisayar adıdır. Dolayısıyla http://kaldırılacak hiçbir şey olmayacak ve /( $urlPagePathher zaman boş kalacaktır). Cf httpd.apache.org/docs/2.4/expr.html . Kodun alt etki alanından kurtulmaya çalışmasından dolayı , bir bütün olarak düşünülmesi gereken www.example.co.ukyerler gibi şeyler için de çalışmayacaktır co.uk. Ayrıca HTTPS'yi de işlemez. Ve son olarak, PHP'yi kullanarak, herhangi bir web sunucusunun bunu yapılandırmada yapabileceği bir HTTP yeniden yönlendirmesi yapın, aşırı karmaşıktır. Kısacası, bu kesinlikle bu soru için doğrulanmış cevap olmamalıdır.
Patrick Mevzek

Bu kuralın tüm ana bilgisayarlar için geçerli olması gerekiyorsa, bir apache yapılandırması olarak yapılmalıdır.
Svetoslav Marinov
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.