ルートドメインのCNAME制限を克服する方法は?


117

私たちはお客様のために多くのWebアプリケーションをホストしています。彼らはそれらのアプリケーションを参照するために、独自のドメインを使用したい明らかなように、通常、彼らは、任意のユーザーのいずれかのタイプということをしたいhttp://www.customer1.exampleかはhttp://customer1.example、自分のWebアプリケーションに行きます。

私たちが直面している状況は、近い将来にIPアドレスを変更する柔軟性が必要であるということです。また、ドメインでAレコードの変更を行う顧客に依存したくありません。そのCNAMEため、レコードを使用しても機能すると考えCNAMEましたが、ルートドメインではレコードが機能しないことがわかりました。

基本的に:

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

customer1.mycompanydomain.exampleまたはAレコードのIPアドレスを変更できるようにしたいので、お客様は、私たちが管理しているこのレコードに従います。

DNSでは、次のようになります。

customer1.mycompanydomain.example IN A 192.0.2.1

何か案は?


「customer1.com IN CNAME customer1.mycompanydomain.com」が無効である理由がわかりません。うまくいくと思います。そのソリューションの問題がどこにあったのか説明していただけますか?
sleske 2009年

3
はい、次の質問と回答をお読みください。DNS RFCによると無効です。 stackoverflow.com/questions/655235/...
ジオ

2
質問のタイトルがわかりません。「ルート」(。)はどこに含まれていますか?
bortzmeyer 2009年

2
彼は「ルート」ではなくゾーンのルートを意味します
Alnitak

2
そうですね、それは通常のDNS語彙ではありません。「apex」は適切な言葉ではありませんか?または、Lispプログラマーにとって「トップレベル」ですか?:-)
bortzmeyer 2009年

回答:


63

この質問が頻繁に発生する理由は、あなたが言及したように、どこかで重要だと推定された誰かが、RFCがドメインの前にサブドメインのないドメイン名は無効であると書いたためです。ただし、RFCを注意深く読んだ場合、これが正確に言っていることではないことがわかります。実際、RFC 1912は次のように述べています。

CNAMEを使いすぎないでください。ホストの名前を変更するときに使用しますが、それらを削除する(そしてユーザーに通知する)ことを計画します。

一部のDNSホストは、カスタムレコードタイプを使用して、ゾーン頂点(ネイキッドドメイン名のルートドメインレベル)でCNAMEのような機能を取得する方法を提供します。このような記録には、たとえば次のものが含まれます。

  • DNSimpleのエイリアス
  • DNSのANAMEが簡単に
  • easyDNSのANAME
  • CloudFlareのCNAME

プロバイダーごとの設定は似ています。CNAMEレコードの場合と同様に、apexドメインのALIASまたはANAMEエントリをexample.domain.comにポイントします。DNSプロバイダーによっては、空または@ Nameの値がゾーンの頂点を識別します。

ALIASまたはANAMEまたは@ example.domain.com。

DNSプロバイダーがそのようなレコードタイプをサポートしておらず、サポートしているものに切り替えることができない場合は、サブドメインリダイレクトを使用する必要があります。これは、プロトコルまたはサーバーソフトウェアに応じて、それほど難しくはありません。 。

「アマチュア管理者」またはそのようなアイデアによってのみ行われるという発言には強く同意しません。それは単純な「名前とそのサービスは何をする必要があるのか​​?」対処し、DNS構成を調整してそれらの要望に応えます。主なサービスがWebと電子メールの場合、CNAMEを完全に削除すると問題が発生する正当な理由はわかりません。結局のところ、@ domain.orgより@ subdomain.domain.orgを好むのは誰ですか?プロトコル自体がすでに設定されている場合、誰が「www」を必要としますか?root-domainnameの使用が無効であると想定するのは非論理的です。


1
CDNでルートレベルのドメインを指定したかったので、この特定の回答は非常に役に立ちました。ほとんどのCDNは、異なる場所または時間で異なるIPに解決できるため、必然的にFQDNです。DNS Made Easyを使用して、ANAMEレコードタイプを使用できました。
Rubix、2015年

