我正在 VirtualBox 5.0.26(带 Guest Additions)中试用虚拟网络。我使用 dnsmasq 进行 dhcp 和 dns 操作,所有机器似乎都已正确分配了网络信息,但是,我只能使用主机名 ping 网络中的机器,而不能 ping 其完全合格域名,我不知道为什么。
我的 VirtualBox 配置了 2 个网络:
NAT网络[10.0.2.0/24],支持DHCP
仅主机网络适配器 [192.168.62.1 / 255.255.255.0],无 DHCP
在我的 Virtual Box 网络中,我有几个虚拟机器:2 个带有最小安装 + net-tools、bind-utils 和 dnsmasq 的 Centos 机器;以及一个 Ubuntu 机器:
Centos1:
- Minimal Centos 7 install + net-tools, bind-utils, dnsmasq
- /etc/hostname =>
centos1
- /etc/hosts =>
127.0.0.1 centos1.mytestnetwork.lab centos1
- /etc/resolv.conf
# Generated by NetworkManager
search home.local
nameserver 10.1.10.10 #IP of legit DNS server
nameserver 10.1.10.11 #IP of legit DNS server
nameserver 192.168.62.10
# NOTE: the lic resolver may not support more than 3 nameservers
# The nameservers listed below may not be recognized
nameserver: 127.0.0.1
- /etc/resolv.conf.dnsmasq
127.0.0.1
- Primary NIC [enp0s3] connected to NAT Network configured for dhcp
- Secondary NIC [enp0s8] connected to Host Only Network with static IP 192.168.162.10
Centos2:
- Minimal Centos 7 install + net-tools, bind-utils
- /etc/hostname =>
centos2
- /etc/hosts =>
127.0.0.1 localhost localhost.localdomain
::1 localhost localhost.localdomain
- Primary NIC [enp0s3] connected to NAT Network configured for dhcp
- Secondary NIC [enp0s8] connected to Host Only Network configured for dhcp.
Ubuntu1:
- Ubuntu 14.04 LTS default install with default configuration
在Centos1上,我的文件内容/etc/dnsmasq.conf
如下:
resolv-file=/etc/resolve.conf.dnsmasq
bogus-priv
local=/mytestnetwork.lab/
domain=mytestnetwork.lab
interface=enp0s8
no-hosts
addn-hosts=/etc/hosts.dnsmasq
expand-hosts
dhcp-range=192.168.62.50,192.168.62.250,255.255.255.0,24h
两台机器启动时似乎都从 dnsmasq 正确分配了它们的 IP 和域名,因此:
Centos2.MyTestNetwork.lab [192.168.162.51]
Ubuntu1.MyTestNetwork.lab [192.168.162.52]
/var/lib/dnsmasq/dnsmasq.leases
正如我所料,两台机器均列在文件中。
1471010530 00:00:27:d4:ce:8d 192.168.62.51 centos2 *
1471010650 00:00:27:6d:12:95 192.168.62.52 ubuntu1 *
检查 Centos2 和 Ubuntu1 的/etc/resolv.conf
文件,我看到 Centos1 的 IP 地址列在两者的名称服务器列表中。
如果我仅使用主机名从任一机器执行 nslookup,然后跟踪,/sys/log/messages
我会看到 dns 请求进入 dnsmasq,nslookup 会列出正确的 DNS 服务器,IP 地址已正确解析。我可以使用主机名进行 ping。
;; Got SERVFAIL reply from 10.1.10.11, trying next server
;; Got SERVFAIL reply from 10.1.10.10, trying next server
Server: 192.168.62.10
Address: 192.168.62.10#53
Name: ubuntu1
Address: 192.168.62.52
但是,如果我使用 fqdn 执行 nslookup,则不会有任何 dns 请求进入 dnsmasq,并且无法 ping 机器。
Server: 10.1.10.11
Address: 10.1.10.11#53
** server can't find ubuntu1.mytestnetwork.lab: NXDOMAIN
我很困惑为什么它在这种情况下给出一个 NXDOMAIN,并且在找到 IP 之前不尝试下一个服务器,而不是在第一个障碍时放弃。
答案1
我不知道这是否是这个问题的正确答案,但这个解决方案似乎解决了我的问题,也许有人可以评论是否有更好或更正确的解决方案:
在 Centos1 上,通过编辑将主网卡(enp0s3)从 DHCP 更改为静态 IP 配置/etc/sysconfig/network-scripts/ifcfg-enp0s3
BOOTPROTO=none
ONBOOT="yes"
IPADDR=10.0.2.24
NETMASK=255.255.255.0
GATEWAY=10.0.2.1
DNS1=127.0.0.1
DNS2=10.1.10.11
DNS3=10.1.10.10
然后sudo systemctl restart network
或ifdown enp0s3
和ifup enp0s3
这反过来又改变了我的/etc/resolv.conf
# Generated by NetworkManager
nameserver 127.0.0.1
nameserver 10.1.10.11
nameserver 10.1.10.10
现在我可以删除/etc/resolv.conf.dnsmasq
并注释掉对它的引用/etc/dnsmasq.conf
我现在可以仅通过 fqdn 和主机名进行 ping 操作。
理想情况下,我希望我的主网卡是 DHCP......但如果这是唯一的方法,那么没有它我也可以。