2013年12月8日日曜日

MacOSXのdnsmasqの名前解決トラブル法(実は原始的解決)

dnsmasqをBBB(ubuntu)上に建てたのはいいが、dnsmasqへのMacOSX(現在10.8利用)からのDNS名前解決が上手くいかないことがあるのは、内外のサイトであれこれ議論?されているように古くて新しい問題である。10.9でも困ってるようだ。UNIX/LINUX/WINDOWS系にはこの問題は存在しない。

host
nslookup
dig
などのコマンドでは名前解決(正逆引き)出来るのに、pingやsshだとresolve出来ないというのがその現象。

おいらんちの環境でもそうなった。なにかの拍子にうまくいってくれるのだが、リブートすると水の泡。これではローカルネット用にホスト名を付けた意味が半減する(メインのマシンがMacOSなのだから)。

しばしば見られる解決アドバイスとしてはMacOSXのmDNSResponderキャッシュを消すというのがあって、
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
 しなさいというのがひとつ。同じことだが
sudo killall -HUP mDNSResponder
しなさいというのがひとつ。

さらに、
sudo dscacheutil -flushcache
 しなさい、というのがひとつ。で、この3つとも効果が無い。

DNS Name lookup (was SSH) Not Working After Snow Leopard Upgrade
のコメントの中にある「要するにMacOSXのsshとかpingはgethostbyname2()関数をつかっていて、これは/etc/hostsに書かれてるものじゃないとだめみたいなんでAppleの修正待つしかないんじゃないですかね」というのが説得力をもってしまった。

ちなみに上のフォーラムのコメントの中には「自分はMacOSXにdnsmasqをインストールして/etc/resolve.confでDNS指定したら上手く行った」という人も居て、結構泥沼になりそうな雰囲気である。OSXデフォルトのnamedをunloadしてdnsmasq経由で対象DNS(dnsmasq)と通信すれば改善しそうな気もするが、そこまでやるのはどんなもんだろうか。

というわけでdnsmasqのホストにrsyncをかけて/etc/hostsを取ってきて、メインマシンmacの/etc/hostsに書き込むという原始的解決法を採用した。スクリプトで自動化すれば手間じゃないし一台だし。

0 件のコメント:

コメントを投稿