Networking

如何正確配置 /etc/hosts

  • August 28, 2020

我正在學習網路,在家裡我有兩台物理機器和一堆用於測試我的應用程序的虛擬機,每台機器都有不同的主機名,我在每個 /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

所有行都指向同一台機器我知道主要區別在於程序如何連接到它們兩個使用環回設備,另一個使用網卡。我的問題是我應該擁有所有這些台詞嗎?或者我應該有哪些線路?它們各自有什麼用?

我正在閱讀這篇文章,但它沒有幫助,我更加困惑

問題 #1

我想知道家庭IP地址(127.0.0.1)和/etc/hosts中網路給出的真實IP地址有什麼區別

127.0.0.1 的 2 個關鍵特性:

  • 它不能在 Internet 上的電腦之外路由。
  • 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 其中幾個來指向我們自己。讓我們ping127.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

**注意:**我們可以看到所有這些都可以通過我們的環回介面“ping”回我們自己。

使用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 naruto

但我永遠不會將相同的名稱分配給 2 個單獨的行。這永遠不會起作用,因為/etc/hosts文件只會響應第一個條目,而永遠無法到達第二個條目。

對於一次性工作,/etc/hosts本地工作很容易使用。但是,如果您希望在您的網路上可以訪問任何名稱到 IP 的映射,那麼最好對這些使用 DNS,並放棄使用/etc/hosts本地 IP/名稱解析以外的任何內容。

引用自:https://unix.stackexchange.com/questions/460722