3
私はこれ以上同意できませんでした。「ネイキッド」ドメイン名からサイトをホストすることは、一般的で論理的なことです。文字数が少ない、見栄えがよいなどです。URL自体のプロトコル識別子(www)は、そもそも必要だった場合(そうでなかった場合)でも、URLの痕跡部分です。
Ed Bishop

3
ANAMEは素晴らしいですし、www以外のすべてをwwwに301することもできます。無料の301リダイレクションサービスを介して 198.251.86.133
Jacob Evans

51

ルートレコードのCNAME化は技術的にはRFCに違反していませんが、制限があるため、推奨されない方法です。

通常、ルートレコードには複数のエントリがあります。たとえば、ネームサーバーに3つ、次にIPアドレスに1つとします。

RFCごと:

CNAME RRがノードに存在する場合、他のデータは存在しないはずです。

そして、IETFの「一般的なDNSの操作および構成エラー」ドキュメントによると:

これは、経験の浅い管理者が、ドメイン名をホストとしても使用できるようにする明白な方法としてよく試みられます。ただし、BINDなどのDNSサーバーはCNAMEを認識し、その名前の他のリソースの追加を拒否します。他のレコードはCNAMEと共存することが許可されていないため、NSエントリは無視されます。したがって、podunk.xxドメイン内のすべてのホストも無視されます!

参照:


17
しかし、CNAMEと共存できるレコードが他にないのはなぜですか。これはRFCの作成者によって追加された制限だけですか、それとも技術的な理由がありますか?技術的な理由がない場合は、拡張RFCを簡単に作成できます。
Sven

つまり、それが私のために機能する場合(ルートレコードにCNAMEを使用し、そのドメインの他のサブドメインがまだ機能している)、それは私が幸運であり、プロバイダーのDNS実装が追加のレコードを無視できないことを意味しますか?また、DNSサーバーがこのように処理する限り、クライアント側で問題を心配する必要がないことも意味します。
didi_X8 2014年

これは、「CNAMEが頂点で許可されない理由」という別の質問に答える試みですが、実際の質問は「この制限を克服する方法」です。-1。
rustyx 2016

なぜ参照してくださいserverfault.com/questions/613829/...を
rhand

ルートレコードのCNAMEは技術的にRFCに 違反していないため、RFC1034セクション3.6.2に違反していないことを説明する必要があります。CNAMERR がノードに存在する場合、他のデータは存在しません。これにより、正規名とそのエイリアスのデータが異なることがなくなります。。もちろん、「ルート」(このコンテキストでは正確に頂点)にはすでにNSSOAレコードがあるため、レコードを持つことはできませんCNAME
Patrick Mevzek 2018

4

私は彼らがそれをどのように取り除いているのか、またはそれらがどのような悪影響をもたらす可能性があるのか​​はわかりませんが、私はHover.comを使用して私のドメインの一部をホストし、最近私のドメインの頂点をCNAMEとしてセットアップしました。彼らのDNS編集ツールはまったく文句を言わず、私のドメインは割り当てられたCNAME経由で問題なく解決しました。

これは、Digがこのドメイン(mydomain.comとして難読化された実際のドメイン)について私に示したものです。

; <<>> 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

難読化は、本当に必要な場合(DNSはパブリックである...)、RFC2606ガイダンスを使用する必要があります。IPアドレスについてはRFC5737または3849
Patrick Mevzek

3

私の会社は、私たちの場合はwww.company.comではなくxyz.company.comですが、多くの顧客に対して同じことを行っています。割り当てたIPアドレスを指すようにxyz.company.comのAレコードを設定します。

IPアドレスの変更にどう対処できるかについては、完璧な解決策はないと思います。いくつかのアイデアは次のとおりです。

  • NATまたはIPロードバランサーを使用して、顧客にIPアドレスを割り当てます。WebサーバーのIPアドレスを変更する必要がある場合は、NATまたはロードバランサーを更新できます。

  • DNSホスティングサービスも提供し、顧客にドメインをホストしてもらい、Aレコードを更新できるようにします。

  • 顧客にAレコードを最大1つのメインWebサーバーに設定してもらい、各顧客のWebリクエストに対してHTTPリダイレクトを使用します。


