lowply.github.io/blog

Mountain Lionにdnsmasqをインストールするメモ

タイトル通りではあるけど、いろいろハマったのでメモ。

dnsmasqというのは簡易DNS/DHCPサーバー。/etc/hostsを書き換えるよりもう少し低いレイヤーでレコードを書き換えてくれるイメージ(フォワーダーと呼ばれたりする)。なので、Aレコードだけではなくほとんどのレコード書き換えができたりします。詳細はWikipediaとかで。今回はMXレコードを書き換えたい事情があって導入してみた。

インストール

いつも通り、homebrew様。brew後に出てくるビールの絵文字がかわいい。

$ brew update && brew install dnsmasq

設定

confを複製して編集

$ cp -a /usr/local/Cellar/dnsmasq/2.65/dnsmasq.conf.example /usr/local/etc/dnsmasq.conf
$ vim /usr/local/etc/dnsmasq.conf

以下を書き換え

resolv-file=/etc/resolv.dnsmasq.conf
listen-address=127.0.0.1
conf-dir=/usr/local/etc/dnsmasq.d

conf用ディレクトリを作成

$ mkdir /usr/local/etc/dnsmasq.d

plistを複製。Macの場合、launchctlがこのplistに書かれているオプションとかをつけてバイナリを実行する。

$ sudo cp /usr/local/Cellar/dnsmasq/2.65/homebrew.mxcl.dnsmasq.plist /Library/LaunchDaemons

現在のDNSキャッシュサーバーのIPを、dnsmasq用のresolv.confに書く。フィルタにマッチしなかった場合これに問い合わせることになる。

$ cat /etc/resolv.conf
$ sudo vim /etc/resolv.dnsmasq.conf

起動

$ sudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist

確認

$ scutil --dns
$ ps ax | grep [d]nsmasq

キャッシュサーバーをdnsmasqに変更(この時点でミスがあると名前が引けなくなる)

$ sudo networksetup -setdnsservers Wi-Fi 127.0.0.1

確認

$ dig apple.com A
;; ANSWER SECTION:
apple.com.		1715	IN	A	17.172.224.47
apple.com.		1715	IN	A	17.149.160.49

ためしに変更をかける。書式はこんな感じで、confにいろいろヘルプが書いてある。

$ echo "address=/apple.com/127.0.0.1" > /usr/local/etc/dnsmasq.d/apple.com

再起動

$ sudo launchctl unload -w /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist
$ sudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist
$ sudo dscacheutil -flushcache

見てみる

$ dig apple.com
;; ANSWER SECTION:
apple.com.		0	IN	A	127.0.0.1

変わってる。ちなみにMXレコードの場合はこんな感じで書く。

$ cat /usr/local/etc/dnsmasq.d/fixture.jp
mx-host=fixture.jp,mail.example.com,10

感想

はい、めんどくさいですね。けどレコードが自由自在に書き換えられて、ローカルで開発するときとか一つ世界が広がると思うのでオススメです。

備考

バグなのかわからないけど、launchctl unload && launchctl loadでうまくconfigを参照してくれないことがある。その場合はMacの環境設定側のDNSを一旦空にして(つまりルーターとかを見に行くようにして)もう一回127.0.0.1に設定してあげると直る。で、それを元に下記みたいな再起動スクリプトとかを書いておくと便利。

#!/bin/sh

ps ax | grep [d]nsmasq
sudo launchctl unload -w /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist
sudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist
ps ax | grep [d]nsmasq
dscacheutil -flushcache
sudo networksetup -setdnsservers Wi-Fi empty
sudo networksetup -setdnsservers Wi-Fi 127.0.0.1

余談

  • brew install zsh で5.0.2が入ってびっくりした。本家zsh.orgには今のところ5.0.0までしか出てないし。github側には5.0.2まで上がってるけど。
  • brew install imagemagick が速すぎてもう一回びっくりした。しかもほぼ最新の6.8.0。コンパイル済みbottole.tar.gzを落としてきてるだけだから当たり前なんだけど、改めてhomebrewやばい。