web-dev-qa-db-ja.com

Debianの/ etc / hosts

サーバーで動作するようにPostgreSQLデータベースに接続するPerlスクリプトを取得しようとしました。このスクリプトは不可解に失敗しました。その後、localhost/etc/hostsファイル。

このマシンのファイル(現在Debian lennyを実行中)は現在次のようになっています

127.0.0.1       machinename.domain   machinename
xxx.xx.x.xxx    machinename.domain   machinename

xxx.xx.x.xxxはIPアドレスです。私の現在のホームマシン用のファイルは、少し古いインストール(現在Debian squeezeを実行)です。

127.0.0.1       machinename          localhost
127.0.1.1       machinename.domain   machinename

私の自宅のマシンはルーターの後ろにあり、直接インターネットに公開されていません。いずれにせよ、私はDSLを使用しており、静的IPアドレスを持っていません。

/etcしばらくの間(etckeeperを使用して)自分のマシンのバージョン管理下にあり、このサーバーでは、2009年12月17日にいくつかの首謀者(おそらく私自身)によって次の変更が行われたことがわかります。

-127.0.0.1      localhost
+127.0.0.1      machinename.domain  machinename

なぜこのファイルがこのように設定されているのか疑問に思っていましたが、答えは明らかではありません。いくつかの質問:

  1. なぜ 127.0.1.1?これは、Debian固有のちょっとした歴史かもしれません。私はネットで少し検索したところ、Gnomeについて曖昧なつぶやきがいくつかありましたが、内容はほとんどありませんでした。

  2. このファイルは、Debianのどこにあるテンプレートですか?

  3. 現在、このファイルの正しい/最良のフォームであると考えられていますか?

  4. 行内の名前の順序は重要ですか?私は望みません。

より一般的には、これらの2つの行がなぜそのように構成されているのかについての説明は何ですか?

今のところ、サーバーを変更すると思います/etc/hostsから

127.0.0.1       machinename.domain  machinename localhost
xxx.xx.x.xxx    machinename.domain  machinename

コメント?

5
Faheem Mitha

私のシステムでは、/var/lib/dpkg/info/netbase.postinst

