MacでDNSサーバ(BIND)を動かす&iOS/Androidの設定

先月書いた記事ではlvh.meを使って参照している、ローカルに設置したnode.jsのアプリケーションをモバイルからアクセスする際に、ApacheのProxyモジュールを利用していましたが、書いた後にDNSサーバ立てれば良いじゃんって事に気が付いていたのですが、重い腰を上げて設定できたのでまとめておきます。

JailBreak/Rootedな端末だと/etc/hostsをいじれないので、真っ当な方法ですね。

Mac OS X には最初からBINDが入っていますが、動かすまでに少し準備が必要です。

  • /etc/rndc.keyファイルの生成
  • ルートサーバのゾーンファイルの更新

その後、

  • lvh.meのゾーンの設定
  • モバイル端末のDNS設定の変更

という流れになります。

/etc/rndc.keyファイルの生成

$ sudo rndc-confgen -a
wrote key file "/private/etc/rndc.key"

ルートサーバのゾーンファイルの更新

$ su -
Password:
# cd /var/named
# curl ftp://ftp.rs.internic.net/domain/named.root > named.ca

とりあえず、これで起動ができるようになります。以下のコマンドで試してみます。

# named -g
05-Aug-2013 10:09:42.365 starting BIND 9.7.6-P1 -g

lvh.meのゾーンの設定

lvh.meは全て127.0.0.1を指しているので、アプリケーションを動かしている端末(Mac OSX)からのアクセスなら問題ありませんが、モバイル端末からだとそのモバイル端末に接続してしまうので、Mac OSXのアドレスを指すようにゾーンファイルを作ってあげます。

/etc/named.conf

lvh.meではlvh.me.zoneの設定を読込む設定を追加します。

zone "lvh.me" IN {
	type master;
	file "lvh.me.zone";
	allow-update { none; };
};
/var/named/lvh.me.zone

正引きの情報だけ。192.168.10.128は自身の環境のMacIPアドレスに変更してください。

$TTL    86400
$ORIGIN lvh.me.

@     IN    SOA     ns.lvh.me.  postmaster.lvh.me. (
                            2013080501      ; Serial
                            7200            ; Refresh 2 hours
                            1800            ; Retry  30 minutes
                            1209600         ; Expire 14 days
                            86400 )         ; Minimum TTL 1day
              IN    NS      ns.lvh.me.

localhost     IN    A       192.168.10.128
ns          IN    A 192.168.10.128
@          IN    A 192.168.10.128
*          IN    A 192.168.10.128

これでlvh.meの情報を上書きしました。
起動と停止は以下。

# named を起動するだけの場合(自動起動しない)
$ sudo launchctl load -F /System/Library/LaunchDaemons/org.isc.named.plist
# named を起動し、ブート時にも自動起動するようにする。(org.isc.named.plist を書き換えている。)
$ sudo launchctl load -w /System/Library/LaunchDaemons/org.isc.named.plist
# named を停止する
$ sudo launchctl unload /System/Library/LaunchDaemons/org.isc.named.plist
# named を停止し、ブート時に自動起動しないようにする。(org.isc.named.plist を書き換えている。)
$ sudo launchctl unload -w /System/Library/LaunchDaemons/org.isc.named.plist

モバイル端末のDNS設定の変更

iOSの場合

「設定」アプリ、「Wi-Fi」、「SSIDの右矢印」、「DNS」の項にMacOSXIPアドレスを入力します。

DNSのキャッシュが残っていて、接続できない場合は再起動してください。

Androidの場合

「設定」アプリ、「無線とネットワーク」、「Wi-Fi設定」、(物理的な)「メニューボタン」「詳細設定」、「静的IPを使用する」にチェック、「DNS 1」にMacOSXIPアドレスを入力します。

DNSのキャッシュが残っていて、接続できない場合は再起動してください。