resolv.confのsearchとdomain

/etc/resolv.confのsearch指定って今まで何となく書いてたけど、やっは意味が分かった。というか初めてちゃんと調べた。

例えば、こんなネットワーク構成で、内向きのDNSが192.168.10.1に立ってる場合。

IPアドレス ホスト名
192.168.10.1 s1.example.com
192.168.10.2 s2.example.com
search example.com
nameserver 192.168.10.1

とresolv.confに書いておくと、「s1」とか「s2」だけで名前解決が出来る。これだけなら、searchじゃなくてdomainで指定しても変わらない。

domain example.com
nameserver 192.168.10.1

でも全く同じ。man resolv.confすると、searchよりdomainの方が速いような記述があるから、domainで書いた方がいいのかな。

これがこんな構成になった時に初めてsearchの意味が出てくる。

IPアドレス ホスト名
192.168.10.1 s1.hoge.example.com
192.168.10.2 s2.foo.example.com
search hoge.example.com foo.example.com
nameserver 192.168.10.1

これで、さっきと同じように「s1」「s2」だけで解決。

要するに、searchだと複数のドメインを書けて、与えられたホスト名に対してリストを順に適用して解決を図るということらしい。

domainとsearchは排他的に作用するらしいので、複数のサブドメインをresolv.confで解決したいならsearchで、それ以外のケースではdomainで指定するというのが正しい使い方なのかな。こういう基本がちゃんと出来てないから、つまらないことですぐトラブルになるんだな。

あと、このネタとは直接関係ないけど、内部向けの設定をやってる時にうまくいかなくて何かと思ったら、nscdが動いてたというオチに遭遇。設定忘れてホスト名解決に失敗して、設定し直したけどつながらない。見たらnscdが入ってるサーバで、

sudo /etc/init.d/nscd restart

したら直ったとか。ネガティブキャッシュに乗ってたのね。