MS Windows の DNSクライアント

ちゃんと実装してんのか!?と、DNSレコードを勝手にキャッシュしたりする挙動を見ると腹が立つ。Microsoftのこーいうとこがキライなわけですよ。
ま、主観的な話はさておいて。
コントロールパネル→管理ツール→サービス の、"DNS Client" というサービス。説明の欄にはコレがないとDNSの名前解決が出来ないと書いてある。

このコンピュータのドメインネームシステム(DNS)名を
解決およびキャッシュします。このサービスが停止した場合、
このコンピュータはDNS名を解決できず、Active Directory 
ドメインコントローラーを見つけることができなくなります。
このサービスが使用不可にされた場合、このサービスに
明示的に依存するサービスはすべて起動できなくなります。

が、ホントのところこの記述は正しくない。名前解決できますよ。普通に。こいつを停止して出来なくなるのは、名前解決ではなくて、PCの上のDNSキャッシュが使われなくなること。その証拠に、マイクロソフトのサポートページでは「Windows XP および Windows Server 2003 でクライアント側の DNS キャッシュを無効にする方法」が紹介されていて、この解決方法は、"DNS Client"サービスを停止することだった。
http://support.microsoft.com/default.aspx?scid=kb;ja;318803
で、このサービスを停止して二度と起動しないようにして、PCを再起動。そしたらさっきまで引けていたドメインが引けなくなった。理由はさっぱりわからない。いろいろ苦心の末大丈夫になったんだけれど、その時覚えた nslookup の変わった話を。

nslookup コマンドの詳しい動きを知る

C:\>nslookup
Default Server:  ns.example.jp
Address:  192.168.0.101

> ?
Commands:   (identifiers are shown in uppercase, [] means optional)
NAME            - print info about the host/domain NAME using default server
NAME1 NAME2     - as above, but use NAME2 as server
help or ?       - print info on common commands
set OPTION      - set an option
    all                 - print options, current server and host
    [no]debug           - print debugging information
    [no]d2              - print exhaustive debugging information
    [no]defname         - append domain name to each query
    [no]recurse         - ask for recursive answer to query
    [no]search          - use domain search list
    [no]vc              - always use a virtual circuit
    domain=NAME         - set default domain name to NAME
    srchlist=N1[/N2/.../N6] - set domain to N1 and search list to N1,N2, etc.
    root=NAME           - set root server to NAME
    retry=X             - set number of retries to X
    timeout=X           - set initial time-out interval to X
(後略)

nslookup コマンドっていろいろあったのね、と初めて知ったよ。とくに set debug とか set d2 を叩いていろいろ調べるととてもよくわかる。"example.jp" と "example.jp."(最後にドットがある/ない)の違いもわかるかもね。
で、nslookup コマンドの紹介みたいなマネをしちゃったけれど、これはダメなコマンドなのですよ。Bind9からだと思うんだけれど、nslookupコマンドの起動時にはこんなメッセージが出ます。

Note:  nslookup is deprecated and may be removed from future releases.
Consider using the `dig' or `host' programs instead.

要するに、nslookup はダメな奴だから dig とか host コマンドを使いなさいよ、ってことです。Windows環境しかない人にはちょっとかわいそうだけれど、UNIXみたいなOSの人はdigを使いましょう。便利だしね。