MacをDNSサーバにして、iOSアプリの開発を楽にしたかった

目的

iPhoneのhostsは通常書き換えられないので、iOSアプリ開発中に本番サーバと開発用サーバのどっちを見るかを切り替えるのにいちいちコードを書き換えないといけなくてムカつく。
DNSサーバがあれば、本番用のドメインを開発用にすり替えればアプリ自体に手を入れなくて幸せになる。

方法

BINDの起動

Mac OS X で DNS サーバを構築する - maruko2 Note.
上記を参考に、BINDを動かす。

設定ファイル

BIND自体が動くことを確認したら設定を変更して、本番のドメインを尋ねられたら開発用サーバのIPを返すようにする。
以下のmy.domainは本番のドメインに読み替えること。INSERT_*は適宜読み替えること。

/etc/named.conf

以下を追加

zone "my.domain" {
        type master;
        file "my.domain.zone";
};

my.domainについては、fileのゾーンファイルの中身を参照してくれよなという気持ちをこめた文。

/var/named/my.domain.zone

新規作成して以下の内容を記載。

$TTL 86400
@ IN SOA dns.my.domain. mailaddress.my.domain. (
        2014030601
        3H
        1H
        1W
        1D
        )
;
 IN NS dns.my.domain.
 IN A <INSERT_DEVELOPMENT_IP>
dns IN A <INSERT_SELF_IP>
何がかいてあるか

@IT:DNS Tips:SOAレコードには何が記述されている?
上記サイトに詳しく書いてある。

SOAレコード

プラマリサーバがどいつで、その設定をいつまで生かすかみたいな設定。
適当にdns.my.domain.とか名前をつける。(最後の.は必要なので消さないように)

NSレコード

ドメイン担当のネームサーバはどいつかの指定。

Aレコード

対象のドメイン以下に差し替えたいIPアドレスを指定。それとさっきから頻繁に出てくるdnsって誰だよってことで、サーバ自身のIPアドレスを指定。

以上を設定しBINDを起動すると、対象ドメインの嘘のDNSサーバとして動く。(こいつに聞くと本番のドメインを差し替えられたIPアドレスに変換して返してくる)
あとはiPhonewifi設定で、DNSサーバのところにこいつのIPアドレスを指定してやると、愚かなiPhoneは嘘のDNSサーバから嘘のIPを聞いてまんまとアクセスする。