24時間365日フルマネージドホスティングサービスのデイーネット

名前解決の優先順位について調べてみた

こんにちは。最近パスタ作りにはまっている浅見です。

サーバも料理も「基本」が大事。オイル系パスタは「乳化」を意識して調理することで、格段においしいものが作れるようになりますよ。

ということで本題ですが、先日resolv.confとサーバホスト名の組み合わせで嵌ったことがありました。

名前解決の優先順位の問題だったのですが、意外と知らないことが多かったのでまとめてみます。

名前解決順の調べ方

今回は、名前解決の挙動をpingとtcpdumpコマンドを使って調べてみようと思います。調査に利用したOSは「CentOS Linux release 7.5.1804 (Core)」です。

ターミナルを2つ開いて、片方でwww2に対してpingを打ちます。

# ping www2
ping: www2: Name or service not known

そんなドメインは存在しないと言われますが気にしないでおきましょう。

もう一方のターミナルで、53番ポートあての通信に対してtcpdumpを取得します。ここに出力されるドメインを見ることで名前解決の挙動を確認しました。

# tcpdump -n -vv dst port 53
09:36:42.231676 IP (tos 0x0, ttl 64, id 21661, offset 0, flags [DF], proto UDP (17), length 62)
    10.0.30.178.34110 > 10.0.0.2.domain: [bad udp cksum 0x32ef -> 0x2d60!] 20085+ A? www2.denet.co.jp. (34)
09:36:42.232305 IP (tos 0x0, ttl 64, id 21662, offset 0, flags [DF], proto UDP (17), length 62)
    10.0.30.178.39466 > 10.0.0.2.domain: [bad udp cksum 0x32ef -> 0x5fbe!] 2358+ A? www2.denet.ad.jp. (34)
09:36:42.232829 IP (tos 0x0, ttl 64, id 21663, offset 0, flags [DF], proto UDP (17), length 50)
    10.0.30.178.52032 > 10.0.0.2.domain: [bad udp cksum 0x32e3 -> 0x0825!] 19058+ A? www2. (22)

上の例では、www2.denet.co.jp、www2.denet.ad.jp、www2と名前解決していき、名前解決できなかったので「www2: Name or service not known」となっています。

名前解決順を調べてみた結果

名前解決の優先順位は

  • resolv.confのsearch
  • rsolv.confのdomain
  • ホスト名

 

の組み合わせで決まっています。

名前解決の順番を調べた結果は次の通りです。

resolv.confのsearch

resolv.confのsearchでは、所属ドメインを複数記載することができます。

名前解決のさいに、ここに記載したドメインを自動補完してくれます。何が良いかというと、wwwなど短いドメインで名前解決が可能になります。

複数記載する場合は半角スペースで区切り列挙します。記載順が優先順位となり、最大6個まで設定が可能です。

resolv.confに

search denet.co.jp denet.ad.jp

と記載した場合に、ping www2を実行したところ、次の順番で名前解決していました。

  1. www2.denet.co.jp
  2. www2.denet.ad.jp
  3. www2

wwwなど存在するドメインの場合は、先頭に記載したwww.denet.co.jpの名前解決が行われます。

resolv.confのdomain

resolv.confのdomainでは、所属ドメインを記載することができます。

resolv.confに

domain denet.jp

と記載した場合に、ping www2を実行したところ次の順番で名前解決していました。

  1. www2.denet.jp
  2. www2

resolv.confのsearchとdomain

searchとdomainを両方記載した場合はsearchのみ有効になります。

resolv.confに

domain denet.jp
search denet.co.jp denet.ad.jp

と記載した場合に、ping www2を実行したところ次の順番で名前解決していました。

  1. www2.denet.co.jp
  2. www2.denet.ad.jp
  3. www2

domain部分の名前解決は行われていないことがわかります。

ホスト名

resolv.confのsearchとdomainを記載していない場合、ホスト名が利用されます。

ホスト名に

www.denet.co.jp

という名前を利用していた場合は、denet.co.jpを所属ドメインとして名前解決してくれます。

ping www2を実行したところ次の順番で名前解決していました。

  1. www2.denet.co.jp
  2. www2

ホスト名に

denet.co.jp

という名前を指定している場合は次のようになります。

  1. www2.co.jp
  2. www2

まとめ

今回嵌ったのは、searchとdomainを記載しておらず、ホスト名にxxx.comと記載していたパターンで、localhostで名前解決するとlocalhost.comの結果が返ってきました。

原因は、/etc/hostsファイルのlocalhostの部分をlocalhstと誤記載していたことだったのですが、.comの情報がどこで付与されているのか良くわからなかったので今回調べてみました。

普段あまり意識することがない部分ですが、基本的なことをしっかりと抑えているかどうかでトラブルシュートの対応速度が大きく変わっていきます。

基本をしっかりと抑えることを習慣づけていきましょう。

  • このページの先頭へ

  • 東京本社
    〒105-0001東京都港区虎ノ門2-3-22 第一秋山ビル5F
    TEL:03-3591-8887 FAX:03-3591-8886
  • 大阪本社
    〒541-0041 大阪市中央区北浜2-6-11北浜エクセルビル5F
    TEL:06-6231-8887 FAX:06-6231-8897

  • 認証範囲はこちらをご覧ください。

Denet logo

クラウドサービス・データセンタ・高機能専有サーバ・共有サーバホスティングサービス 株式会社ディーネット
dot_bar