読者です 読者をやめる 読者になる 読者になる

ローカルマシンでのドメインまわりの検証のための設定色々

メモ programming

基本、自分メモです。実際に利用される場合は、AtYourOwnRiskでお願いします。

やりたいこと

  • ドメインを偽装して、自分の開発環境にアクセスする。

    • 他の人に迷惑かけたいのでなく、あくまで検証用。検証が終わったらすぐに設定を戻したりする。
  • 自分の場合では、作っているウェブアプリケーションで発行するCookie/localStorageまわりの検証をする。

    • サブドメインを追加するのだが、今まではサブドメインなしをベースに作っていたので、サブドメインを追加した時点で特にCookieを使ったロジックに不具合がでる。
    • あらかじめローカルマシンで検証をしてしまって、やってはいけないことを洗いだしておきたい。
  • できるだけクロスブラウザでテストする必要があるので、いろんなところからローカルマシン上の開発環境にアクセスさせる必要がある。

    • ローカルマシンはMac
    • 開発環境はMac上で動いている。VMwareFusionからのlinux
    • 検証は、Macのブラウザ、Windows(Macと同一ネットワーク内にあるPC)のブラウザ、スマホ。
    • スマホからの検証は、Macの「ネットワーク共有」なる機能を使用して、アクセスする。
  • 開発環境のIPアドレスは: 203.0.113.72

  • 開発環境のローカルIPは: 192.0.2.72
  • 検証したいドメインは: example.jp(サブドメインなし)、sub.example.jp(サブドメインつき)

実現方法 -> このエントリーの本題

各検証用のデバイス別に、以下の3種類の実現方法をそれぞれで使用する。

  • Mac上のhostsファイルをいじる
    • ローカルマシンのMacで検証するとき用。
  • Windows上のhostsファイルをいじる
    • Windowsからの検証をするとき用。ほぼMacと同じ。
  • DNS(named)を起動する
    • スマホからの検証用。スマホ内でhostsファイルを書き換えられないので、DNSの参照を(できるだけローカルに)いじって、実現。

それでは、1つずつ。

Mac上のhostsファイルをいじる

おおよそ、/etc/hostsにファイルがあるだろう想定。

以下のように追記する。(Terminal.app で viとかで。sudoしたりして。)

192.0.2.72 example.jp
192.0.2.72 sub.example.jp

ファイルを保存すれば向き先が変わっているはず。

