かなりハマったのでメモ
結論
nsswitch.confを修正しよう!
いきさつ
開発用に新しくサーバーを設置することになった。
- VMware ESXi5.5上にDebian9をインストール
- マシンには「192.168.1.28」のipを固定する
ローカルネットワーク上にDNSサーバー(192.168.1.25)が設置してあり、そちらのDNSを優先で参照するように設定したい。
なので/etc/network/interfacesにこのように記述した。
iface ens32 inet static
address 192.168.1.28
netmask 255.255.255.0
gateway 192.168.1.10
dns-nameservers 192.168.1.25
これでよし。networkingを再起動してnslookupで確認する。大丈夫みたい。
念のためブラウザでも確認をしてみる。ページ読み込みエラー。。。ぬっ
resolv.confも正しく設定されているし、digもnslookupも問題ないぞ。どういうことだdebian!
解決
/etc/hostsあたりが悪いんじゃないかなぁなどと調べていると
【Ubuntu】「sudo: ホストxxxの名前解決ができません」が治らない…
の記事内にて「nsswitch.conf」というキーワードを発見。
hostsとnsswitchについてはDNS系備忘録に分かりやすく書かれていた。
注意事項としては、nsswitch.confを変更しても、nslookupやhost、digの動作はかわらない(らしい)ということ。
まんまこの状況じゃないか。
nsswitch.conf
/etc/nsswitch.confのソースを見てみる。
...
hosts: files mdns4_minimal [NOTFOUND=return] dns myhostname
...
nsswitchでは右に記述されている要素を左から順に評価していくようだ。
この記述だと
files -> mDNS -> NOTFOUNDならreturn
というフローになる。これDNSまで届かないのでは・・・?
mDNSとは初めて聞いた単語だ。
mDNSを使えるノードはマルチキャストアドレス(224.0.0.251)のUDP, ポート5353にDNSのクエリをなげ、対応するマシンがいればそのノードが返事を返す
というものらしい。疲労困憊なのでこの辺は時間があったら詳しく調べよう。
mDNSは今回使用しないので以下のように書き換えた。
...
hosts: files myhostname dns
...
networkingを再起動、ブラウザ上でちゃんと名前解決できた。
なんだかフラフラした解決方法だったが、動いたからまぁいいや。
色々と曖昧な内容になってしまったので、ここ間違ってるよ、みたいな箇所があればご指摘いただけると幸いです。