状況
DNS を切り替える前に新サーバーを確かめるため、手元の PC の /etc/hosts に 203.0.113.20 www.example.com を追加した。ブラウザでは新サーバーのページが出るが、dig www.example.com は旧サーバーの 198.51.100.10 を返す。
このように結果が食い違う理由は?
正答
digは/etc/hostsを見ずに DNS サーバーへ直接問い合わせるから/etc/hostsの変更が DNS サーバーへ反映されるまで時間がかかるから- ブラウザは DNS ではなく、HTTP のキャッシュから接続先の IP を決めるから
digは TTL が切れるまで、前回と同じ答えを表示し続けるから
解説
ブラウザや curl は OS の名前解決の仕組みを使い、多くの環境では DNS より先に /etc/hosts を見る。そのため www.example.com は 203.0.113.20 になる。一方 dig は DNS の調査用の道具で、/etc/hosts を読まず、DNS サーバーに直接問い合わせた答えを表示する。/etc/hosts はその PC の中だけの設定で、DNS サーバーには伝わらない(2 番目は誤り)。確認が終わったら必ずこの行を消すこと。消し忘れると、本番の DNS を切り替えた後も自分だけ古い(または違う)サーバーを見続け、障害の切り分けを誤る。
参考: man7.org
この問題を含む ネットワーク基礎 のテストを制限時間つきで解く
ネットワーク基礎クイズへ