[翻译]在 macOS 使用 Dnsmasq 进行本地开发
今天又知道了新的黑科技,顺手练练英语也不错……(翻译太难了 :< 我觉得自己翻得还不如谷歌……)因为苹果改名了所以我也就把 OSX 改到了 macOS。
原文:https://passingcuriosity.com/2013/dnsmasq-dev-osx/
这是一篇快速入门,通过它你可以了解到如何在 macOS 中安装 Dnsmasq 和如何使用它来把开发的站点定位到本地机器。
大多数 Web 开发者非常熟悉更新 /etc/hosts
来把 coolproject.dev
的流量导流至 127.0.0.1
,同时也知道这种方法带来的问题:
- 他需要在你添加或删除项目时每次对配置文件进行修改
- 他需要管理员权限来进行变更
安装一个像 Dnsmasq 一样的本地 DNS 服务器然后配置你的系统去使用这个服务可以让这些配置修改成为历史。在这篇文章中,我将会经历以下过程:
- 在 macOS 安装 Dnsmasq
- 配置 Dnsmasq,使用
127.0.0.1
来响应所有.dev
的请求 - 配置 macOS 来让所有
.dev
请求走 Dnsmasq
在我们开始之前,我需要先警告你:这些说明将会向你展示如何安装新的系统软件和修改系统配置。像其他所有变更一样,除非你有足够的自信你已经理解了并且可以在有需要时取消这些变化,否则你不应该继续进行操作。
安装 Dnsmasq
引用 Dnsmasq 项目的首页:
Dnsmasq is a lightweight, easy to configure DNS forwarder and DHCP server […] is targeted at home networks[.]
有许多种方法可以安装,但是我(在 macOS 上)最喜欢的的还是用 Homebrew。安装 Homebrew 非常简单不过不在本文的讨论范围中。
一旦你安装完 Homebrew,用它来安装 Dnsmasq 非常简单:
# 升级你的 homebrew
brew up
# 安装 dnsmasq
brew install dnsmasq
这个安装流程将会输出若干命令,你可以使用它们去自动启动带默认配置的 Dnsmasq。我使用以下命令来操作,但你需要使用 brews
告诉你的命令去操作:
# 拷贝默认配置
cp $(brew list dnsmasq | grep /dnsmasq.conf.example$) /usr/local/etc/dnsmasq.conf
# 复制守护进程配置文件
sudo cp $(brew list dnsmasq | grep /homebrew.mxcl.dnsmasq.plist$) /Library/LaunchDaemons/
# 自启 dnsmasq
sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist
配置 Dnsmasq
现在你已经安装完 Dnsmasq 并且让它跑了起来,是时候配置一波了!默认的配置文件在:/usr/local/etc/dnsmasq.conf
,所以使用你最喜欢的编辑器去打开它。
Dnsmasq 可以做的很多事情之一是将 DNS 请求与模式数据库进行比较,并以此来确定正确的应答。我使用这个功能来匹配以 .dev
结尾的任何请求,并发送 127.0.0.1
作为应答。Dnsmasq 配置指令非常容易:
address=/dev/127.0.0.1
把这一段插入 /usr/local/etc/dnsmasq.conf
(我把它放在了 address=/double-click.net/127.0.0.1
这个例子的附近来让两条条目在一起)并且保存文件。
你可能需要重启 Dnsmasq 来使其识别这个更改。重新启动 Dnsmasq 和在 launchd 下运行的任何其他服务都一样:
sudo launchctl stop homebrew.mxcl.dnsmasq
sudo launchctl start homebrew.mxcl.dnsmasq
你可以通过使用 dig
程序来发送一个 DNS 请求来测试。选择一个以 dev 结尾的域名并且使用 dig
来查询你的 DNS 服务器:
dig testing.testing.one.two.three.dev @127.0.0.1
你可以得到像这样的应答:
;; ANSWER SECTION:
testing.testing.one.two.three.dev. 0 IN A 127.0.0.1
配置 macOS
现在你已经有了一个可以工作的 DNS 服务器,你可以在自己的操作系统上配置来使用它。有使用两种方法:
- 发送所有 DNS 请求到 Dnsmasq
- 只发送
.dev
的请求到 Dnsmasq
第一种方法非常简单,只要在系统偏好中改变你的 DNS 设置——但是可能在 Dnsmasq 配置文件不添加额外的修改的时候并不会生效。
第二种方法显得有点微妙,但并没有非常。大多数类 Unix 的操作系统有叫做 /etc/resolv.conf
的配置文件,用以控制 DNS 查询的执行方式,包括用于 DNS 查询的默认服务器(这是连接到网络或者在系统偏好中修改 DNS 服务器时自动设置的)。
macOS 也允许你通过在 /etc/resolver
文件夹中创建新的配置文件来配置额外的解析器。这个目录可能还不存在于你的系统中,所以你的第一步应该是创建它:
sudo mkdir -p /etc/resolver
现在你需要在这个目录中为要配置的每个解析器创建一个新文件。每个解析器大致对应于我们的目标——一个像我们的 .dev
一样的顶级域名。对于每个解析器你有许多可以配置的项,但我通常只选择以下两个:
- 解析器的名字(对应于要解析的域名)
- 要使用的 DNS 服务器
想要知道关于这些文件的更多信息,可以看 resolver(5)
的手册页了解:
man 5 resolver
在 /etc/resolver/
目录中创建一个与新的顶级域名(记住,我正在使用 dev
)同名的新的顶级域名,并且通过运行以下命令来添加名称服务器:
sudo tee /etc/resolver/dev >/dev/null <<EOF
nameserver 127.0.0.1
EOF
在这里,dev
是我配置 Dnsmasq 来响应的顶级域名,127.0.0.1
是要使用的服务器的 IP 地址。
一旦你创建了这个文件,macOS 将会自动读取并完成。
测试
要测试你的新配置非常容易,只要使用 ping
来检查你是否可以将你的新的顶级域名解析到一些 DNS 名中。
# 确定你没有玩坏你的 DNS
ping -c 1 www.google.com
# 检查 .dev 的 DNS 是否生效
ping -c 1 this.is.a.test.dev
ping -c 1 iam.the.walrus.dev
你应该可以看到在 Dnsmasq 配置中提到的 IP 地址的结果,如下所示:
PING iam.the.walrus.dev (127.0.0.1): 56 data bytes
现在你可以随时填写在 .dev
下的新的 DNS 名称。恭喜!
植入部分
如果您觉得文章不错,可以通过赞助支持我。
如果您不希望打赏,也可以通过关闭广告屏蔽插件的形式帮助网站运作。
顶一个~
iHosts 也不错哦。
没成功 :(