2026年6月17日
2026年6月17日
host の出力を読み解くポイント|1行ずつの文の意味と、not found・タイムアウトの見分け方
host コマンドの出力は、「名前+決まった言い回し+値」の英文が1行に1件ずつ並ぶ形です。読むときは、まず「答えの行が出ているか、エラーの行だけか」を見て、次に言い回しからレコード種別を読み取り、最後に「どのサーバーが答えたか」を確かめます。この記事では、正常な応答の各行の意味、何も返らないときのメッセージの読み分け、TTL などの詳しい情報を見たいときの切り替え方を説明します。
host は BIND 9 に含まれる問い合わせ用のコマンドで、Debian・Ubuntu では bind9-host(または bind9-dnsutils)、RHEL 系では bind-utils のパッケージで入ります。言い回しの細部は版によって変わることがあるため、ここでの例は執筆時点(2026年10月現在)の BIND 9 の表示を基準にしています。
最初に「何を聞いて、誰が答えたか」を確かめる
host に名前だけを渡すと、種別を指定しなくても A・AAAA・MX の3種類をまとめて問い合わせます。存在しない種別の行は表示されないのが普通なので、AAAA の行が無ければ「IPv6 のアドレスは登録されていない」と読みます。特定の種別だけを見たいときは -t で指定します。
host www.example.com
host -t TXT example.com
host -t NS example.com
問い合わせ先のサーバーを名前の後ろに書いた場合は、出力の先頭に、どのサーバーへ問い合わせたかを示すブロックが付きます。
$ host www.example.com 8.8.8.8
Using domain server:
Name: 8.8.8.8
Address: 8.8.8.8#53
Aliases:
www.example.com has address 192.0.2.10
Address: の #53 はポート番号です。サーバーを省いたときはこのブロックが出ず、OS に設定されたサーバー(Linux なら多くの場合 /etc/resolv.conf の nameserver)が答えています。Ubuntu などで systemd-resolved が動いていると、ここが 127.0.0.53 になり、手元のスタブリゾルバーを経由した答えになります。結果を他の人と比べるときは、問い合わせ先を明示しておくと話が食い違いません。
正常な応答の1行を読む
答えの行は、種別ごとに決まった言い回しで表示されます。主なものを並べます。
| 種別 | 表示の形 | 読み方 |
|---|---|---|
| A | 名前 has address 192.0.2.10 |
IPv4 アドレス |
| AAAA | 名前 has IPv6 address 2001:db8::10 |
IPv6 アドレス |
| CNAME | 名前 is an alias for 別名. |
別の名前への置き換え |
| MX | 名前 mail is handled by 10 mail.example.com. |
優先度とメールサーバー名 |
| NS | 名前 name server ns1.example.net. |
権威サーバー名 |
| TXT | 名前 descriptive text "v=spf1 ..." |
文字列 |
| SOA | 名前 has SOA record ns1... hostmaster... 2026101801 ... |
ゾーンの管理情報 |
| PTR | 10.2.0.192.in-addr.arpa domain name pointer host.example.com. |
逆引きの結果 |
ここに無い種別(CAA や SRV など)は、名前 has CAA record 0 issue "letsencrypt.org" のように「has 種別 record 値」の形で出ます。値の末尾にあるドットは、名前がルートまで書かれた完全な形であることを示すもので、誤りではありません。
CNAME の行は、次の行とセットで読む
www.example.com is an alias for example-site.cdn.example.net.
example-site.cdn.example.net has address 198.51.100.20
1行目で www が別名に置き換えられ、2行目のアドレスは置き換え先の名前のものです。アドレスが想定と違うとき、直すべき場所は自分のゾーンではなく置き換え先(CDN やホスティング事業者の側)である場合があります。どちらのゾーンの値かを、行の先頭の名前で見分けてください。
MX の数字は優先度
mail is handled by の後の数字は優先度で、小さいほど先に使われます。同じ数字が並ぶ場合は、送信側がどちらかを選びます。mail is handled by 0 . という行は Null MX と呼ばれる書き方で、「このドメインはメールを受け取らない」という宣言です。メールを受け取りたいドメインでこの行が出ていたら、DNS 事業者の初期設定などで入っていないかを確認します。
TXT は引用符の区切りに注意する
長い TXT は、"v=spf1 ip4:192.0.2.10 " "include:_spf.example.net ~all" のように引用符で区切られた複数の文字列で表示されることがあります。DNS では1つの文字列の長さに上限があるため分割されているだけで、SPF や DKIM を評価する側はつなげて1つの値として扱います。区切りの位置で空白が抜けていないか(つなげたときに単語がくっつかないか)を確認してください。
何も返らないときのメッセージを読み分ける
答えの行が無いときは、表示されるメッセージで状況がかなり絞れます。よく出る順に並べます。
Host 名前 not found: 3(NXDOMAIN)
その名前自体が存在しないという答えです。次の順に確認します。
- 名前のつづり。サブドメインの綴り違いが一番多い原因です。
- 検索ドメインの付加。後で説明するように、短い名前には社内ドメインなどが補われていることがあります。
- レコードの作成漏れ。DNS 事業者の管理画面で、そのホスト名のレコードがあるかを見ます。
- 否定応答のキャッシュ。作る前に一度問い合わせていると、「存在しない」という答えがしばらく残ります。権威サーバーを指定して
host 名前 ns1.example.netで聞き、そちらで引けるなら時間の問題です。
名前 has no MX record
-t で種別を指定したときに出る形で、名前は存在するが、その種別のレコードが無いという意味です(NODATA と呼ばれます)。NXDOMAIN とは違い、名前のつづりは合っています。登録した種別を間違えていないか(たとえば AAAA に IPv4 を入れようとしていないか)を確認します。
Host 名前 not found: 2(SERVFAIL)
問い合わせたキャッシュサーバーが、答えを作れなかったという意味です。原因として多いのは、DNSSEC の検証の失敗(親ゾーンの DS とゾーンの鍵が合わないなど)と、権威サーバーに到達できない、または権威サーバーがそのゾーンを持っていない状態です。権威サーバーに直接聞いて答えが返るなら、検証か経路の問題を疑い、dig の +cd で検証を外した問い合わせと比べます。
Host 名前 not found: 5(REFUSED)
サーバーが問い合わせを断ったという意味です。権威サーバーに、そのサーバーが担当していない名前を聞いた場合や、キャッシュサーバーが外部からの再帰問い合わせを許可していない場合に出ます。問い合わせ先が目的に合っているかを見直します。
;; connection timed out; no servers could be reached
どのサーバーからも返事が無かったという意味で、DNS の設定ではなく通信の問題です。問い合わせ先の IP の誤り、ファイアウォールでの 53 番ポートの遮断、サーバーの停止を順に疑います。別のサーバーを指定して成功するか、-T で TCP に切り替えて変わるかを確かめます。
なお、;; Truncated, retrying in TCP mode. は、応答が大きいため TCP で取り直したという経過の表示で、それ自体はエラーではありません。この後に失敗するなら、TCP の 53 番ポートが塞がれている可能性があります。
短い名前と検索ドメインに注意する
名前に含まれるドットが少ないと、host は /etc/resolv.conf の search に書かれたドメインを補って問い合わせることがあります。社内ネットワークで host www と打つと、実際には www.corp.example のような名前を聞いている場合があり、出力の名前の部分を見ると分かります。意図した名前そのものを聞きたいときは、末尾にドットを付けて host www.example.com. とします。
TTL やフラグを見たいときは -v に切り替える
通常の出力には TTL も応答のフラグも出ません。キャッシュがあとどのくらい残るか、権威サーバーの答えか(aa フラグ)を確かめたいときは -v を付けます。出力は dig と同じ形式になり、ヘッダー・各セクション・応答時間が表示されます。
# 詳しい形式で表示する
host -v www.example.com 8.8.8.8
# 権威サーバーに再帰なしで聞く
host -v -r www.example.com ns1.example.net
キャッシュサーバーに聞いた場合の TTL は残り秒数、権威サーバーに聞いた場合は設定値そのものです。同じ名前でも問い合わせ先によって数字の意味が変わる点に気をつけてください。権威サーバーごとに SOA のシリアル番号を並べたいときは host -C example.com が使えます。
スクリプトで使うときの注意
host の言い回しは人が読むためのもので、版によって細部が変わることがあります。出力を grep で切り出して自動処理に使うと、更新のときに動かなくなるおそれがあります。値だけを機械的に取り出したい場合は、dig +short や、JSON で出力できるツールを使うほうが安全です。
また、名前が見つからなかったときの終了コードは 0 以外になるのが一般的ですが、複数の種別をまとめて聞いた場合の扱いなどは版で確認してから、条件分岐に使ってください。
まとめ
- host の出力は「名前+言い回し+値」の1行で、言い回しからレコード種別が分かります。名前だけを渡すと A・AAAA・MX をまとめて聞きます。
Using domain server:のブロックで問い合わせ先を確かめ、比較するときはサーバーを明示します。- CNAME の行は次の行とセットで読み、アドレスがどのゾーンの値かを見分けます。
- NXDOMAIN は名前が無い、
has no ... recordは種別が無い、SERVFAIL は答えを作れなかった、REFUSED は断られた、timed out は通信の問題、と読み分けます。 - TTL や aa フラグは
-vで確認し、自動処理には dig+shortや JSON 出力を使います。