web-dev-qa-db-ja.com

/ etc / hostsを適切に設定する方法

私はネットワーキングについて学んでいます。自宅には2台の物理マシンがあり、アプリケーションのテストに使用する多数のVMがあります。各マシンのホスト名は異なり、各/ etc/hostsファイルに手動でマッピングします

ホームIPアドレス(127.0.0.1)と/ etc/hostsのネットワークによって与えられた実際のIPアドレスの違いは何ですか?

例えば

私のIPアドレスが192.168.2.20で、ホストの名前がnarutoで、/ etc/hostsが次のようになっているとします。

127.0.0.1       localhost
192.168.2.20    naruto
127.0.0.1       naruto

すべての行が同じマシンを指しています。主な違いは、プログラムがそれぞれに接続する方法が2つはループバックデバイスを使用しており、もう1つはNICを使用していることです。私の質問は、これらのすべての行があるべきですか?または私はどんなラインを持っているべきですか?それぞれの用途は何ですか?

私はこれを読んでいました 投稿 しかしそれは助けにはならず、私はもっと混乱しました

2
juanp_1982

質問1

ホームIPアドレス(127.0.0.1)と/ etc/hostsのネットワークによって与えられた実際のIPアドレスの違いは何ですか?

127.0.0.1の2つの主要な特徴:

  • それはあなたのコンピュータの外ではインターネット上でルーティングできません
  • IPアドレス127.0.0.1は、システム上のこのインターフェースに関連付けられているIPアドレスのブロックの一部です。

たとえば、ループバックインターフェイスloを見てください。

$ ip a l lo
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope Host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope Host
       valid_lft forever preferred_lft forever

IPのブロックは、次の行によって設計されています。

    inet 127.0.0.1/8 scope Host lo

この表記の/ 8は、ここに示されている32ビットの8ビットがネットワークのアドレスであることを意味し、残りのビット(32-8 = 24)は、このコンピューター内の任意のアドレスを指定するためのものです。

これが範囲であり、それらのいくつかをpingしようとすることで、すべてが自分自身を指していることを確信できます。 ping 127.0.0.1、127.0.0.2、および127.0.0.3を見てみましょう。

$ ping -c2 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.029 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.055 ms

$ ping -c2 127.0.0.2
PING 127.0.0.2 (127.0.0.2) 56(84) bytes of data.
64 bytes from 127.0.0.2: icmp_seq=1 ttl=64 time=0.029 ms
64 bytes from 127.0.0.2: icmp_seq=2 ttl=64 time=0.052 ms

$ ping -c2 127.0.0.3
PING 127.0.0.3 (127.0.0.3) 56(84) bytes of data.
64 bytes from 127.0.0.3: icmp_seq=1 ttl=64 time=0.030 ms
64 bytes from 127.0.0.3: icmp_seq=2 ttl=64 time=0.075 ms

注:これらはすべて、ループバックインターフェイスを介して自分自身にピギー可能であることがわかります。

tracerouteを使用しても同じことがわかります。

$ traceroute -n 127.0.0.1
traceroute to 127.0.0.1 (127.0.0.1), 30 Hops max, 60 byte packets
 1  127.0.0.1  0.032 ms  0.041 ms  0.010 ms

$ traceroute -n 127.0.0.2
traceroute to 127.0.0.2 (127.0.0.2), 30 Hops max, 60 byte packets
 1  127.0.0.2  0.033 ms  0.009 ms  0.008 ms

$ traceroute -n 127.0.0.3
traceroute to 127.0.0.3 (127.0.0.3), 30 Hops max, 60 byte packets
 1  127.0.0.3  0.034 ms  0.010 ms  0.008 ms

質問2

私の質問は、これらすべての行があるべきですか?または私はどんなラインを持っているべきですか?それぞれの用途は何ですか?

私が推奨するのは、システムが自動的に割り当てたものを除いて、127.0.0.1に名前を割り当てないことです。通常、これらのタイプのエントリは/etc/hostsに表示されます。

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

システムのホスト名に追加のlocalhostタイプのIPを割り当てる場合は、代わりに127.0.0.2を使用します。デフォルトでセットアップされた127.0.0.1のままにします。

さらに、ホストに割り当てられている実際のIPアドレスについては、/etc/hostsでそのように割り当てるか、DNSを使用します。

192.168.2.20    naruto.mydom.com naurto

しかし、同じ名前を2つの別々の行に割り当てることはありません。 /etc/hostsファイルは最初のエントリでのみ応答し、2番目のエントリには到達できないため、これは機能しません。

単発の仕事の場合、/etc/hostsを使用すると、ローカルの仕事が簡単になります。ただし、名前からIPへのマッピングのいずれかがネットワークでアクセス可能であると予想される場合は、それらにDNSを使用し、ローカルIP /名前解決以外の場合は/etc/hostsを使用しないことをお勧めします。

1
slm

私がするかもしれないことの1つ、および数年前にディストリビューションがそれを始めたのは、ローカルホストにのみ127.0.0.1を使用し、ホスト名に127.0.1.1を使用することです

そう...

/etc/hostname-

naruto

/etc/hosts-

127.0.0.1 localhost
127.0.1.1 naruto

そして、それはそれです。 (必要に応じてIPv6の要素を追加します)/ etc/hostsに非ループバックIPを配置するのは、なんらかの理由でDNSエントリを取得できない場合、または通常DNSにあるものをリダイレクトしたい場合のみです。

1
ivanivan