LoginSignup
1
0

More than 5 years have passed since last update.

Macにdjbdnsを入れる

Last updated at Posted at 2015-10-09

slackみたいなサブドメインでグループを切り分けるサイトなんかをローカル環境でシコシコ作るには、とりあえずは/etc/hostsを使うのだけど、時間が経つとカオス化してくる。そうなってくると、オレオレdnsが欲しくなってくるので、意を決して立ててみた。
Mac OSのバージョンは10.10.5

DNSにはミニマリストdjb様のdjbdnsが楽ちんなので採用。BINDはよく知らない。BINDってよくハッキングされてるよね(小並感)

(djbdnsは2001年で開発が止まっており、IPv6とかには対応していません。あくまで簡便に開発環境を作るための目的で使い、本番用とでは別のDNS(Amazon Rout53とか)を使ったほうが良いかと思います)

目標

  • *.localdevは127.0.0.1を返すようにする。
  • それ以外は、普通にネットが使えるように

セットアップ

djbdnsはキャッシュサーバのdnscacheと、コンテンツサーバのtinydnsに別れた作りになっている。
今回はdnscacheが特定ドメインへのリクエストをtinydnsに投げるように設定することで、要件を満たそうと思う。

% brew install djbdns

一緒にdaemontoolsも入る。(daemontoolsはdjb様のサービス管理ツール群)

ユーザーを作る。

正直MacOSでユーザーを作る方法は良くわかってない。

% sudo dscl . create /Groups/djbdns PrimaryGroupID 151
% sudo dscl . create /Users/dnsrun UniqueID 151
% sudo dscl . create /Users/dnsrun PrimaryGroupID 151
% sudo dscl . create /Users/dnsrun UserShell /bin/false
% sudo dscl . create /Users/dnsrun NSHomeDirectory /nohome
% sudo dscl . create /Users/dnslog UniqueID 152
% sudo dscl . create /Users/dnslog PrimaryGroupID 151
% sudo dscl . create /Users/dnslog UserShell /bin/false
% sudo dscl . create /Users/dnslog NSHomeDirectory /nohome
% sudo dscl . create /Groups/djbdns GroupMembership dnsrun dnslog
% sudo defaults write /Library/Preferences/com.apple.loginwindow HiddenUsersList -array-add dnsrun dnslog

tinydnsの設定

*.localdevのみに応答させるように設定。
tinydnsとdnscacheが同一サーバで動くことになるので、lo0に127.0.0.2でaliasを作り、tinydnsはそっちを見るように変更する。

% sudo /sbin/ifconfig lo0 alias 127.0.0.2 netmask 0xff000000
% sudo tinydns-conf dnsrun dnslog /var/service/tinydns 127.0.0.1
% sudo echo '127.0.0.2' > /var/service/tinydns/env/IP

/var/service/tinydns/root/dataにlocaldevドメインの設定を書いたら、make

.localdev::600::
+*.localdev:127.0.0.1

dnscacheの設定

% sudo mkdir -m 755 /var/service
% sudo dnscache-conf dnsrun dnslog /service/dnscache 127.0.0.1
% sudo echo '127.0.0.2' > /var/service/dnscache/root/servers/localdev

動作確認

手動で起動させる。以下2行をscreenなり、別のターミナルなりで打ってそれぞれを起動

% cd /var/service/tinydns && sudo run
% cd /var/service/dnscache && sudo run
% env DNSCACHEIP=127.0.0.1 dnsqr a mogera.hogehoge.localdev
1 mogera.hogehoge.localdev:
57 bytes, 1+1+0+0 records, response, noerror
query: 1 mogera.hogehoge.localdev
answer: mogera.hogehoge.localdev 86400 A 127.0.0.1

% env DNSCACHEIP=127.0.0.1  dnsqr a www.google.com
1 www.google.com:
288 bytes, 1+16+0+0 records, response, noerror
query: 1 www.google.com
answer: www.google.com 293 A 202.224.62.94
answer: www.google.com 293 A 202.224.62.109
answer: www.google.com 293 A 202.224.62.99
answer: www.google.com 293 A 202.224.62.93
answer: www.google.com 293 A 202.224.62.88
answer: www.google.com 293 A 202.224.62.104
answer: www.google.com 293 A 202.224.62.84
answer: www.google.com 293 A 202.224.62.98
answer: www.google.com 293 A 202.224.62.89
answer: www.google.com 293 A 202.224.62.118
answer: www.google.com 293 A 202.224.62.114
answer: www.google.com 293 A 202.224.62.123
answer: www.google.com 293 A 202.224.62.103
answer: www.google.com 293 A 202.224.62.108
answer: www.google.com 293 A 202.224.62.113
answer: www.google.com 293 A 202.224.62.119

いい感じのような気がする。

サービス化

必要なときだけtinydns&dnscacheを起動するのも良いんだけど、いちいちシステムのDNS設定を変更するのも面倒なので、サービス化させる。

/sbin/ifconfig lo0 alias 127.0.0.2 netmask 0xff000000をtinydnsのrunスクリプトに追加しておく。

% sudo mkdir -m 755 /service
% sudo ln -s /var/service/dnscache /service/
% sudo ln -s /var/service/tinydns /service/

launchctlに追加するためにplistがいる。 親切な人がgistで公開していたのをいじる。

% sudo cp com.github.mxcl.homebrew.daemontools.plist /Library/LaunchDaemons/
% sudo /usr/sbin/chown root:wheel /Library/LaunchDaemons/com.github.mxcl.homebrew.daemontools.plist
% sudo launchctl load /Library/LaunchDaemons/com.github.mxcl.homebrew.daemontools.plist

ネットワーク設定でDNSを127.0.0.1に。
適当にdigとかして動作確認

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0