トップページnetwork
41コメント20KB

「名前解決」の仕組み

■ このスレッドは過去ログ倉庫に格納されています
0001[email protected]NGNG
DNSの仕組みについて教えてください。

DNSというのは例えば "xyz.com" という ドメイン名を "123.234.56.78"
というIPアドレスに変換する仕組みだというところまでは解っているのですが、
[xyz.com=123.234.56.78]という情報をもっているDNSサーバーを探す仕組み
がわかりません。
DNSサーバはあちこちにありますが、それらのDNSサーバの全てが世界中の
全ドメイン名対IPアドレスの情報を持っている訳ではないですよね。
であるすると例えば、私が"[email protected]"宛のメールを送った場合、最初に参照
するDNSサーバに[xyz.com=123.234.56.78]の情報がないとしたら、次にどういう
アクションになるのかご存知の方がおられましたらお教えください。

0002名無しさんNGNG

自分のとこになかったら、後ろから順番に
.comのDNSサーバにいって、そのなかの
xyzのDNSサーバ見て、さいごにさらにそのなかの
abc@xyz.comという名前を見つけると思ったんだけど.
0003名無しさんNGNG
名前解決に困ってませんか?
尋ね人いませんか?
恋人はいますか?
そんなあなたにドメイン探しのお手伝いさせていただきます。

株)DNS ダイナミック・ナンパ・サービス
Mail: [email protected]
0004>3NGNG
なんだか意味不明だけど面白い。
0005[email protected]NGNG
.comドメイン全てが収まっているDNSサーバがあるんですね!
やっぱりそうなんですか。 でもそりゃすごいアクセス量になるね。
0006うぃっすNGNG
root cacheについて調べてみなさい
0007>2NGNG
あ〜ちょっとちがうぞ
.com に問い合わせるのではなく "." に問い合わせるのだ
0008>7NGNG
"." って?
0009名無しさんNGNG
NTのプロンプトでnslookupって打って、
set q=ns って打って、
. って打ってみそ。
0010>9NGNG
NTないっす。

0011名無しさんNGNG
http://www.forest.impress.co.jp/library/ws_ping.html
0012FiveNGNG
名前解決の仕組みは以下のようになっています。

・アプリケーションは自ホストのリゾルバ(解決ライブラリ)に名前の解決を
 依頼します。
・リゾルバはまず、手元のキャッシュに過去の解決結果がないか調べます。
 したがって、実際のデータとキャッシュ内のデータが違っている場合には、
 名前解決に成功するが間違ったアドレスを使うという現象が発生します。
・リゾルバで解決できなかった場合には、その名前での解決をホストに登録
 されているネームサーバーに依頼します。
・ネームサーバーは、まず自分が管理しているキャッシュ及びデータベースの
 中に該当する情報がないかを調べます。あればそれを返して終わりにします。
・もしネームサーバーにとって未知の名前である場合には、ルートネーム
 サーバーと呼ばれるサーバーに名前を問い合わせます。
 # 先の書き込みで "." として表現されているものです。
・ルートネームサーバーは、キャッシュ及び自分が管理するデータベースを検索し、
 該当するものがあればそれをネームサーバーに返します。もし該当するものが
 なければ、そのデータを持っていると思われるサーバーのリストを返します。
 例えば、"www.2ch.net" であれば、"net" は "." にとって既知なので、最寄
 サーバーとして "net" ドメインのネームサーバーへのポインタを返します。
0013FiveNGNG
・ネームサーバーは、"net" ドメインのネームサーバーに名前を問い合わせます。
 "net" ネームサーバーでも、キャッシュ及びデータベースを検索して、該当する
 ものがあればデータを、そうでなければ最寄のサーバーへのポインタを返します。
 例えば "www.2ch.net" なら、1階層下に "2ch" があることは分かるので、最寄の
 ネームサーバーとして "2ch.net" のサーバーのリストを返します。
