単純な設定から複雑な設定まで、DNS の動作確認が必要になる場合があります。幸い、コンピュータには、それを実行するときに役立つユーティリティが組み込まれています。この記事では、Windows のコマンドプロンプトと PowerShell で役に立つコマンドを説明します。この 2 種類のシェルの違いにも触れています。準備はよろしいですか? できていますよね。このページを開いたのはそれが目的でしょうから。冗談はこのくらいにして、さっさとコマンドの説明に入ることにしましょう。さあ、始まります。
注意: 以下の例はすべて、Windows 10 が稼働しているシステムのものです。
Windows では、1981 年に Microsoft オペレーティングシステム用のオリジナルのコマンドプロンプト(CMD)が導入されました。Windows 「配下」で動作しながら、システムを通常の Windows より細かく制御できるプログラムです。CMD は、プロンプトを表示するシンプルな黒いウィンドウの中で動きます。お使いのマシンによって、プロンプトは次のように表示されます: C:\> または C:\Users\example。このツール上で実行できるのは、一行コマンドです。
一方の PowerShell は、2006 年に Windows で初めてリリースされました。このシェルは青いウィンドウで動作し、CMD や MS-DOS コマンドではなくコマンドレット(cmdlet)を使用します。スクリプトシステムや、組み込みの管理機能を備えており、バッチコマンドを実行できます。つまり、一度に 1 つのコマンドだけでなく、一連のコマンドレットを最後まで実行できるということです。コマンドプロンプトとは異なり、PowerShell はコンソールプログラムに限定されません。現在のリリースは .Net 5.0 上で動作し、これは Linux と macOS をサポートしています。また、PowerShell はさまざまなシステムで複数のライブラリにアクセスすることができます。
Windows のコマンドプロンプトを起動するには、方法がいくつかあります。1 つの方法としては、タスクバーで検索アイコンをクリックし、「コマンドプロンプト」または「cmd」と入力します。こうすると、検索ウィンドウの「最も一致する検索結果」の一番上にアプリが表示されます。
私のようにキーボードショートカット派なら、Win + R で「ファイル名を指定して実行」コマンドを呼び出すことができます。「cmd」と入力し、「OK」をクリックします。これで起動しました。
PowerShell にアクセスするときも、Windows コマンドプロンプトのとき同じです。「cmd」と入力する代わりに、「検索」または「ファイル名を指定して実行」ウィンドウで「PowerShell」と入力します。異なるのは、検索オプションも使えるところです。検索オプションを使用すると、Windows PowerShell と PowerShell ISE のオプションが表示されます。この記事では、基本的な Windows PowerShell を使用することにします。
あるいは、Win + X を押して、新しいメニューを表示することもできます。この場合は、PowerShell に Admin としてアクセスするオプションが表示されます。このメニューには、「ファイル名を指定して実行」などの Windows ユーティリティもあります。
ご存知でしたか? PowerShell ISE は、PowerShell のホストアプリケーションです。ISE は Integrated Scripting Environment の略です。標準の PowerShell がコマンドプロンプトに似ているのに対し、このオプションはインターフェイスを提供します。
さあ、ここからがおもしろいところです。DNS のトラブルシューティングや検証に役立つ Windows の CMD コマンドをいくつかご紹介します。大丈夫。私は想像力が豊かです。皆さんはちゃんと、上に書いた私の話を飛ばさずに、ここまで来たことにしておきます。
nslookup コマンドは、DNS の名前解決に関する問題を診断するときに便利です。Mac や Linux の dig 機能に当たります。ホストの IP アドレスを見つけたり、逆引き DNS 検索(IP のドメイン名を見つけること)を実行したりできます。nslookup で、ドメインの DNS レコードに関する情報も確認できます。
nslookup コマンドは次のようになります: C:\Users\username>nslookup dnsmadeeasy.com
この例では、DNS Made Easy の IP アドレスを要求しているだけです。それに対して、ドメインの IPv6 アドレスと IPv4 アドレスが返されました。「non-authoritative answer」と表示されているのは、クエリに再帰的なサーバーを使用しているためです。
IP アドレスがあって、ドメイン名を知りたい場合、逆引き DNS 検索を実行できます。上記の例と同じで、ただ文字どおり逆の操作です。
C:\Users\username>nslookup 162.243.68.201
あるドメインのネームサーバーを検索したり、コマンドラインで特定のパラメーターを設定したりしたいとしましょう。この場合、Windows の set コマンドを使用します。たとえば、こんな使い方があります。
C:\Users\username>nslookup
>set q=ns
>dnsmadeeasy.com
(各コマンドの後に Enter キーを押してください)
結果は次のようになるはずです:
nslookup および set コマンドを使用すると、ドメインの DNS レコードを確認したりトラブルシューティングしたりすることもできます。このプロセスは上の例と同じですが、今回はクエリしたいレコードを指定します。この情報からエラーや問題を見つけ、すぐに対処できます。下のスクリーンショットでは、MX、PTR、SOA の各レコードを検索しましたが、もちろん、これだけに限定されるわけではありません。
C:\Users\username>nslookup
>set q=mx
>dnsmadeeasy.com
(各コマンドの後に Enter キーを押してください)
ヒント: 複数のレコードタイプをチェックする場合、それぞれに対して「nslookup」と入力する必要はありません。最初の nslookup コマンドの後は、各レコードに対して set コマンドを実行できます。これは、別のドメインのレコードの検証を開始する場合にも適用されます。
ヒント: コマンドを実行する前に、DNS キャッシュをクリアしておくと都合がいい場合があります。「ipconfig/flushdns」と入力し、Enter キーを押してください。これで、キャッシュがクリアされます。
ドメインの DNS に関する追加情報が必要なときは、debug コマンドを使用できます。これは、DNS サーバーリクエストのヘッダー情報を示します(次のスクリーンショットを参照)。
C:\Users\username>nslookup
>set debug
>example.com
ネットワーク診断のために、CMD で ping コマンドを実行できます。ping は、ターゲットとなる場所に接続するまでの待ち時間を計ります。この例では、Google の公開 DNS アドレスである 8.8.8.8 を指定して Ping テストを実行しています。
C:\Users\username>Ping 8.8.8.8
これで、ping を打ったサーバーから応答が返ってくるまでの往復時間がわかりました。
ネットワーク診断に役立つもうひとつのコマンドは、tracert(トレースルート)コマンドです。tracert は、パケットの経路を出発地から目的地までトレースします。特に接続の問題をトラブルシューティングするときに便利です。次の図では、ドメイン名 www.example.com とその IP アドレスについて tracert を実行しています。
C:\Users\username>tracert 127.0.0.1
C:\Users\username>tracert www.example.com
このコマンドで実行しているのは、パケットが目的地に到着するまでの経路の確認です。リストアップされるそれぞれの点はホップとも呼ばれます。ホップ数とともに、クエリ解決時間も表示されます。この情報は、DNS の速度を向上させたり、問題のあるルーターを特定したりするときに役立ちます。
ヒント: コマンドプロンプトでは、前に入力したコマンドの履歴が保存されています。同じセッションでこれより以前に入力したコマンドを見る必要がある場合は、上矢印キーを押すだけでスクロールできます。その動作サンプルは、下の Gif 画像を参照してください。
Windows PowerShell を使用する場合は、このセクションを参照してください。それぞれ、上述したコマンドプロンプトに相当する PowerShell コマンドです。
PowerShell での nslookup = Resolve-DnsName
PS C:\Users\username>Resolve-DnsName dnsmadeeasy.com(または C:\Users\username>Resolve-DnsName 162.243.68.201)
ヒント: PowerShell で時間を節約するには、コマンドレットの最初の数文字を入力してから Tab キーを押すと残りの文字が自動入力されます。たとえば、「reso」と入力してから Tab キー(reso + Tab)を押すと、PowerShell に「Resolve-DnsName」と入力されます。これは、Test-Connection など他のコマンドレットでも同様に動作します。「Test-con」まで入力して Tab キーを押せば、Test-Connection と入力されます。
PowerShell では、レコードの検索に Resolve-DnsName コマンドレットを使用します。目的のレコードを指定するときは、"-type "を追加してコマンドレットを入力します。
PS C:\Users\username>Resolve-DnsName dnsmadeeasy.com -Type MX(または、選択した任意のレコード)
「Type」と「-type」のどちらで入力しても、コマンドレットは同じように実行されています。大文字と小文字は区別されないことに注意してください。
PowerShell における ping = Test-Connection
PS C:\Users\username>Test-Connection dnsmadeeasy.com
結果は違うように見えますが、送信元(コンピュータ名)とホップ数、応答が返ってくるまでの時間が表示されています。
PowerShell でのトレースルートは tracert。そう、今回のコマンドレットは CMD コマンドのときと同じ名前です。
PS C:\Users\username>tracert example.com
DNS のトラブルシューティングでは、オンラインリソースも有効です。特に、どこからでも、どのデバイスからでもアクセスできる点は便利です。たとえば、Constellix(当社の関係会社)の DNS 検索ツールでは、DNS レコードを取得し、地理的な場所に基づいてチェックを実行することができます。指定したネームサーバーに対するクエリも実行できます。サポートされているレコードは、A、AAAA、CNAME、MX、TXT、NS、SOA、および SRV です。
Constellix の DNS 検索ツールを使うと、ほかにもメリットがいくつかあります。同じセッションで、異なるドメインやネームサーバーに対してチェックを実行できるということです。結果は、ドメイン、レコードタイプ、リゾルバ、または場所によってフィルタリングでき、各チェックを拡大または最小化できます。また、結果の URL をコピーしてチームにメールで送信することもできるので、便利ですし、時間の節約にもなります。
以上のオプションで、DNS の確認と問題のトラブルシューティングを行うことができます。キーポイント: コマンドプロンプト、PowerShell、オンライン DNS ツールは、ネームサーバー、レコードの指示、その他の DNS 情報を提供しますが、それぞれの動作は異なります。CMD では一行コマンドを使用しますが、PowerShell ではコマンドレットを使用し、バッチコマンドも実行できます。Constellix のオンライン DNS 検索ツールのようなリソースは、入力された詳細情報に基づいてチェックを実行します。
言うまでもなく、これはコマンドプロンプトや PowerShell の包括的なガイドではありません。どちらも、もっと多くの機能があります。以下に、両方のユーティリティについて理解を深めるのに役立つリンクを紹介します。
気に入れば、お役に立つかもしれません。