很多web开发者都非常熟悉修改/etc/hosts
文件来将域名如coolsite.com
转发到127.0.0.1
来实现本地开发站点用域名访问,包括一些集成环境如 MAMP PRO 也是利用了这一特性,但这也有很多不便的地方,如:
- 需要管理员权限才能修改hosts文件
- 每次新建一个项目都要重新编辑hosts文件
- 不支持本地泛域名解析
我们理想的状态是自己定义一个域名如mysite.dev
的域名,将其指向到127.0.0.1
本地主机,实现用自定义域名访问本地开发地址。建议使用.dev
后缀的域名做本地开发,因为在真实的互联网中没有.dev
后缀的域名,这样就不会造成真实的域名无法访问的问题了。
DNSmasq
DNSmasq是一个小巧且方便地用于配置DNS和DHCP的工具,适用于小型网络,它提供了DNS功能和可选择的DHCP功能。它服务那些只在本地适用的域名,这些域名是不会在全球的DNS服务器中出现的。DHCP服务器和DNS服务器结合,并且允许DHCP分配的地址能在DNS中正常解析,而这些DHCP分配的地址和相关命令可以配置到每台主机中,也可以配置到一台核心设备中(比如路由器),DNSmasq支持静态和动态两种DHCP配置方式。
使用本地dns服务器DNSmasq大致需要如下及步骤:
- 在OS X 上安装DNSmasq。
- 配置DNSmasq,使所有
.dev
后缀的域名指向到127.0.0.1
上。 - 配置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里。
补充:
配置完成以后需要删除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