原文链接
参考链接
参考链接
一提起搭建DNS服务器,你可能会想到Bind这些Linux下的DNS工具,就像 Oracle Linux下内网DNS服务器的配置 里的那样,配置Bind,编写正解文件,再编写反解文件。步骤比较繁琐,尤其是正解、反解文件的格式很反人类,容易出错。
其实,除了Bind这种比较复杂的DNS服务之外,Linux系统中还提供了一种更轻量级的DNS服务,也就是本文的主角
dnsmasq。它比较适合本地的小型网络,尤其是在虚拟、测试环境中为各个虚拟机提供DNS和DHCP服务。
在macOS中,通过
homebrew安装,也可以使用dnsmasq。本文的目的就是将macOS作为一个虚拟局域网(192.168.78.)的DNS服务器(本机的IP地址为192.168.78.1),为本机以及各个虚拟主机提供局域网的DNS服务。接下来就是简单的配置步骤。安装dnsmasq
如果你的macOS中没有安装homebrew的话,用下面的命令1:
|
|
之后就可以用
homebrew进行安装了:
|
|
配置dnsmasq
上面的安装提示信息中说的已经很明白了,需要把一个示例用的配置文件复制到
/usr/local/etc/dnsmasq.conf来进行配置。什么?没注意看上面的信息,好吧,用下面的命令再看一次:
|
|
照做就行:
|
|
修改配置文件
/usr/local/etc/dnsmasq.conf。刚才拷贝过来的文件中,默认所有的选项都是注释掉的,只需要修改下面两个选项:
|
|
解释一下:
strict-order表示在解析一个域名时,dnsmasq会严格按照/etc/resolv.conf文件中定义的DNS服务器的顺序从上到下进行 DNS 解析,直到第一个解析成功为止。/etc/resolv.conf是macOS默认的DNS配置文件,会自动生成。listen-address表示DNS服务会绑定到哪个地址上。如果只是本机使用,那么只需要指定127.0.0.1就可。如果还需要让局域网中的其他主机也能使用这个DNS服务器,还需要加上本机在局域网中的地址,即192.168.78.1,127.0.0.1。换句话说,在192.168.78.这个网段的所有主机都可以指定192.168.78.1为自己的DNS服务器地址。
到此为止,dnsmasq的配置文件就编辑完了。
那么问题来了:局域网中主机地址与域名的对应关系在哪里配置呢?
答:在
/etc/hosts文件中进行配置。
原来,在默认情况下,dnsmasq在解析一个域名时,会首先查找
/etc/hosts文件中的定义,如果找不到的话,再去/etc/resolv.conf中去找。当然,这个动作也是可以配置的,在配置文件中说明如下:
|
|
配置本地局域网中的域名和主机映射
这里要按照实际的需要来定义,本文环境中的
/etc/hosts文件内容如下:
|
|
启动dnsmasq服务
按照
brew info dnsmasq的提示,输入下面命令就可以启动服务,并且会开机自动启动:
|
|
上面的命令会将
/usr/local/opt/dnsmasq/homebrew.mxcl.dnsmasq.plist自动复制为/Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist,这就是dnsmasq服务描述文件。这里多说几句,macOS用launchd(类似于Linux的systemd,或者init)来启动后台服务,LaunchDaemon会在开机时自动启动。启动时读入的就是这些”.plist”文件(Property List File),要关闭和重启服务的话,可以使用下面的命令:
|
|
测试
先看看外部域名能不能正常解析到:
|
|
没有问题,再看看本地局域网域名的解析情况如何(这一步最好到从其他主机上进行测试,本机测试意义不大,因为
/etc/hosts总是会解析成功的):
|
|
总结
一共五条命令即可搞定:
|
|
其实,关于dnsmasq网上有一大堆的教程,本文只用了最简单的步骤,使用dnsmasq的默认配置,保证在最短的时间内让DNS服务器跑起来。如果你感兴趣的话,可以仔细研究一下dnsmasq的配置文件,注释写的很详细,可以尝试配置一下DHCP服务。
清除DNS缓存
修改本地hosts后,因为DNS有缓存策略,所以一般还需要再强制刷新下DNS缓存才行,这里要注意,随着OSX版本的不同,这个命令也是有所不同,这里只针对10.10.4及以后的版本而言:
sudo killall -HUP mDNSResponder
评论
发表评论