@Lenciel

使用dnsmasq配置本地开发环境

做Web开发的时候经常需要修改/etc/hosts文件把dev.cool.project或者cool.project.dev这样的域名指向127.0.0.1(如果你从来没有这么做过那你可以跳过后面的内容了但, seriously? you are a web dev and never did this before?)。这样做有些麻烦:

  • 每个项目需要修改hosts文件
  • 需要root权限才能修改这个文件

这里记一下如何用dnsmasq把所有dev结尾的域名都指向127.0.0.1

安装dnsmasq

在Mac下安装什么东西本座都用homebrew,先更新brew:

1
$ brew up

然后安装dnsmasq。注意安装命令的输出,结尾是有配置的简单说明的。因为我用了boxen所以路径不一定对每个人都适用,以你自己的输出为准:

1
2
3
4
5
6
7
8
9
10
11
12
$ brew install dnsmasq
==> make install PREFIX=/opt/boxen/homebrew/Cellar/dnsmasq/2.69
==> Caveats
To configure dnsmasq, copy the example configuration to /opt/boxen/homebrew/etc/dnsmasq.conf
and edit to taste.
  cp /opt/boxen/homebrew/opt/dnsmasq/dnsmasq.conf.example /opt/boxen/homebrew/etc/dnsmasq.conf
To have launchd start dnsmasq at startup:
sudo cp -fv /opt/boxen/homebrew/opt/dnsmasq/*.plist /Library/LaunchDaemons
Then to load dnsmasq now:
sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist
==> Summary
/opt/boxen/homebrew/Cellar/dnsmasq/2.69: 7 files, 488K, built in 22 seconds

配置dnsmasq

dnsmasq.conf里面添加一个配置dev的配置:

1
address=/dev/127.0.0.1

重启dnsmasq服务:

1
2
$ sudo launchctl stop homebrew.mxcl.dnsmasq
$ sudo launchctl start homebrew.mxcl.dnsmasq

配置OSX

安装了dnsmasq之后你有两个选择:

  1. 把操作系统所有的DNS查询都由dnsmasq处理
  2. .dev的DNS查询交给dnsmasq处理

第一个比较简单,在System Preferences里面配置一下就可以了。 第二个需要用/etc/reslov.conf文件来更精细的控制DNS查询:

1
2
3
$ sudo mkdir -p /etc/resolver
$ sudo touch /etc/resolver/dev
$ sudo vi /etc/resolver/dev

/etc/resolver/dev里面添加一行nameserver 127.0.0.1就可以了。

测试效果

1
2
3
4
5
6
7
8
    $ ping -c 1 www.sina.com.cn
    PING newscd.sina.com.cn (221.236.31.145): 56 data bytes

    $ ping -c 1 this.is.a.test.dev
    PING this.is.a.test.dev (127.0.0.1): 56 data bytes

    $ ping -c 1 this.is.cool.dev
    PING this.is.cool.dev (127.0.0.1): 56 data bytes

嗯哼~