我安装了全新的 CentOS 7。在安装过程中,我提供了 centa.home.local 作为主机名。
现在,其中一款软件需要查看“host -v centa”输出来定位服务器上的服务器 IP 地址。不幸的是它找不到IP地址。
[user1@centa ~]$ ifconfig | grep inet
inet 192.168.101.128 netmask 255.255.255.0 broadcast 192.168.101.255
inet6 fe80::20c:29ff:fe00:f049 prefixlen 64 scopeid 0x20<link>
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
[user1@centa ~]$ hostname
centa.home.local
[user1@centa ~]$ hostname -d
home.local
[user1@centa ~]$ hostnamectl status
Static hostname: centa.home.local
Icon name: computer-vm
Chassis: vm
Machine ID: b2d53d8cc49e486f980d0f8461c415e2
Boot ID: e2dbffd536434cc4ba530a17e8b186d6
Virtualization: vmware
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-514.el7.x86_64
Architecture: x86-64
[user1@centa ~]$ cat /etc/hosts
127.0.0.1 localhost localhost.localdomain
::1 localhost localhost.localdomain
192.168.101.128 centa.home.local centa
[user1@centa ~]$ cat /etc/resolv.conf
# Generated by NetworkManager
search localdomain home.local
nameserver 192.168.101.2
[user1@centa ~]$ host -v centa
Trying "centa.localdomain"
Trying "centa.home.local"
Trying "centa"
Host centa not found: 3(NXDOMAIN)
Received 98 bytes from 192.168.101.2#53 in 136 ms
[user1@centa ~]$
答案1
由于该host
实用程序正在执行 DNS 查找,因此它不使用/etc/hosts
.这意味着要成功,主机必须位于某个 DNS 服务器中。
由于问题就在这里,我假设将此 DNS 记录添加到您的 DNS 服务器(192.168.101.2 处的服务器)不是一种选择。幸运的是,您实际上可以相当容易地解决这个问题,因为您使用的是 NetworkManager(如 中的注释行所示/etc/resolv.conf
)。
解决方案是启用并配置 dnsmasq。 dnsmasq 是一个在本地主机上运行的 DNS 转发器。它可以执行简单的任务,例如递归查找和缓存结果。它还可以执行诸如提供来自/etc/hosts
. NetworkManager 具有用于管理 dnsmasq 的内置功能。所以使用起来非常简单。
配置
配置部分是告诉 dnsmasq 提供来自 的记录/etc/hosts
,因为 NetworkManager 用于 dnsmasq 的默认配置不启用此功能。
/etc/NetworkManager/dnsmasq.d/hosts.conf
创建包含以下内容的文件:
addn-hosts=/etc/hosts
启用
通过将参数添加到的部分dns = dnsmasq
来完成启用。例如:[main]
/etc/NetworkManager/NetworkManager.conf
[main]
dns = dnsmasq
执行此操作后,重新启动 NetworkManager(通过systemctl restart NetworkManager.service
)。
用法
您现在应该注意到/etc/resolv.conf
只有一个nameserver
条目指向127.0.0.1
.任何用于查找名称服务器的工具/etc/resolv.conf
现在都应该最终命中 dnsmasq,并接收在/etc/hosts
.如果 中不存在该记录/etc/hosts
,则查找将转发到您的上游 DNS 服务器 (192.168.101.2)。