3

Sipwizは正しいこれを正しく行う唯一の方法は、HTTPとDNSのハイブリッドアプローチです。私のレジストラはTucowsのリセラーであり、ルートドメイン転送を無料の付加価値サービスとして提供しています。

ドメインがblah.comの場合、ドメインの転送先を尋ねられ、www.blah.comと入力します。彼らはAレコードを自分のApacheサーバーに割り当て、自動的にblah.comをDNS仮想ホストとして追加します。仮想ホストはHTTP 302エラーで応答し、適切なURLにリダイレクトします。スクリプト/設定は簡単で、ローエンドで処理できるため、ハードウェアが廃棄されます。

例として次のコマンドを実行します。curl -v eclecticengineers.com


3

外部ドメインの最後にピリオドを置く必要があるので、customer1.mycompanydomain.com.localdomainを意味しているとは思われません。

だから変更してください:

customer1.com IN CNAME customer1.mycompanydomain.com

customer1.com IN CNAME customer1.mycompanydomain.com.

私(BIND 9.8.2)の場合、レコードがdomainのcustomer1.com場合、これは機能しますが、サブドメインのCNAMeを指定すると解釈されcustomer1.com.customer1.comます。最初のアイテムにポイントを追加すると、レコードは正しく解釈されますが、機能しなくなります。ここには解決策はありません。
Jussi Hirvi

-2

readytocloud.comはApache 2.2でホストされているようです。

非wwwサイトをApacheのwwwサイトにリダイレクトする、はるかに簡単で効率的な方法があります。

次の書き換えルールをApache構成に追加します(仮想ホストの内部または外部のいずれか。重要ではありません)。

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

または、非wwwサイトからwwwサイトへのURLの1対1のマッピングが必要な場合は、次の書き換えルール:

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

これが機能するためには、mod_rewriteモジュールをロードする必要があることに注意してください。幸いなことに、readytocloud.comはCentOSボックスで実行されており、デフォルトではmod_rewriteがロードされます。

ドメインが3,000未満でリダイレクトが4,000に近いApache 2.2を実行しているクライアントサーバーがありますが、サーバーの負荷は約0.10〜0.20です。


問題はDNSに関するものでした。Apache Webサーバーについてではありません。
SamTzu

-7

sipwizとMrEvilの両方に感謝します。ユーザーが入力したURLを解析しwwwてその上部に貼り付けるPHPスクリプトを開発しました。(たとえば、顧客がkiragiannis.comを入力すると、www.kiragiannis.comにリダイレクトされます)。したがって、お客様はルート(たとえば、Webリダイレクターの場所customer1.comA記録する)をポイントしてから、当社が管理するwww CNAME実際のAレコードをポイントします。

あなたが将来私たちに興味がある場合のためにコードの下に。

<?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
これは実際には、69k +人がこのスレッドを探してやってきたという質問には答えません。問題はDNSに関するもので、PHPとは何の関係もありません。
Matt Clark

1
問題はDNSに関するものでした。PHPコーディングについてではありません。
SamTzu

HTTP_HOSTは、その名前が示すように、URLではなくホスト名です。したがってhttp://、削除するものはありません/$urlPagePath常に空になります)。Cf httpd.apache.org/docs/2.4/expr.html。原因は、コードの試みは、サブドメインを取り除くための方法には、それはまたのようなもののためではない仕事だろう全体として考慮しなければなりません。また、HTTPSも処理しません。そして最後にPHPを使用すると、HTTPリダイレクトを実行するだけで、どのWebサーバーでも構成でそれを実行でき、複雑すぎます。要するに、これは確かにこの質問に対する有効な答えであってはなりません。www.example.co.ukco.uk
Patrick Mevzek

このルールをすべてのホストに適用する必要がある場合は、Apache構成として実行する必要があります
Svetoslav Marinov '
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.