検証を終えるときは、以下のどちらかの方法で対応。 - 追記した行を消す。 - コメントアウトする。( # )

Windows上のhostsファイルをいじる

Windowsの場合、hostsファイルはおおよそ、c:\Windows\system32\drivers\etc\hosts にあるだろうと。

編集は、とりあえずメモ帳を例に出すと、、、

  • WindowsXPの場合
    • 普通に編集可能。( notepad c:\Windows\system32\drivers\etc\hosts )とかでできた想定。
  • Windows7とかの場合
    • 編集に権限まわりがからむ。なので、
    • スタートメニュー > アクセサリ > メモ帳 を、右クリックして「管理者として実行」(Run As Administrator)
    • メモ帳が開いたら、ファイルを開くで c:\Windows\system32\drivers\etc\ に移動。
    • .txtなファイルでないので、「全てのファイル」を見れるようにして、開く。

追記内容は、開発環境のあるMacとは別のPCなので、、、

203.0.113.72 example.jp
203.0.113.72 sub.example.jp

検証を終えるときの対応方法はMacと同じなので割愛。

DNS(named)を起動する

  • あくまで、検証用途にDNSの設定をする。
  • 運用とかは考えないのでテンポラリな設定しかしないし、検証が終わったらすぐに使うの止める。

  • mac(10.7と10.8で使ってみた)

  • BIND9

ここから先は教えていただきました -> id:masa_matya ++

BINDの役割の設定

今回は、役割の設定の中でも、DNSのコンテンツサーバーの設定をする。(自分が管理するzone情報をかえすよという設定)

DNSキャッシュサーバーについての設定は特にしない。運用するのでなく、公開するのでもなく、特定ドメインについての検証作業用なので、必要な名前解決さえされればOK。セキュリティリスクを負わないためにも無用なことはしない。

/etc/named.conf に、以下のように追記する。 (もともとファイルがある前提なので、前後に色々設定が既に書かれているはず。zoneの書式を真似しつつ。。。)

zone "example.jp" IN {
  type master;
  file "example.jp.zone";
  allow-update { none; };
};

zone情報の追加

zone情報のファイルは、/etc/named.confoptions > directoryに書いてある。デフォルトでは、 /var/named ? 多分。

ということで、指定されているディレクトリに移動。

/etc/named.conf についきしたファイル名(example.jp.zone)でファイルを作成して記述。

$TTL 300

example.jp. IN SOA ns009.example.jp. root.example.jp. (
  2012122715 ;Serial
  7200       ;Refresh
  3600       ;Retry
  1209600    ;Expire
  180        ;Minimum TTL
)
       IN NS ns009.example.jp.
@      IN A  203.0.113.72
sub    IN A  203.0.113.72
ns009  IN A  203.0.113.72

(ざっくりな書き方ですみませんm( )m)

後半で向き先の指定をします。検証用なので、全部Aな感じですが。

あとは、起動(今回は、テンポラリにしか使わないので、デーモンにもしないし、自動起動もしないです。sudoとかは個別に。)

named -g

起動したら、digとかで確認します。

dig @{設定したマシンのIPアドレス} example.jp

スマホからのアクセス

スマホでネットワーク共有のMacに接続するのは、単純に無線LANを選択すれば終わり。

そのままだとDNSは、設定したものを見てくれないので、一手間。

  • DNSの設定をしたMacで、
    • システム環境設定 > ネットワーク > Ethernet(ネットワーク共有で、Mac側が共有しているネットワーク)
    • 詳細 > DNS > DNSサーバ
    • 自分自身のIPアドレスを追加(一番上にしておく)

iPhoneの場合、iPhone側でも設定を変更できるけど、Androidでそれができないので、大元のMacで変更をする。

2013.07.23 追記

  • 上記だけでは反映されないことがある。
  • その場合には、ネットワーク共有を一度offにした後に再度onにする。

レアケース: DNSサーバが特殊な場合

例えば、通常時に参照しているDNSサーバーが社内イントラ用とかで、社内ネットワーク内の名前解決の設定がされている場合、ここまでの設定で、そのDNSが見られなくなる。

故に、一手間。

/etc/named.conf のoptions内に、通常時に参照しているDNSサーバーのIPアドレスを追記する。

options {
  // 以下追記内容
  forwarders {
    203.0.113.71;
  };
  // ここまで
}

これをしないと、名前解決できないURLが発生し得る。 これでも発生する問題は、、、調べておきますm( )m

検証おわるときは?

  • namedを切る。
  • システム環境設定のネットワークで追加したDNSIPアドレスを削除
  • /etc/named.conf から、追記したzoneを削除 or コメントアウト

その他

  • なんか以下のようなエラーがでる。
sudo named -g
02-Jul-2013 10:07:14.036 starting BIND 9.7.6-P1 -g
02-Jul-2013 10:07:14.036 built with ...
02-Jul-2013 10:07:14.036 ----------------------------------------------------
02-Jul-2013 10:07:14.036 BIND 9 is maintained by Internet Systems Consortium,
02-Jul-2013 10:07:14.036 Inc. (ISC), a non-profit 501(c)(3) public-benefit
02-Jul-2013 10:07:14.036 corporation.  Support and training for BIND 9 are
02-Jul-2013 10:07:14.036 available at https://www.isc.org/support
02-Jul-2013 10:07:14.036 ----------------------------------------------------
02-Jul-2013 10:07:14.037 using up to 4096 sockets
02-Jul-2013 10:07:14.061 loading configuration from '/private/etc/named.conf'
02-Jul-2013 10:07:14.061 /private/etc/named.conf:4: open: /etc/rndc.key: file not found
02-Jul-2013 10:07:14.061 loading configuration: file not found
02-Jul-2013 10:07:14.061 exiting (due to fatal error)

/etc/rndc.keyなるファイルがないので生成。 (rndcはBINDを制御するツール)

  • Firewallで53番ポートを閉じていたら。。。
    • 53番番ポートを開いてください。