・ネームサーバーは "2ch.net" ドメインのネームサーバーに名前を問い合わせます。
 ネームサーバーは該当するデータがあればそれを返し、そうでなければ最寄の
 サーバーへのポインタを、最寄のサーバーがなければ該当データなしという返事を
 返します。
 この場合、"www.2ch.net" というデータがあればそれを返して終了ですし、そうで
 なければ解決失敗になります。
・ネームサーバーは相手サーバーからの最終的な返事を受け取ったら、それを
 クライアントのリゾルバに渡します。

nslookup は、人が意図的に名前解決の依頼を発生させるためのツールです。
bind for NT (ftp://ftp.isc.org/isc/bind/contrib/ntbind/) にもついています。
"for NT" となっていますが、Windows95/98 でも動作します。
0014[email protected]NGNG
>12@`13
おおっ!
ものすごく詳しい説明ありがとうございます。(落涙
よくわかりました。
名前解決が解決しました。
Wsping32.exeもダウンロードして使ってみました。
おもしろかったっす。(こんなにたくさんのホスト経由してんのね。)

みなさん、どうもありがとうございました。


0015名無しさんNGNG
dig - send domain name query packets to name servers

dig.exeってありませんか?
0016>14NGNG
Fiveさんは技術的に詳しいのですが、素人にはわかりづらいので
卑近な例えを教えましょう。

世界のどっかに電話をしたいとします。ところが世界全体の電話
帳というのは巨大すぎるので管理しきれませんので存在しません。
そこで、これを国単位に分割します。大元はアメリカが管理する
ことにしましょう。
で、日本の2hcという会社の「ひろゆき」という人に電話をかけ
たいとします。では日本の電話帳がどこにあるか?と調べるので
すが、これはアメリカに聞いてみるしかありません(".")。そこ
で聞いてみると、それは日本(".jp")というところにあるので、そ
こで「2chという会社」を調べてみることにします。そうすると
日本の電話帳も巨大すぎるそうで、「会社」「学校」などの組織
別に分冊になっていることがわかりました。そこで「会社」の分
冊を引いてみて2chという会社を見つけましたが、そこには大代表
の電話番号がかいてあります。では、ということで2chという会社
の大代表に電話をして「ひろゆき」という人の電話番号を聞くと
教えてもらえました。

これが hiroyuki.2ch.co.jp のようなホスト名の解決方法です。
0017>16NGNG
読みづらいです。
でもFiveサンのでわかったからいいや。

00181>16NGNG
噛み砕いた解説ありがとうございます。
0019メアリNGNG
私の会社のサーバでnslookupをかけたのですが、
良く分からない点があります。

[root@xxx mqueue]# nslookup
--------------------------------------------
1 yahooを引いてみる。

> www.yahoo.co.jp
Server: xxx.ooo.co.jp
Address: 172.xx.xox.xxo

Non-authoritative answer:
#(これはキャッシュの情報を見ているという意?)
Name: www.yahoo.co.jp
Addresses: 210.140.200.xx...(略)

#エラー無しで引ける
--------------------------------------------
2 存在するはずのないaaaaを問い合わせる

> aaaaa
Server: xxx.ooo.co.jp
Address: 172.xx.xox.xxo

*** xxx.ooo.co.jp can't find aaaaa:
Non-existent host/domain

#存在しませんというメッセージ
-------------------------------------------

2 maillogに送信不可能という
 エラーが出ていた"pas.mei.co.jp"を引いてみる

Default Server: xxx.ooo.co.jp
Address: 172.xx.xox.xxo

> pas.mei.co.jp
Server: xxx.ooo.co.jp
Address: 172.xx.xox.xxo

Name: pas.mei.co.jp.xxx.co.jp

#問い合わせたドメイン名.自分のサーバのドメイン名という
意味不明な回答が返ってくる??

-------------------------------------------------
1、2は正常だと思うのですが、
3の現象が意味不明です。(2のように
Non-existent host/domainと出てくれれば分かるのですが)

それと、DNSのlogを見ていると、
>bad referral (jp !< mei.co.jp)
が出ているのですが、これはなんでしょうか?
と書きながら自己レスです。
サーバが報告するエラー はここを参照してください。
http://www.soi.wide.ad.jp/iw97/iw97_tut/slides/12_09/48.html
0020>19NGNG
自分のドメイン名を足しちゃうのはDNSの設定に
問題がありません?試しに

pas.mei.co.jp.

を引いてみてください。
0021FiveNGNG
ドメイン名というのは resolver によって補完されます。例えば、
2ch.net なクライアントが www.2ch.net につなげるときには、
・www.2ch.net
・www
という2通りの指定方法があります。なぜ後者でつながるのかというと、
リゾルバがドメイン名を補完し、www -> www.2ch.net として検索を
かけるからです。すなわち、最初の問い合わせでは
・"www" という名前解決を "." に依頼 -> 失敗
となり、次に
・"www" に自ドメイン名 (2ch.net) を付加 -> 成功
となるわけです。

このような補完を禁止するには、最後に "." をつけます。
これで補完なしにその名前をそのまま使うようになります。
Widows や Unix のシェルからパスを指定するときに、
"directory\file.txt" とすると(相対パス指定)、現在のパスが先頭に付加され、
"\directory\file.txt" とすると(絶対パス指定)、ルートディレクトリから
指定したのと見なされるのといっしょです。
0022>21NGNG
20です。ちょい調べてみました。
この pas.mei.co.jp ですが、pas.mei.co.jp は A レコードはない
ですね。MXは持ってますが、たぶんサブドメインでしょう。
で、こいつを受け持っているNSが.netだったりで19番さんの、いう
結果になっているようです。だもんで正常ですかね。
0023>メアリさんNGNG
メール配送を受け持つホストを調べる場合にはmei.co.jp
のような「ドメイン」そのものはホストではないのでAレ
コードを持たない場合が多いです。ドメインそのものがA
レコードを持つ場合には、そのネットワークアドレスが設
定してあるか、あるいは1IPで運用されている場合が多い
ですね。
したがって、pas.mei.co.jpのメール配送を行っているホス
トを調べたい場合にはnslookupで set type=MX オプション
でMXホストを調べてください。
0024>21NGNG
補完の有無ってresolv.confで設定できましたっけ?
0025名無しさんNGNG
nslookupで確認すると数字のアドレスが沢山あるってどういう事なんですかね?
0026FiveNGNG
>22
そうですね、正常な結果だと思います。

>23
ドメインに A レコードを設定するのは、古い MTA 対策でもあるようです。
MX ではなく A を引く実装があったんですね。
現在ではほぼ死滅しているみたいですけど。

>24
resolv.conf の設定で補完禁止にできるか、ってことでよね?
domain エントリを空にすれば (nameserver のみにする) 補完できなくなると思います。

>25
DNS ラウンドロビンになるような構成を取っていると複数出力されます。
# つまり同一ホスト名に複数アドレスが定義されている。
ex.) www.yahoo.com
0027メアリNGNG
皆さん、レスありがとうございます。

結論を言うと正常な結果だったのですね。
本当に勉強になります。
>set type=MX オプションでMXホストを調べてください。
やってみます。どうもmaillogに変なログが
多いので色々調べる必要があるのです。
ここは為になるので印刷して電車でゆっくり読みます。
0028名無しさんNGNG
DNS & BIND を読もうね。
0029名無しさんNGNG
OREILLY の DNS & BIND 読むとDNSについては他に読まなくても
良いんではないかと。

色々見るより、よくまとまってるしお勧めだと思います。

ISBN4-900900-91-5
5000円

ちょっと高いけどこの手の雑誌を何冊か買うよりは間違いなく
良いんじゃないかな。
0030名無しさんNGNG
そうそう。
DNS & BINDを読破して、BINDの設定で散々苦労を経験した後、
DNScacheに手を出すと吉(笑)
0031メアリNGNG
DNSの学習に関する良い情報源を見つけました。ここ
http://www.linux.or.jp/JF/JFdocs/DNS-HOWTO.txt

ところで、namedのエラーというのはどこまでが
致命的なのでしょうか?
というのも、うちの会社のサーバに定期的に下記の
ログが吐かれています。namedのエラーメッセージ
のようです。
xxx named[10944]: "tokyo1.tomen.co.jp IN MX" points to a CNAME
(mx2.tomen.co.jp)
xxx named[10944]: "tomen.co.jp IN NS" points to a CNAME
(ns.tomen.co.jp)
 
以下略

しかし、メールのログをみると
relay=mx.tomen.co.jp. stat=Sent (Ok)
と出ているので、メールは上手くいっているはずですが、
判断が難しいです。(ユーザから苦情も来ないし....)

23さんが教えてくれた set type=MXでnslookupをかけました。

Non-authoritative answer:
tomen.co.jp preference = 20@` mail exchanger = mx2.tomen.co.jp
tomen.co.jp preference = 10@` mail exchanger = mx.tomen.co.jp

Authoritative answers can be found from:
tomen.co.jp nameserver = ns2.tomen.co.jp
tomen.co.jp nameserver = ns.tomen.co.jp
以下略

うちのサーバの問題なのかなー
0032メアリNGNG
どうやら、mx2.tomen.co.jpがMXレコードをAレコードをもつ
実名ではなく、CNAMEを指定しているのが問題らしいです。

nslookup引ける人は試してみて下さい。
0033just_another_perl_userNGNG
ちなみに、MX (などの) レコードに CNAME で定義したホスト名を書くのは不
正です。
cf. http://rfc.asuka.net/rfc/rfc1912.html#s.2.4
0034>33NGNG
ん?MXは問題ないのでは?
0035>33NGNG
CNAMEで定義されているホストはMXレコードを持てない、っという
意味かな?
003634ですNGNG
失礼しました。

hihi.net IN MX mailhost
mailhost IN CNAME hogehoge
hogehoge IN A 192.168.0.1

みたいな記述は不正でしたね・・・あちゃー
やっちゃってます(笑
003734ですNGNG
さらにチェックしてみました

で、なぜうちとメアリさんの所が同じ間違いというか勘違いをし
ていたかというと原因らしきものが判明。
うちもメアリさん所も上流が同じなのですよ。で、そこがDNSの
設定をする際に"IN A"で複数のホストに同じアドレスを設定する
な、つまり

www IN A 192.168.0.1
mx IN A 192.168.0.1

という記述は「好ましくない」という指導をしていた記憶があ
ります。で、別名にはCNAMEを使えと指導していたのが元凶の
ようで、私もてっきりCNAMEで書くものだと今日まで思い込ん
でたようです。
0038メアリNGNG
>37さん
どうしますか?これは致命的な問題なのでしょうか?
0039FiveNGNG
少なくとも、sendmail の場合には CNAME も解決してくれるので致命的な
問題にはなりません。が、実装によっては A レコードで検索し CNAME を
無視する可能性もあるので、そのような実装の MTA は当該メールを
正しく配信することが不可能になります。

CNAME を使ってはいけない理由にはいかのようなものがあるようです。
詳しい話はこうもり本のシステム管理編「DNS と sendmail」の章を
読んでください。
・CNAME で参照されている名前に対する A レコードがない可能性が
 ありうる。
 ex.) dest.domain IN MX mailhost
    mailhost  IN CNAME realname
    はあるが、realname の A レコードがどこにもない
・CNAME を使うと複数回余計に検索する必要がある
 忙しいホストでは、これは MTA の効率を削減する可能性がある
004037ですNGNG
って、34なんですけどね

>メアリさん
致命的な問題ではないようです。ですが実際には39番でFiveさんが
言われている通りの問題から、この記述は「嫌われて」いるようで
すねえ。

考えてみればDNSを使うメール配送の仕組みによる問題ですから、
sendmailなどを使っている限りでは問題ないはずですが、この場合
自サイトに向けたメールの配送なので、相手が何かわからないので
CNAME記述は使わないのが良さそうですね。
0041メアリNGNG
皆さん、参考になるレスをありがとうございました。


■ このスレッドは過去ログ倉庫に格納されています