很多web开发者都非常熟悉修改/etc/hosts文件来将域名如coolsite.com转发到127.0.0.1来实现本地开发站点用域名访问,包括一些集成环境如 MAMP PRO 也是利用了这一特性,但这也有很多不便的地方,如:

  1. 需要管理员权限才能修改hosts文件
  2. 每次新建一个项目都要重新编辑hosts文件
  3. 不支持本地泛域名解析

我们理想的状态是自己定义一个域名如mysite.dev的域名,将其指向到127.0.0.1本地主机,实现用自定义域名访问本地开发地址。建议使用.dev后缀的域名做本地开发,因为在真实的互联网中没有.dev后缀的域名,这样就不会造成真实的域名无法访问的问题了。

DNSmasq

DNSmasq是一个小巧且方便地用于配置DNS和DHCP的工具,适用于小型网络,它提供了DNS功能和可选择的DHCP功能。它服务那些只在本地适用的域名,这些域名是不会在全球的DNS服务器中出现的。DHCP服务器和DNS服务器结合,并且允许DHCP分配的地址能在DNS中正常解析,而这些DHCP分配的地址和相关命令可以配置到每台主机中,也可以配置到一台核心设备中(比如路由器),DNSmasq支持静态和动态两种DHCP配置方式。

使用本地dns服务器DNSmasq大致需要如下及步骤:

  1. 在OS X 上安装DNSmasq。
  2. 配置DNSmasq,使所有.dev后缀的域名指向到127.0.0.1上。
  3. 配置Mac OS X的系统设置项,使首选dns地址改为DNSmasq服务的IP(本地为127.0.0.1)。

一、安装DNSmasq

和很多mac软件一样利用Homebrew来安装DNSmasq会非常方便,如果还未安装Homebrew,请先安装它。
请打开终端(应用程序>实用工具),并运行

# 更新 homebrew
brew up
# 安装 dnsmasq
brew install dnsmasq

复制默认配置文件到指定目录

# 复制默认配置文件到/usr/local/etc/dnsmasq.conf
cp $(brew list dnsmasq | grep /dnsmasq.conf.example$) /usr/local/etc/dnsmasq.conf
# Copy the daemon configuration file into place.
sudo cp $(brew list dnsmasq | grep /homebrew.mxcl.dnsmasq.plist$) /Library/LaunchDaemons/
# Start Dnsmasq automatically.
sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist

二、配置DNSmasq

用编辑器打开上一步复制出来的配置文件/usr/local/etc/dnsmasq.conf,将要解析的dns配置写进去。
.dev后缀的域名解析到127.0.0.1

address=/.dev/127.0.0.1

接下来需要重启DNSmasq服务,使当前配置生效。

sudo launchctl stop homebrew.mxcl.dnsmasq
sudo launchctl start homebrew.mxcl.dnsmasq

dig 命令检测当前dns配置是否生效,如任意.dev后缀的域名。

dig testing.testing.one.two.three.dev @127.0.0.1

你会得到如下的结果,说明配置OK,

;; ANSWER SECTION:
testing.testing.one.two.three.dev. 0 IN	A	127.0.0.1

三、配置Mac系统的网络的默认DNS改为DNSmasq服务的地址

现在,你可以通过把Mac系统的DNS改为127.0.0.1来使用dnsmasq。同局域网的用户也可以修改DNS到此台Mac的IP即可。前提是要把此台Mac的局域网IP写到listen-address里。
Snip20160210_4

补充:

配置完成以后需要删除dns缓存操作:

在 OS X v10.10.4 或更高版本中,请使用以下“终端”命令来还原 DNS 缓存设置:

sudo killall -HUP mDNSResponder

在 OS X v10.10 至 v10.10.3 中,请使用以下“终端”命令来还原 DNS 缓存设置:

sudo discoveryutil mdnsflushcache

OS X Mavericks、Mountain Lion 和 Lion

在 OS X v10.9.5 及更低版本中,请使用以下“终端”命令来还原 DNS 缓存设置:

sudo killall -HUP mDNSResponder

Mac OS X Snow Leopard

在 OS X v10.6 至 v10.6.8 中,请使用以下“终端”命令来还原 DNS 缓存设置:

sudo dscacheutil -flushcache

补充2:

我在OSX EI Caption 10.11.4 上安装的时候出现不工作的情况,我的解决的方法是重装了brew和dnsmasq,(因为brew更新操作时出错)。

卸载Homebrew:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"

安装Homebrew

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
$ brew -v
Homebrew 0.9.9 (git revision 5f06; last commit 2016-05-10)

安装Dnsmasq

brew install dnsmasq

配置dns,复制案例配置文件到指定目录,这里安装完成会有提示,按提示操作就行。

cp /usr/local/opt/dnsmasq/dnsmasq.conf.example /usr/local/etc/dnsmasq.conf

编辑dnsmasq.conf 文件添加要解析的域名vi /usr/local/etc/dnsmasq.conf ,添加address=/.dev/127.0.0.1 到配置文件。

启动dnsmasq服务:

sudo brew services start dnsmasq

删除dns缓存

sudo killall -HUP mDNSResponder

 

 

最后修改日期: 2017年2月14日

作者