3Dec/09Off
goの名前解決(Linux)
なんやかんややりつつOAuthの実験にサーバにgoの吐いたオブジェクトを持っていった時の話。
どうしてもnet.dialで名前解決に失敗する。あれ?と思ってping打ってみたりnslookupしてみたりすると普通に名前解決できる。し、サーバじゃなければOSXでもLinuxでも普通に動くのだ・・・。
この辺、Issue 345: DNS being very flaky.見て、resolv.confにoptions?って思ったけどちょっと現象が違う。
んむむ、って思って go/src/pkg/net/dnsclient.goをじっと眺めると…解ったorz
普通、resolv.confのnameserver行にはプロバイダに割り当てられたDNSサーバのIPアドレス書くなり、dhclientが勝手に追記してくれるんだけど、このサーバ web兼、dns兼、mailというサーバで、ローカルでbind9が動いてるので、
nameserver localhost
って設定が。
goのdnsclient.goは御丁寧にnameserverでの指定がIPアドレスかどうか見てくれてる。libresolvだと、/etc/host.conf見て/etc/hostsも見に行ってくれるんだけど。
って、事でnameserver 127.0.0.1
に修正。あっさり動いた。
んー…、色々思うことも有るものの後術w