Realize,Inc.

DNS名前解決を確認する

「名前」から「IPアドレス」を導き出せるか、VBAで診断してみましょう

DNSは、人間が覚えやすいドメイン名を、コンピュータ用のIPアドレスへ変換する「電話帳」のような仕組みです。
今回は VBA から Windows 標準の nslookup コマンドを呼び出し、名前解決が正しく行われているかを自動でチェックします。

このVBAでできること

名前解決の成否判定

指定したドメイン名(例: google.com)に対応するIPアドレスが正しく返ってくるかを確認します。

参照DNSサーバーの特定

自分のPCがいま「どのDNSサーバー」に問い合わせを行っているのかを表示します。

障害箇所の切り分け

ネットが繋がらない原因が、回線自体なのかDNSの設定ミスなのかを判断する材料になります。

sequenceDiagram
    participant PC as 自分のPC (VBA)
    participant DNS as DNSサーバー (電話帳)
    participant Target as 接続先サーバー

    Note over PC, DNS: nslookup実行
    PC->>DNS: "www.google.com" のIPは?
    DNS-->>PC: "142.250.xxx.xxx" です
    
    Note over PC, Target: 名前解決成功
    PC->>Target: 取得したIPアドレスへ通信開始

VBAコード


Sub CheckDnsLookup()

    Dim objShell As Object
    Dim objExec As Object

    Dim domainName As String
    Dim strCmd As String
    Dim strResult As String

    ' 確認したいドメイン名やサーバー名を指定
    domainName = "www.google.com"

    Set objShell = CreateObject("WScript.Shell")

    ' Windowsのnslookupコマンドを組み立て
    strCmd = "cmd /c nslookup " & domainName

    ' コマンドを実行し、結果を取得
    Set objExec = objShell.Exec(strCmd)
    strResult = objExec.StdOut.ReadAll

    ' 結果を画面に表示
    MsgBox strResult, vbInformation, "DNS名前解決結果"

End Sub

コード解説

① domainName の設定

調査したいドメインを指定します。社内システムなら filesrv01 のようなサーバー名を入れることで、社内名前解決の確認も可能です。

② nslookup コマンドの活用

nslookup はDNSの稼働状況を調べるための定番コマンドです。VBA経由で動かすことで、Excelでの自動管理に繋げられます。

③ 実行結果の読み取り

StdOut.ReadAll を使うことで、黒い画面(コマンドプロンプト)に出るはずの結果を、VBA内の文字列として取り込みます。

実行結果の見方

サーバー:  dns.google  <-- 問い合わせ先のDNSサーバー名
Address:  8.8.8.8      <-- そのサーバーのIPアドレス

名前:    www.google.com
Addresses:  2404:6800:400a:xxxx::xxxx  <-- 取得したIPv6アドレス
          142.250.xxx.xxx            <-- 取得したIPv4アドレス

実務ポイント

「IP直打ち」との比較

IPアドレスなら繋がるのにドメイン名で繋がらない場合は、ほぼ確実にDNSのトラブルです。

社内名前解決の重要性

社内サーバーに名前でアクセスできない場合、PCが参照しているDNSサーバーが社内用になっていない可能性があります。

自動監視への応用

このコードをループ処理(For文)に組み込めば、社内にある数十台のサーバーの名前解決を一瞬でチェックできます。

よくあるトラブル

「Non-existent domain」と出る
そのドメイン名が存在しない、あるいはスペルミスです。社内サーバーの場合は、DNSサーバー側に登録がない可能性があります。
「DNS request timed out」と出る
DNSサーバーまで通信が届いていないか、サーバーがダウンしています。インターネット接続自体を確認してください。
古いIPアドレスが返ってくる
DNSの更新情報がまだ行き渡っていない(反映待ち)か、自分のPCに古いキャッシュが残っています。

まとめ

  • nslookup をVBAで動かせば、名前解決の状況を自動で取得できます
  • Webサイトや社内システムに「名前で繋がらない」時の強力な調査手段です
  • 取得した情報をExcelに蓄積すれば、ネットワークの健全性を可視化できます

ネットワーク設計・トラブル対応でお困りではありませんか?

株式会社リアライズがサポートいたします。

  • ネットワーク設計・構築
  • トラブル調査・改善
  • 業務効率化・自動化
お問い合わせはこちら