如何正確配置 /etc/hosts
我正在學習網路,在家裡我有兩台物理機器和一堆用於測試我的應用程序的虛擬機,每台機器都有不同的主機名,我在每個 /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 其中幾個來指向我們自己。讓我們
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
**注意:**我們可以看到所有這些都可以通過我們的環回介面“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/名稱解析以外的任何內容。