Ubuntu

/usr/bin/host 即使在重新啟動後也不接受對 /etc/hosts 的更改

  • November 18, 2013

我有一台 Ubuntu Server 12.04 ( amd64) 機器,當我更改/etc/hosts時,即使重新啟動,更改也不會被拾取。我/usr/bin/host用來測試,但其他程序似乎也沒有。

這是一個伺服器,nscddnsmasq沒有安裝。此外,該文件/etc/nsswitch.conf包含以下行:

hosts:          files dns

所以我希望它能夠工作。我還檢查mtime了文件是否隨編輯而更改,並嘗試執行service networking restart(不顧一切)以及resolvconf -u.

所有命令在root需要的地方執行。該機器已手動配置網路,/etc/network/interfaces而不是通過網路管理器(也未安裝)。

基本上我想要實現的是可以操縱一些主機的IP。原因是在我們的網路中,我得到了一個我沒有路由的 IP,但我可以通過 HTTPS 將外部 IP 用於該服務。

我錯過了什麼?

**注意:**本地沒有執行 DNS 伺服器,並且 中的nameserver/etc/resolv.conf(以及 中的相應行interfaces)指向給我錯誤 IP 的 DNS 伺服器。

**另請注意:**我在網上搜尋並閱讀了“類似問題”,但我的案例似乎沒有被涵蓋。

/etc/host.conf是:

# The "order" line is only used by old versions of the C library.
order hosts,bind
multi on

host 命令不檢查 hosts 文件。從手冊頁:

host is a simple utility for performing DNS lookups.

如果您想在尊重主機文件的同時測試查找,請使用 ping 或 getent。

$ tail -1 /etc/hosts
127.0.0.1   google.com
$ ping -c1 google.com | head -1
PING google.com (127.0.0.1) 56(84) bytes of data.
$ getent ahosts google.com
127.0.0.1       STREAM google.com
127.0.0.1       DGRAM  
127.0.0.1       RAW    

host實用程序用於 DNS 查找。它不關心主機文件或解析主機名的非 DNS 方法。如果您想查看您的系統在正常情況下如何解析主機名(考慮到 nsswitch.conf),您可以使用getent. 該host實用程序應保留用於 DNS 測試。這是一個例子:

$ host foobar.com
foobar.com has address 69.89.31.56
foobar.com mail is handled by 0 foobar.com.
$ getent hosts foobar.com
10.188.14.16    foobar.com

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