尽管 nslookup 和 dig 返回了正确的记录,但客户机无法通过名称访问 KVM 主机服务器

尽管 nslookup 和 dig 返回了正确的记录,但客户机无法通过名称访问 KVM 主机服务器

所以我有一个 KVM 主机,它还运行一个带有一些 yum 存储库的 apache 服务器。

VM 客户机连接到默认虚拟网络,该网络配置为在 virbr0(192.168.12.1)上提供 DHCP 并使用 NAT 转发。

访客可以通过 IP 地址成功访问主机上的 yum 存储库,因此可以curl 192.168.122.1/repo1毫无问题地返回内容。但我希望访客能够通过名称而不是 IP 地址访问主机上的 Web 服务器。

我将所需的名称记录添加到主机的/etc/hosts文件中,并且 libvirt 的 dnsmasq 服务似乎正在为客户机正确地提供该服务,因为 nslookup 和 dig 成功解析了客户机上的名称:

[root@localhost ~]# nslookup repo
Server:     192.168.122.1
Address:    192.168.122.1#53

Name:   repo
Address: 192.168.122.1

[root@localhost ~]# dig repo

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6 <<>> repo
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55938
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;repo.              IN  A

;; ANSWER SECTION:
repo.           0   IN  A   192.168.122.1

;; Query time: 0 msec
;; SERVER: 192.168.122.1#53(192.168.122.1)
;; WHEN: Tue Sep 17 02:10:46 2013
;; MSG SIZE  rcvd: 38

但是 curl/ping/etc 仍然失败:

[root@localhost ~]# curl repo
curl: (6) Couldn't resolve host 'repo'

通过 IP 地址发出的请求有效:

[root@localhost ~]# curl 192.168.122.1
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
 <head>
  <title>Index of /</title>
 [...]

与 ping 相同:

[root@localhost ~]# ping repo
ping: unknown host repo
[root@localhost ~]# ping 192.168.122.1
PING 192.168.122.1 (192.168.122.1) 56(84) bytes of data.
64 bytes from 192.168.122.1: icmp_seq=1 ttl=64 time=0.110 ms
64 bytes from 192.168.122.1: icmp_seq=2 ttl=64 time=0.146 ms
64 bytes from 192.168.122.1: icmp_seq=3 ttl=64 time=0.191 ms
^C
--- 192.168.122.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2298ms
rtt min/avg/max/mdev = 0.110/0.149/0.191/0.033 ms

我尝试添加repo 192.168.122.1来宾/etc/hosts文件,但仍然没有成功。还尝试使用以下两种方法更改来宾文件/etc/nsswitch.conf

hosts:      files dns

hosts:      dns files

我已经阅读了相关的 libvirt 文档,但不确定在哪里可以了解更多信息并继续前进。

答案1

在来宾的 /etc/hosts 中添加以下内容是否有效:192.168.122.1 repo?(你说你添加了repo 192.168.122.1

/etc/resolv.conf你对客人有什么看法?

你还应该/etc/nsswitch.conf离开hosts: files dns

答案2

将其添加到主机的 /etc/hosts 中,而不是客户机的。

为了使其通过 DNS 工作,请设置域名和主机名,如 host1.internal.domain.com(domain = internal.domain.com)。

您必须相应地更改/etc/sysconfig/network( NISDOMAIN=)、/etc/resolv.conf( searchdomain)、 /etc/sysconfig/network-scripts/ifcfg-xxx( DOMAIN=HOSTNAME=(FQDN))、/etc/hostname(FQDN)。

答案3

您无需手动更改 DNS 客户端配置,而应使用以下寻址方式libvirt 网络管理客户操作系统和主机的 FQDN。

执行命令并在命名上下文中的virsh net-edit default元素内添加以下节:<network>

<domain name="example.com"></domain>
<dns>
  <forwarder addr="8.8.8.8"/>
  <host ip='192.168.122.1'>
    <hostname>repo</hostname>
  </host>
</dns>

相关内容