Hatak::Techlog

Verba volant, scripta manent.

MacOSX のローカルの DNS キャッシュ

DNS の設定を触るとき、ローカルのキャッシュが変わっていないためにハマることが多々あります。Mac の場合、ターミナルで dig して変更を確認してもブラウザで開けなかったりするわけで。

これは、MacOSX 内部で DNS 解決の結果をキャッシュする機能が働いているためです。 キャッシュをコントロールするためには dscacheutil コマンドを使います。

dscacheutil
1
2
3
4
5
6
Usage: dscacheutil -h
       dscacheutil -q category [-a key value]
       dscacheutil -cachedump [-buckets] [-entries [category]]
       dscacheutil -configuration
       dscacheutil -flushcache
       dscacheutil -statistics

キャッシュをクリアするのは "-flushcache" オプションをつけます。

1
$ dscacheutil -flushcache

sudo しなくてもユーザ権限でできるので安心。

実際にキャッシュされてるデータを調べるにはこんな感じ。

dscacheutil -q host -a name blog.hatak.net
1
2
3
name: vps02.sakura.dwmp.jp
alias: blog.hatak.net
ip_address: 49.212.41.49
dig blog.hatak.net
1
2
3
;; ANSWER SECTION:
blog.hatak.net.     600 IN  CNAME   vps02.sakura.dwmp.jp.
vps02.sakura.dwmp.jp.   600 IN  A   49.212.41.49

ちゃんと dig の結果と同じものがキャッシュされてました。CNAME の場合は alias として表示されるようですね。 IP からの逆引きも調べてみました。

dscacheutil -q host -a ip_address 49.212.41.49
1
2
3
name: www30255u.sakura.ne.jp
alias: 49.41.212.49.in-addr.arpa
ip_address: 49.212.41.49
dig -x 49.212.41.49
1
2
;; ANSWER SECTION:
49.41.212.49.in-addr.arpa. 3600 IN  PTR www30255u.sakura.ne.jp.

逆引きの委譲をしていないので管理用のドメインが返ってきてしまいますが、これも dig の結果と同じものになってます。 “ds” というコマンド名のとおり、もともと DirectoryService のキャッシュを操作するためのもののようで、DNS に限ったコマンドではなさそうです。

dscacheutil -q user -a name hatak
1
2
3
4
5
6
7
name: hatak
password: ********
uid: 501
gid: 20
dir: /Users/hatak
shell: /bin/bash
gecos: hatak