ホスト名が/ etc/hostsにあるのにDNSから検索されるという問題があります。
以下を構成しました:
/etc/Host.conf:
order hosts,bind
/etc/nsswitch.conf:
hosts: files dns
/etc/resolv.conf:
nameserver <nameserver one>
nameserver <nameserver two>
ホスト上で実行されているアプリケーションは、いくつかの内部および外部API要求を行います。
Tcpdumpから、/ etc/hostsにリストされている内部サービスのホスト名の一部に対するDNSクエリが表示されています。私が使用しているtcpdumpコマンドは次のとおりです。
tcpdump -tqAlU -s0 port 53 and Host <nameserver one>
ダンプでは、次のようなリクエストが表示されます。
IP 10.0.80.11.domain > app004-private.51308: UDP, length 102
E...I2..>...
.P.
.........I.1E...:...Q.. localhost............ [email protected]..
IP app004-private.33828 > 10.0.80.11.domain: UDP, length 39
E..Ca.@[email protected].
.2.
.P..$.5./..3e.......... localhost.site.com.....
IP 10.0.80.11.domain > app004-private.33828: UDP, length 96
E..|....>.T;
.P.
.2..5.$.hU.3e.......... localhost.site.com................-.ns10.dnshost.com...dns.8w.............u.....
Localhost.site.comだけでなく、localhostもDNSに送信されていることに注意してください。 localhostの/ etc/hostsエントリは次のとおりです。
127.0.0.1 localhost.localdomain localhost
そして
IP 10.0.80.11.domain > app004-private.51664: UDP, length 93
E..yx...>.m.
.P.
.2..5...e.<N2...........api.site.com................-.ns10.dnshost...dns.5w.............u.....
IP app004-private.51664 > 10.0.80.11.domain: UDP, length 48
E..L`.@[email protected].
.2.
.P....5.8..n............api.site.com.site.com.....
IP 10.0.80.11.domain > app004-private.48878: UDP, length 76
E..h&e..>..w
.P.
.2..5...TQ..............11.80.0.10.in-addr.arpa.............Q............p.... . :...Q.
IP 10.0.80.11.domain > app004-private.51664: UDP, length 105
E...VX..>..g
.P.
.2..5...qJ.n............api.site.com.site.com................-.ns10.dnshost.'.dns.Aw.............u.....
Api.site.comは/ etc/hostsにあります。 getentを実行してapi.site.comをクエリすると、次が返されます。
$ getent hosts api.site.com
10.36.176.114 api001-private api001-private.site.com api001 api.site.com api
私は困惑しています。最初に/ etc/hosts then DNSを使用するように、すべてが正しく(私の知る限り)構成されているようです。 /etc/nsswitch.confおよび/etc/Host.confが尊重されていない理由に関する洞察はありますか?
システムで実行されているメインアプリケーションはhttp(Apache 2.2.15およびPHP 5.3.8 with curl 7.30.0)です。OSは、カーネル2.6.18-238.9.1で実行されているCentos 5.6です。 .el5およびglibc 2.5-58.el5_6.3。
前もって感謝します!
Ipv6を無効にすることでこれを解決できました。以下を/etc/modprobe.confに追加して再起動することにより、ipv6を無効にしました。
alias net-pf-10 off
alias ipv6 off
options ipv6 disable=1
再起動後、/ etc/hostsにリストされているホストのDNSルックアップが表示されなくなります。
なぜこれが問題を解決するのか正確にはわかりません。
OS-apiを使用して名前を照会しない多くのアプリケーションがあります。代わりに、明示的なDNSクエリを実行します。
それが起こった場合-彼らはリゾルバーライブラリを経由しません。
Linuxでは、コマンドラインでも同じことができます。
Host YOURHOST
はDNSを解決しようとします-何があっても。gethostip YOURHOST
は、定義されたリゾルバー設定を構成された順序で使用します。あなたのアプリケーションは、独自の名前解決機能の複雑さを持つcurlライブラリを使用しているようです。たとえば、次のように表示します。