create_hosts_file() {
  if [ -e /etc/hosts ]; then return 0; fi

  cat > /etc/hosts <<-EOF
        127.0.0.1       localhost
        ::1             localhost ip6-localhost ip6-loopback
        fe00::0         ip6-localnet
        ff00::0         ip6-mcastprefix
        ff02::1         ip6-allnodes
        ff02::2         ip6-allrouters

EOF

私のネットベースのバージョンは4.45です。

行の最初の名前がIPアドレスの逆ルックアップに返されることを期待しています。

3
Andy

まとめ

あなたはいつも持っているべきだった

127.0.0.1    localhost.localdomain localhost

あなたの場合、あなたは永久的なIPアドレスを持っていないので、あなたも持っていることができます

127.0.1.1    machinename.domain machinename

この行はGNOMEなどの一部のアプリケーションに必要なようですが、実際には他のアプリケーションで問題が発生する可能性があります。

システムのホスト名を解決するための提案された新しいスキーム を参照してください。


事実上、マシンには2つのホスト名があります。

localhost.localdomainは、同じマシンで実行されている2つのTCP/IP対応プロセス間のプライベート通信に使用される名前です。

machinename.domainは、マシンとマシンに接続されているマシン間の通信に使用される名前です。

常にlocalhost.localdomain127.0.0.1(およびIPv6を使用している場合は::1)を指すようにする必要があります。このように、同じマシン上の2つのTCP/IPプロセス間のすべての通信は、lo(ループバック)インターフェースを使用します。これは通常、iptablesなどのファイアウォールで許可されており、何も心配する必要はありません。ネットワークが利用可能かどうか、またはDNSが機能しているかどうか。

GNOMEなどの一部のアプリケーション 1 同じマシンと通信しているときでも、マシンのパブリック名をすべてに使用してください。これは、ネットワーク上の別のマシンで実行されている場合でも、GNOMEのある部分がGNOMEの別の部分と通信できるようにするためです。 (GNOMEのNはもともと「ネットワーク」を意味していました。)

理想的には、マシンの名前はDNSまたは他の共有データベースを使用して既知であり、他のマシンもそれを使用してマシンのアドレスを判別できるため、他のマシン上のアプリケーションがマシンと通信できます。

しかし、マシンの名前がDNSにない場合、またはDNSが機能していない場合でも、GNOMEのようなプログラムはそれ自体と対話する方法を必要とします。

これを機能させるために/etc/hostsを変更するさまざまな方法があります。

最も一般的なのは

127.0.0.1    localhost.localdomain localhost
w.x.y.z      machinename.domain machinename

ここで、w.x.y.zは、プライマリネットワークインターフェースのアドレスです。 eth0

システムが静的IPアドレスを使用し、常に接続されている場合、問題なく動作しました2

システムに動的IPアドレスがある場合、DHCPサーバーが返したものに基づいてエントリを含めるように/etc/hostsを編集するためにさまざまなスクリプトが使用されました。

ただし、システムに永続的なネットワーク接続がなかった場合、信頼できるアドレスが1つもなかったため、そのようなエントリを追加できませんでした。

それで人々は何かを始めました

127.0.0.1    localhost.localdomain localhost machinename.domain machinename

または

127.0.0.1    machinename.domain machinename localhost.localdomain localhost

これにより、TCP/IPを使用するプロセスは、マシン名を使用してIPアドレスを検索した場合でも、同じマシン上の他のプロセスと通信できます。

しかし、それは他のアプリケーションを壊しました。

たとえば、 dnsdomainname です。

サーバーがリッスンしているだけなので、同じマシン上の人しかサーバーに接続できないという問題があったことも覚えています ループバックデバイスの接続用。

プログラムはマシンの名前を取得してから、nameのアドレスを検索し、最初に見つかったアドレスを使用して、そのネットワークインターフェイスにバインドします。マシンの名前が127.0.0.1に解決された場合4 アドレス、つまりmachinename.domainで実行されていると考えられるサービス(つまり、ネットワーク全体で利用可能)は、実際には同じマシンで実行されている他のプロセスでのみ利用可能でした。

Andyが指摘するように、名前の順序は重要ではありません。 127.0.0.1のホスト名を検索しようとすると、ホストの正規名/公式名/プライマリ名として最初の名前が取得されますが、これは前方および後方に解決されるため、これがどのように発生するかはわかりませんいずれかの形式を想定している/etc/hostsを編集するための自動化ツールがない限り、問題。

しかし、私は / etc/hostsの形式 で述べたように、常に完全修飾ドメイン名(つまり、ドメイン名を含む名前)を最初に持っているべきだと思います。

1行ではなく2行を使用する別の同様の形式があります。

127.0.0.1    localhost.localdomain localhost
127.0.1.1    machinename.domain machinename

loのアドレスは実際には127.0.0.1/8であり、127ネットワーク内のすべてのアドレスがループバックデバイスであるため、これは巧妙なトリックです。

machinename.domainのエントリを変更する必要があるツールが127.0.0.1 localhost...のエントリに触れずに変更できるように、この形式が使用されたと思います。

ただし、それでもmachinename.domainloにマッピングされるため、前述の問題が発生する可能性があります。

また、VM=でFedora 15を起動し、Gnomeデスクトップにログインしましたが、TCP/IP接続を確認できませんでした。すべてUNIXソケットを使用しているようです。 127.0.1.1エントリは不要になりました。


脚注

  1. これはかつてそうでした。私のFedora 15テストマシンでは、TCP/IPではなくUNIXソケットを使用しているようです。
  2. ネットワークが起動する前のシステム起動中を除きます。
  3. 「聞く」というよりはむしろ「結びつく」。
  4. または、127.x.x.xアドレス。
8
Mikel