もやしさん家のもやもやな生活

育児とキャンプとキャンピングトレーラーのブログ♪

Webアプリの検証のためにDNSサーバーを建ててテストする

 本サイトはプロモーションが含まれています

Web系のシステムやアプリを作っていると、本番環境に展開する前のテストとして検証用に建てたサーバーに通信させる必要に直面します。
Windowsのパソコンならhostsファイルを使ったり、アプリ系ならテストサーバーのグローバルIPを直差しすることもできますが、いずれも後々でトラブるので避けたいところです。

そこでDNSサーバーを立てるわけなのですが、どうにも意図したように通信が確立しないと悩んだ挙句に持ち込まれた案件が直近だけでも複数ありまして、この手のテストに結構ハマっている人がいるもんだな~と思ったので自分的備忘です。

 

 

テストの要件

本番環境と同じ名前(URL)を使いながらも、テスト用サーバーにアクセスさせたいのでDNSサーバーを建てる。
従って、DNSサーバーの要件は次のようになります。
・検証用サーバーのアドレスを返すこと
・それ以外(YahooやGoogleなどいわゆる汎用のサイト)は適切な(実在する)アドレスを返すこと

この手の案件の場合、僕は短納期でセットアップできるWindows DNS Serverで構築しています(検証機がクライアントOSの場合はBINDを使いますが…)

DNSサーバーのセットアップ

検証用のサーバー情報を登録する

Windows DNS Serverを登録(役割と機能からDNS Serverを有効にする)しましたら、アプリで使用しているドメインの情報を前方参照ゾーンに作成します。


例えばアプリで「www.testdom.co.jp」と「app1.testdom.co.jp」を使用している場合、前方参照ゾーンには「testdom.co.jp」を作成します。

DNSの構造を知っている人ほどここで「jp」とか「co」のゾーンを作るのですが、それをやるとテストにならなくなるので注意が必要です(自ドメインだけの名前解決で良ければ作っても良いのですが…)。

さらに、作成したtestdom.co.jpゾーン内に「www」や「app1」のAレコード(またはAAAAレコード)を作成します。

これで、アプリを実行する端末のDNSサーバーを、このDNSサーバーに向けることで、テスト用のサーバーにアクセスを振るようになります。

汎用ドメインの名前解決を可能にする

さらに、YahooやGoogleなど汎用サイトの名前解決ができるよう設定を続けます。DNSサーバー管理コンソールのサーバー名を右クリック→プロパティを開きます。


フォワーダータブの編集をクリックし、汎用の名前解決が可能な上位のDNS Serverを設定します。

これで検証用ドメイン(前方参照ゾーンに登録したドメイン)以外の名前解決ができるようになります(=゚ω゚)ノ

(TIPS)検証用の名前が多くて登録が大変な場合

今回の例(wwwとapp1)のように登録する名前が少なければ手作業でも何とかなりますが、アプリの規模が大きくなるにつれて50個100個…と登録すべきレコードも増加します。
このような場合は、コマンド(PowerShell)で一括して登録します。
コマンドの形式は次のようになります。
『Add-DNSServerResourceRecordA -ZoneName teestdom.co.jp -Name www -IPv4Address 172.16.1.20 』

この形式のうち可変部はDNS名(-Name)とIPアドレス部(-IPv4Address)の2つなので、エクセルでコマンドを量産できるようにしておくと便利です。

↑の画像ではconcate()関数を使用していますが、concatenate()関数やtextjoin()関数、&などでテキスト連結するだけなので、使いやすいもので作れば良いと思います。

同様に、ゾーンが複数存在する場合は-ZoneNameの引数を変数化するだけです済みますので、より大規模な環境にも対応できるようになります(=゚ω゚)ノ