競合するDNSレコードの原因を見つけるにはどうすればよいですか?
競合するDNSレコードの原因を見つけるにはどうすればよいですか?
回答:
特定のドメイン名のSOA(Start of Authority)レコードが必要になります。これは、広く利用可能なnslookupコマンドラインツールを使用してSOA(Author of Authority)レコードを実現する方法です。
command line> nslookup
> set querytype=soa
> stackoverflow.com
Server: 217.30.180.230
Address: 217.30.180.230#53
Non-authoritative answer:
stackoverflow.com
origin = ns51.domaincontrol.com # ("primary name server" on Windows)
mail addr = dns.jomax.net # ("responsible mail addr" on Windows)
serial = 2008041300
refresh = 28800
retry = 7200
expire = 604800
minimum = 86400
Authoritative answers can be found from:
stackoverflow.com nameserver = ns52.domaincontrol.com.
stackoverflow.com nameserver = ns51.domaincontrol.com.
起源(またはプライマリネームサーバラインWindows上で)ことを示していますns51.domaincontrolはのための主要なネームサーバであるstackoverflow.com。
出力の最後に、指定されたドメインのバックアップサーバーを含むすべての権限のあるサーバーが一覧表示されます。
dig
ように見えました(以下の回答を参照)
nslookup -type=soa stackoverflow.com
今日(2019年2月)にLinuxで実行する場合、権限のあるセクションは空です。
質問で単数形を使用しましたが、通常は権威のあるネームサーバーがいくつかありますが、RFC 1034では少なくとも2つを推奨しています。
「権限のあるネームサーバー」ではなく、「プライマリネームサーバー」を意味する場合を除きます。セカンダリネームサーバーには権限があります。
UNIX上のドメインのネームサーバーを見つけるには:
% dig +short NS stackoverflow.com
ns52.domaincontrol.com.
ns51.domaincontrol.com.
プライマリとしてリストされているサーバーを見つけるには(「プライマリ」の概念は最近非常にあいまいであり、通常は適切な答えがありません):
% dig +short SOA stackoverflow.com | cut -d' ' -f1
ns51.domaincontrol.com.
ネームサーバー間の不一致をチェックするために、私の好みはcheck_soa
Liu&Albitzの「DNS&BIND」の本(O'Reillyエディター)で説明されている古いツールを使用します。ソースコードはhttp://examples.oreilly.com/dns5/で入手できます。
% check_soa stackoverflow.com
ns51.domaincontrol.com has serial number 2008041300
ns52.domaincontrol.com has serial number 2008041300
ここでは、2つの信頼できるネームサーバーのシリアル番号が同じです。良い。
www.pressero.com
、別のサイトのCNAMEであるとして定義されたサイト-dig + short SOAは、CNAMEターゲットを返すだけです。
www.pressero.com
、私がそうすることを疑っています。おそらくAレコード(これをdig
指定しない場合のデフォルトのレコードタイプ)について考えていたでしょう。ただし、必要に応じて、tail -1
最終結果を取得するためにを追加するだけです。
dig +short SOA www.pressero.com
。これは、CNAMEターゲットのみを返しますpressero.com
。ドメインのSOAレコードは返されません。 tail -1
問題を助けません。dig +short SOA
1行だけを放出しています。
* nixの場合:
$ dig -t ns <domain name>
この種の質問に答えるように設計されたDNS伝播ツールがあります。
ソースはAGPLv3の下でリリースされています。
(はい、現時点ではインターフェースはかなり基本的です:))
"host"コマンドでドメインのネームサーバーを見つけることもできます:
[davidp @ supernova:〜] $ host -t ns stackoverflow.com stackoverflow.comネームサーバーns51.domaincontrol.com。 stackoverflow.comネームサーバーns52.domaincontrol.com。
+ traceオプションを常に追加する最善の方法であることがわかりました。
dig SOA +trace stackoverflow.com
異なるプロバイダーでホストされている再帰的なCNAMEでも動作します。+ traceトレースは+ norecurseを意味するため、結果は指定したドメインのみのものになります。
あなたがググリングするべきであるという用語は「信頼できる」であり、「決定的な」ものではありません。
LinuxやMacでは、あなたはコマンドを使用することができwhois
、dig
、host
、nslookup
または他のいくつか。nslookup
Windowsでも動作する可能性があります。
例:
$ whois stackoverflow.com
[...]
Domain servers in listed order:
NS51.DOMAINCONTROL.COM
NS52.DOMAINCONTROL.COM
追加クレジットについて:はい、可能です。
aryehは間違いなく間違いです。彼の提案は通常、ホスト名のIPアドレスしか提供しないためです。を使用する場合はdig
、次のようにNSレコードを検索する必要があります。
dig ns stackoverflow.com
これはローカルDNSサーバーに要求する可能性があり、そのため、キャッシュにある間違ったまたは古い回答を返す可能性があることに注意してください。
ドメインの信頼できるネームサーバーとその一般的なDNSレコードを1つのリクエストで提供するDNSルックアップツールを構築しました。
例:https : //www.misk.com/tools/#dns/stackoverflow.com
私たちのツールは、ルートネームサーバーでリアルタイム(キャッシュされていない)DNSルックアップを実行し、信頼できるネームサーバーに到達するまでネームサーバーの紹介をたどることによって、信頼できるネームサーバーを見つけます。これは、DNSリゾルバが信頼できる回答を取得するために使用するのと同じロジックです。各クエリでランダムな権威ネームサーバーが選択(および識別)され、複数の要求を実行することで、競合するDNSレコードを見つけることができます。
上記の例のDNSルックアップ結果の下部にある「権威ネームサーバー」をクリックして、ネームサーバー委任パスを表示することもできます。
例:https : //www.misk.com/tools/#dns/stackoverflow.com@f.root-servers.net
whoisサービスを使用できます。UNIXのようなオペレーティングシステムでは、次のコマンドを実行します。または、http://www.internic.net/whois.htmlのWebでも実行できます。
whois stackoverflow.com
次の応答が返されます。
...ここでテキストを削除しました...
リストされた順序でのドメインサーバー:NS51.DOMAINCONTROL.COM NS52.DOMAINCONTROL.COM
nslookupまたはdigを使用して、特定のドメインのレコードに関する詳細情報を見つけることができます。これは、説明した競合を解決するのに役立ちます。
残念ながら、これらのツールのほとんどは、実際のネームサーバー自体によって提供されるNSレコードのみを返します。ドメインを実際に担当しているネームサーバーをより正確に判断するには、「whois」を使用してそこにリストされているドメインを確認するか、「dig [domain] NS @ [root name server]」を使用して実行する必要がありますネームサーバーのリストを取得するまで再帰的に...
ネームサーバー自体から与えられる結果だけでなく、その結果を確実に一貫した形式で取得するために実行できる簡単なコマンドラインがあればよいのにと思います。これの目的は、管理している約330のドメイン名を照会できるようにすることです。これにより、各ドメインがどのネームサーバーを指しているかを正確に特定できます(レジストラ設定に従って)。
* nixで「dig」や「host」などを使用するコマンドを知っている人はいますか?
SOAレコードは、階層の上位にあるすべてのサーバーに存在し、ドメイン所有者は制御を持ちません。SOAレコードは、事実上、ドメイン所有者の制御下にある1つの権威ネームサーバーを指します。
一方、権限のあるサーバー自体のSOAレコードは、そのドメインを解決するために厳密に必要ではなく、偽の情報(または非表示のプライマリサーバー、またはその他の制限されたサーバー)を含むことができ、権限のあるネームサーバーの決定に依存すべきではありません特定のドメインの。
特定の子ドメインの信頼できるSOA情報を取得するには、トップレベルドメインに対して権限のあるサーバーにクエリを実行する必要があります。
(どのサーバーがどのTLDに対して信頼できるかという情報は、ルートネームサーバーから照会できます)。
TLD権限のあるサーバーからのSOAに関する信頼できる情報がある場合、プライマリネームサーバー自体(gTLDネームサーバーのSOAレコードにあるもの)に権限のある他のNSレコードを照会し、すべてのチェックに進むことができます。 NSレコードのクエリで取得したネームサーバー。これらのサーバーのいずれかで、他の特定のレコードに矛盾がないかどうかを確認します。
これはすべて、nslookup / windowsよりもLinuxおよびdigの方がはるかに優れており、信頼性が高くなります。
一部のドメインでは、上記の回答が機能しないことがわかりました。私が見つけた最も速い方法は、最初にNSレコードをチェックすることです。それが存在しない場合は、SOAレコードを確認してください。それが存在しない場合は、digを使用して名前を再帰的に解決し、最後に返されたNSレコードを取得します。これに当てはまる例はanalyticsdcs.ccs.mcafee.com.
host -t NS analyticsdcs.ccs.mcafee.com.
host -t SOA analyticsdcs.ccs.mcafee.com.
dig +trace analyticsdcs.ccs.mcafee.com. | grep -w 'IN[[:space:]]*NS' | tail -1
host analyticsdcs.ccs.mcafee.com. gtm2.mcafee.com.