getent hosts app.example.testは192.0.2.20を返すが、dig app.example.test Aは別のaddressを返す。
NSSのfiles serviceによるlocal overrideを確認する。
最初に確認すべきfileはどれか。
getentはNSSのfilesを通して/etc/hostsを参照できるが、digはDNSへqueryするためlocal hosts mappingを通常参照しない。
詳細解説
/etc/hostsfiles serviceが参照するlocal address/name mappingを保持する。
正しい。nsswitchのfilesが先ならgetentは/etc/hostsの192.0.2.20を返し、digのDNS answerと異なり得る。
/etc/servicesservice名とportの対応でhost address overrideではない。
誤り。servicesはapplication serviceとportのdatabaseで、host nameからaddressへのmappingを持たない。
/etc/hostnamelocal host自身のstatic hostnameでremote name mappingではない。
誤り。hostnameはlocal host自身の名前で、app.example.testの静的address overrideを記録するfileではない。
/etc/gai.confaddress selection policyを調整するfileで静的name mappingではない。
誤り。gai.confは複数address候補の優先度等を調整するが、name/address recordを直接定義しない。
実際に確かめる
一時的な検証環境で実行できる例です。
printf '%s
' 'getent hosts -> NSS/files may read /etc/hosts' 'dig -> DNS query, ignores hosts mapping'期待される結果
getent hosts -> NSS/files may read /etc/hosts
dig -> DNS query, ignores hosts mapping理解のポイント
- /etc/hostsはlocal override
- getentはNSS
- digはDNSへ直接query
確認時の注意
- 確認環境: 解決経路の表示のみ
基礎のおさらい
local override
test、障害回避、boot初期等でhosts mappingを使えるが、DNSとの不整合を残さないよう管理する。
tool選択
digはDNS dataの確認、getentはapplicationが使うNSS結果の確認に使い分ける。