DNS(Domain Name System)

ドメイン名(人が読む)と IP アドレス(機械が使う)を変換する分散データベース。 インターネットで最も「無いと何も動かない」インフラ。

そもそもなぜ要るのか

ドメイン名の階層

www.example.co.jp.
└┘ └─────┘ └┘ └┘ └ ルート (.)
 ↑    ↑    ↑   ↑
 ホスト 2nd  2nd TLD
            (co)
      

TLD の種類

DNS の階層構造

                Root (.)
               /   |   \
            .com  .jp  .org
             |    /\
        example  co  ne
                 |
              example
                 |
                www
      

各層を管理するネームサーバが連携してクエリに答える。

名前解決の流れ

ブラウザ
  ↓ www.example.com を教えて
スタブリゾルバ(OS)
  ↓
ローカル DNS キャッシュ ── ヒットすれば即返す
  ↓ キャッシュなければ
フルサービスリゾルバ (ISP / 8.8.8.8 / 1.1.1.1)
  ↓
[1] ルートサーバへ問合せ
  → 「.com は次のサーバへ聞け」
[2] .com TLD サーバへ
  → 「example.com は次のサーバへ聞け」
[3] example.com の権威サーバ
  → 「www.example.com は 93.184.216.34」
  ↓
回答 + 各段でキャッシュ
      

レコードの種類

タイプ意味
AIPv4 アドレスexample.com → 93.184.216.34
AAAAIPv6 アドレスexample.com → 2606:2800:220:1::
CNAME別名(エイリアス)www.example.com → example.com
MXメールサーバexample.com → mail.example.com (priority 10)
TXT任意テキスト(SPF / DKIM / 認証)v=spf1 ...
NSネームサーバexample.com → ns1.example.com
SOAゾーンの管理情報シリアル番号、TTL 等
PTR逆引き(IP → 名前)34.216.184.93.in-addr.arpa
SRVサービス位置_xmpp._tcp.example.com
CAA証明書発行許可0 issue "letsencrypt.org"
HTTPS / SVCBHTTPS 用のヒントHTTP/3 サポート等

ゾーンファイルの例

$ORIGIN example.com.
$TTL 3600

@   IN  SOA  ns1.example.com. admin.example.com. (
              2026050101 ; serial
              7200       ; refresh
              3600       ; retry
              604800     ; expire
              86400 )    ; min TTL

@   IN  NS    ns1.example.com.
@   IN  NS    ns2.example.com.
@   IN  A     93.184.216.34
www IN  A     93.184.216.34
api IN  A     93.184.216.50
*   IN  A     93.184.216.34   ; ワイルドカード

@   IN  MX    10 mail.example.com.
@   IN  TXT   "v=spf1 include:_spf.google.com ~all"
      

TTL(Time To Live)

各レコードのキャッシュ期限。秒単位。

DNS パケット(簡略)

+-------------+
| Header (12B)|  ID, flags, counts
+-------------+
| Question    |  名前 + type + class
+-------------+
| Answer      |  実際の応答
+-------------+
| Authority   |
+-------------+
| Additional  |  glue records 等
+-------------+
      

権威サーバとリゾルバ

パブリック DNS

サービスIP
Cloudflare1.1.1.1 / 1.0.0.1
Google8.8.8.8 / 8.8.4.4
Quad99.9.9.9 (脅威ブロック)
OpenDNS208.67.222.222

DNS over HTTPS / TLS

従来の DNS は平文 UDPのため、ISP / 公衆 Wi-Fi で内容が見える / 改竄できる。

ブラウザ(Firefox / Chrome)や OS(Win11 / iOS / macOS / Android)で標準対応。

DNSSEC

応答を電子署名で検証する仕組み。改竄や偽応答を検知できる。 ルートからの信頼の連鎖を辿るため設定がやや複雑。日本では .jp ゾーンが対応。

DNS の用途いろいろ

メール認証

所有権確認

サービス検出

確認コマンド

# 詳しく
dig example.com
dig example.com AAAA
dig example.com MX
dig example.com TXT
dig +trace example.com   # ルートから順に追跡

# 簡易
nslookup example.com
host example.com

# システムの DNS で解決
getent hosts example.com  # Linux

# 1.1.1.1 で問合せ
dig @1.1.1.1 example.com

キャッシュ問題

# macOS
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder

# Linux (systemd-resolved)
sudo resolvectl flush-caches

# Windows
ipconfig /flushdns

# Chrome 内蔵キャッシュ
chrome://net-internals/#dns

よくあるトラブル

症状原因
名前解決できないDNS サーバ未設定 / 到達不可
変更が反映されないTTL 切れ待ち / キャッシュ
www だけつながる / @ だけつながるA / CNAME 設定漏れ
メール届かないSPF/DKIM/DMARC 設定不足、MX 不適切
HTTPS 証明書取得失敗CAA レコードで拒否されている
地域で違う IP が返るGeoDNS(CDN の挙動として正常)

運用 Tips

DNS は遅くて速い

名前解決が 1 ページの遅さに直結する。preconnect / dns-prefetch を使う、 短い TTL を使いすぎない、適切な権威 DNS(Cloudflare / Route53)を選ぶことで体感が変わる。