/ etc / hostsのホスト名とIPアドレスのマッピング


14

私のLinuxマシンhostnameではmongodb、実行するとが表示されますが、実行するhost mongodbと次のように表示されます:

mongodb@mongodb:/var/hadoop/hadoop-1.2.1/bin$ host mongodb
Host mongodb not found: 2(SERVFAIL)

私の/etc/hostsファイル:

192.168.10.10   mongodb
192.168.10.10   localhost
127.0.0.1       localhost
#127.0.0.1 localhost
# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
  • 私の最初の質問は/etc/hosts、IPからホスト名へのマッピングなので、このマシンがホスト名mongodbをIP 192.168.10.10に解決できないのはなぜですか?代わりに、を実行host localhostすると解決でき、次のように表示されます。

    localhost has address 127.0.0.1
    
  • 私の別の質問:/etc/hostsファイルによると、ホスト名localhostはループバックIPアドレス127.0.0.1ではなく192.168.10.10に解決されているはずです。誰も私にこれを説明できますか?

回答:


30

host(とnslookup)ユーティリティを明示的クエリDNSサーバ、および相談していない/etc/hostsデフォルトのシステム構成でファイルを。あなたがいた場合traceroute、またはpingそのアドレス、あなたはそれが正しく解決見るであろう。

あなたがいない変更したいlocalhost127.0.0.1以外にマップするために、これは多くのことに奇妙で微妙な影響を持つことができます。私が考えている/etc/hostsことが書かれている順に解析され、そしてあなたが持っているので:

192.168.10.10   localhost
127.0.0.1       localhost

..2番目のエントリが最初のエントリをオーバーライドしている可能性があります。


5
/etc/hosts 持っていない 任意の直接のDNSサーバーを照会するとき、何である、DNSの解決に効果がhostありません。ただし、多くのシステムツールおよびユーティリティlocalhost定義を使用して、それをループバックアドレスと見なし、システム名解決(/etc/hostsDNSを照会する前に確認します)を使用して、厳密にDNSに移動するのではなく、常に存在するとは限らない名前を解決します。
DopeGhoti

1
また、/etc/hostsファイルに関する問題に関する経験を共有することもできますlocalhost。過去に、我々は挿入するいくつかのソフトウェアを使用していました127.0.0.2 localhost hostsファイルには、最後のものということでlocalhostエントリーすることが有効であるものであることを引き起こして、ソフトウェアとライセンスの問題のすべての種類を引き起こしました。そのため127.0.0.1 localhost/etc/hostsファイルの最初のエントリとして、localhostそのファイルに他のエントリがないことを確認することをお勧めします。また、ipv6なども検証します。
ron

5
多少つまらないように、両方ともnsルックアップを行います。 といえば、nsswitch.confでホストルックアップを構成している場合は実行します。
symcbean

1
@symcbean-あなたの言うことは正しい。私はそのことをcall慢とは呼びません。
DarkHeart

2
これの顕著な非自明な例外は/etc/resolv.conf、デバイス上で直接実行されているDNSサーバー(キャッシングなどdnsmasq)を指し、/etc/hosts外部サーバーに照会する前にローカルサーバーに問い合わせている場合です。その後、間接的に、次のようなコマンドhostが影響を受けます/etc/hosts-これは一般的な設定ではありませんが、デバイスが同梱されているのを見たことがあり、このようなシステムを使用している人の経験は、誰かがこの独特な設定を知らない場合、この答えと矛盾するようです。
mtraceur

9

DopeGhotiの回答に加えて、/etc/hosts優先順位を含めて解決をテストするには、getent hosts <some_hostname>コマンドを使用できます。


-3

代わりにTABを使用して、IPとホスト名の間に複数のスペースを含む/ etc / hostsで同様の問題が発生しました。TABに変更した後、ホスト名はpingで解決できます。

127.0.0.1        test.local
         ^^^^^^^^ → Should be a TAB not multiple spaces.

/superuser//a/938366/467479も参照してください


5
これは私を驚かせます。のマンページにhostsは次のように書かFields of the entry are separated by any number of blanks and/or tab characters. れています:おそらくあなたの場合、IPとホスト名の間に無関係な印刷不可能な文字がありましたか?
-dr01

絶対に印刷できない文字はありませんでした。ここに投稿する前にこれをチェックしました;)
トーマスローリア

タブ文字がありません。SLES11.xを実行し、DVDからクリーンインストールした後、/ etc / hostsファイルの127.0.0.1後に7つのスペースが続き、その後にが続きますlocalhost。だから私は特に複数のスペース文字に問題を固定し、解決策としてタブ文字を使用することを結論付けるのを少しためらいます。
-ron

タブとスペースを言及するのを忘れたのは、Linuxの特定のバージョンまたはディストリビューションで発生する可能性がありますが、これはバグかもしれません。このような場合であれば、あなたはただでそれをしない...それが解決さかどうかを確認するためにそれらにPINGを行い、その後、タブまたはスペースのいずれかで、様々なIPアドレス/ホスト名のエントリを作成することができるはずlocalhost
ロン

残念ながら、どのマシンで問題が発生したか(したがって、ディストリビューション)を覚えていません...- virtualboximages.com/の Ubuntu 15.05にあったと思います。
トーマス・ローリア
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.