如何使用域名配置 dnsmasq 进行 dhcp

如何使用域名配置 dnsmasq 进行 dhcp

我正在 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 networkifdown enp0s3ifup 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......但如果这是唯一的方法,那么没有它我也可以。

相关内容