当記事では、初学者を想定したDNSサーバの解説やDIGコマンドを利用したDNSサーバに対して正引き及び逆引きにてドメイン名やIPアドレスを調べる方法等を紹介します。
※DNSサーバについて知ってる!という方は「DIGとは」まで読み飛ばしてください。
目次
DNSサーバについて
DNSサーバとはドメイン(弊社だと、secuavail.com)とIPアドレスを紐づけるものです。PCやスマートフォン(以下、DNSクライアントといいます。)のブラウザでURL(ドメイン)を入力するとWebサイトが表示されます。ですが、実際すぐURLからWebサイトが呼び出されているわけではありません。当記事では、Linux上でDIGコマンドを使用してどのようにURLからWebサイトへアクセスしているのか仕組みを解説します。
DNSサーバは大きく以下の3つに分かれます。
- ルートサーバ
DNSサーバの最上位に位置するのが「ルートサーバ」で世界に13機あるといわれていますが、実際には13個のIPアドレスそれぞれ複数のサーバがあり、エニーキャストルーティングを使用して負荷分散を図っています。 - 権威DNSサーバ
ルートサーバの他に、NSサーバがあり、.jpや.comなどのTLD(トップレベルドメイン)の権威サーバ、.comや.neなどSLD(セカンドレベルドメイン)の権威サーバなどがあり、階層構造になってあります。 - キャッシュDNSサーバ
DNSクライアントからドメイン名に関する問い合わせを受け、ルートサーバはじめとする複数の権威DNSサーバに対して繰り返し問い合わせを行い、結果をDNSクライアントに返します。短期間に同じ問い合わせをサーバルートサーバに送らないよう問い合わせ結果をキャッシュしています。代表的なものにgoogle社の8.8.8.8やCloudflare社の1.1.1.1などのDNSキャッシュサーバがあります。
図で説明すると以下のようになります。
- DNSクライアントからキャッシュDNSサーバに対してドメイン名に関する問い合わせを行います。
- キャッシュDNSサーバはまず、自身のキャッシュに該当するIPアドレスが存在するか確認します。IPアドレス情報がない場合はルートサーバに対して問い合わせを行います。
- ルートサーバからキャッシュDNSサーバへ.comを管理するTLDの権威DNSサーバに問い合わせるよう回答が行われます。
- キャッシュDNSサーバから.comを管理するTLDの権威DNSサーバに対して問い合わせを行います。
- .comを管理するTLDの権威DNSサーバからsecuavail.comを管理するSLDの権威DNSサーバに問い合わせるよう回答が行われます。
- キャッシュDNSサーバからsecuavail.comを管理する3LDの権威DNSサーバに対して問い合わせを行います。
- secuavail.comを管理する3LDの権威DNSサーバからsecuavail.comのIPアドレスである「18.180.167.106」がキャッシュDNSサーバへ回答が行われます。
※キャッシュDNSサーバはsecuavail.com=18.180.167.106 という情報をキャッシュし以降はキャッシュDNSサーバからDNSクライアントへ回答します。 - キャッシュDNSサーバからDNSクライアントへIPアドレスの回答が行われます。
- DNSクライアントはキャッシュDNSサーバから回答のあったIPアドレスを元にWebページを持つサーバへアクセスを行います。
上記の流れを踏まえて実際にDIGコマンドを使用してDNSサーバに対して問い合わせを行ってみます。
DIGとは
ネットワーク管理のためのコマンドラインツールで「Domain Information Groper」の略でDNSサーバに問い合わせを行いサーバから様々な情報収集するためのコマンドです。
今回使用するAlmaLinuxのバージョンは下記のとおりです。
AlmaLinux release 8.7 (Stone Smilodon)
DIGの基本的な使い方
今回は、www.secuavail.comを例にしてコマンドの使い方と表示内容を説明します。「dig -h」でヘルプを出すと色々なオプションが出てきますがここでは基本的なものを紹介していきます。
構 文
# dig[@server]domain[query-type][query-class][+-][query-option]
DNSレコード
- Aレコード:IPv4でホスト名とIPアドレスの関連付けをします。
- AAAAレコード:IPv6でホスト名とIPアドレスの関連付けをします。
- PTRレコード:IPアドレスからホスト名を参照する場合「逆引き」に使用します。
- MXレコード:対象ドメイン宛のメール配送先ホスト名を定義する種類のDNSレコード。
- NSレコード:ゾーン情報を管理するネームサーバを指す。ドメイン自身のDNSサーバを定義するケースと、サブドメインのDNSサーバを定義するケースがあります。ドメイン情報を調べる際に、上位ドメインが分からなければ、下位ドメインのNSレコードが示すサーバに問い合わせを行う。それを繰り返します。
- SOAレコード:ドメイン名はゾーンと呼ばれる領域に分割されており、ゾーン毎に定義や管理を行っています。SOAではDNSサーバ名、管理者のメールアドレス、ゾーンファイルのVer、ゾーン情報の更新間隔、refresh失敗時の再試行間隔、ゾーン情報の有効期間、TTLの設定が登録されます。
- TXTレコード:ホスト名に関連付けるテキスト情報を定義するDNSレコードです。
例:SecuAvailのWebページを例にします。
IPアドレス | 18.180.167.106 |
ドメイン名 | secuavail.com |
まず、以下のコマンドを実行します。
# dig secuavail.com
記載内容は以下の通りです。
HEADER
各セクションに関するステータスやフラグが記載されています。
- Status 応答コード
- NOERROR:正常な応答を示します。
- REFUSED:リクエストが拒否されたこと示す。
- Flags ヘッダーに含まれるビット
- qr:応答であることを示します。
- rd:再帰的問い合わせをしたことを示します。
- ra:再帰的問い合わせが可能であることを示します。
セクション
- QUERY SECTION
問い合わせ内容 特に指定がなければAレコード
- ANSWER SECTION
問い合わせドメインに対する回答 IPアドレス、TTL、レコードのクラスとタイプ等
- AUTHORITY SECTION
権威DNSサーバの情報 問い合わせたDNSサーバの一覧を表示
- ADDITIONAL SECTION
その他問い合わせ情報の詳細
問い合わせから回答までの時間、問い合わせに使用したDNSサーバ等
DIGコマンドのオプション
# dig ドメイン名 +short
# dig -x [IPアドレス]
# dig ドメイン名 +NS
# dig ドメイン名 +MX
# dig @dnsサーバ ドメイン名
# dig ドメイン名 -4
# dig ドメイン名 -6
※問い合わせを行った結果、タイムアウトエラーが返っていきています。
dig +trace を使ってルートサーバに問い合わせているかを確認
+traceを使うことでネームサーバのように動作し、ルートサーバ等権威サーバへ問い合わせを行うような動作をします。
まず「 . 」のルートドメインを知るネームサーバ、ルートサーバが解決されます。ここにはA~MまでのNSレコードが13あり、ルートサーバが13あることが分かります。
;; Received 525 bytes from 8.8.8.8#53(8.8.8.8) in 3 ms
この結果を返してくれたのが「8.8.8.8」のgoogleのDNSサーバ53番ポートでこの結果を返してきてくれています。
;; Received 1201 bytes from 192.36.148.17#53(i.root-servers.net) in 7 ms
次に.comのネームサーバも13か所から返答が帰ってきています。
結果を返してきてくれたのは192.36.148.17#53(i.rootservers.net)というサーバです。
;; Received 661 bytes from 192.42.93.30#53(g.gtld-servers.net) in 117 ms
結果を返してきてくれたのは192.42.93.30#53(g.gtld-servers.net)というサーバです。
※gTLDは、generic Top-Level Domain といい、分野別のトップレベルドメインを意味する。
;; Received 128 bytes from 202.239.81.35#53(ns02.secuavail.com) in 15 ms
ここで、secuavail.com.のネームサーバとIPアドレスが返ってきています。
結果を返してきたのが202.239.81.35#53(ns02.secuavail.com)というネームサーバで
Secuavail.comのIPアドレスが18.180.167.106という回答が返ってきます。
この回答を元にキャッシュDNSサーバはDNSクライアントにドメインに対するIPアドレスを返し、DNSクライアントはWebサイトのあるサーバへアクセスすることができます。
記事まとめ
以上、DIGコマンドを使用したDNSサーバについての説明でした。普段何気なく使用するインターネットですが、DNS一つを調べても内容が深く記事にできないことが多くありました。今後も気になったことを勉強しながら少しずつ報告できたらいいなと思います。
記載されている会社名、システム名、製品名は一般に各社の登録商標または商標です。
当社製品以外のサードパーティ製品の設定内容につきましては、弊社サポート対象外となります。