Skip to content
Published on

DNS完全攻略:ネームサーバー、DDNS、nslookup実践ガイド — ドメイン登録からトラブルシューティングまで

Authors

1. DNSの動作原理(どうさげんり)を完全理解(かんぜんりかい)

DNSとは? インターネットの電話帳(でんわちょう)

DNS(Domain Name System)は、人間(にんげん)が読(よ)めるドメイン名(めい)(例(れい):www.example.com)を、コンピュータが理解(りかい)できるIPアドレス(例:93.184.216.34)に変換(へんかん)するシステムです。1983年(ねん)にPaul MockapetrisがRFC 882、883で初(はじ)めて提案(ていあん)し、現在(げんざい)はRFC 1034、1035が基本仕様(きほんしよう)です。

DNSがなければ、すべてのWebサイトにアクセスする際(さい)にIPアドレスを直接(ちょくせつ)入力(にゅうりょく)する必要(ひつよう)があります。DNSはインターネットインフラの最(もっと)も基本的(きほんてき)でありながら、最も重要(じゅうよう)な構成要素(こうせいようそ)です。

ユーザー入力: www.example.com
     |
DNS Resolution(名前解決)
     |
IPアドレス: 93.184.216.34
     |
サーバーにHTTPリクエスト

DNS階層構造(かいそうこうぞう):RootからSubdomainまで

DNSはツリー構造(こうぞう)の階層的(かいそうてき)分散(ぶんさん)データベースです。最上位(さいじょうい)から下位(かい)へ:

          .  (Root)
         / \
      com   org   net   kr   jp  ...   (TLD - Top Level Domain)
       |
    example                             (SLD - Second Level Domain)
     / \
   www  mail  api                       (Subdomain)

各階層(かくかいそう)の役割(やくわり):

階層管理主体(かんりしゅたい)
Root (.).ICANN / IANA
TLD.com, .jp, .orgレジストリ(Verisign、JPRSなど)
SLDexample.comドメイン所有者(しょゆうしゃ)
Subdomainwww.example.comドメイン所有者

FQDN(Fully Qualified Domain Name)は末尾(まつび)にドット(.)を含(ふく)みます:www.example.com.

DNSクエリフロー:再帰的(さいきてき) vs 反復的(はんぷくてき)

DNS名前解決(なまえかいけつ)は2つの方式(ほうしき)を組(く)み合(あ)わせて動作(どうさ)します。

再帰的クエリ(Recursive Query): クライアントが再帰リゾルバに「最終回答(さいしゅうかいとう)を教(おし)えて」と要求(ようきゅう)します。リゾルバがすべてを代行(だいこう)します。

反復的クエリ(Iterative Query): 再帰リゾルバが各ネームサーバーに「このドメインを知(し)っている人(ひと)は?」と尋(たず)ね、ネームサーバーは「私(わたし)は知(し)らないけど、あちらに聞(き)いて」と次(つぎ)のサーバーを案内(あんない)します。

[ユーザーPC] -- 再帰的クエリ --> [再帰リゾルバ (ISP/8.8.8.8)]
                                        |
                                  反復的クエリ開始
                                        |
                        +---------------+---------------+
                        v               v               v
                 [Root Server]   [TLD Server]   [Authoritative NS]
                 "comはここ"     "example.com     "IP93.x.x.x"
                                  はここ"

詳細(しょうさい)フロー:

  1. ユーザーがブラウザにwww.example.comを入力
  2. ブラウザキャッシュ確認(かくにん) → OSキャッシュ確認 → hostsファイル確認
  3. OSが設定(せってい)された再帰リゾルバ(例:8.8.8.8)に再帰的クエリを送信(そうしん)
  4. 再帰リゾルバがキャッシュ確認 → なければRootサーバーに反復的クエリ
  5. Rootサーバー:「.com TLDサーバーはa.gtld-servers.net
  6. 再帰リゾルバがTLDサーバーにクエリ
  7. TLDサーバー:「example.comのネームサーバーはns1.example.com
  8. 再帰リゾルバが権威ネームサーバーにクエリ
  9. 権威ネームサーバー:「www.example.comのIPは93.184.216.34
  10. 再帰リゾルバが結果(けっか)をキャッシュしてクライアントに応答(おうとう)

13個(こ)のRootサーバーとAnycast

全世界(ぜんせかい)のDNSの起点(きてん)であるRootサーバーは名目上(めいもくじょう)13個(A~M)ですが、Anycast技術(ぎじゅつ)のおかげで実際(じっさい)には1,700以上(いじょう)のインスタンスが世界中(せかいじゅう)に分散されています。

Rootサーバー運営機関(うんえいきかん)インスタンス数(すう)(概算(がいさん))
AVerisign10+
BUSC-ISI6+
CCogent10+
DUniversity of Maryland200+
ENASA300+
FISC300+
JVerisign200+
KRIPE NCC100+
LICANN200+
MWIDE Project10+

Anycastとは? 同(おな)じIPアドレスを複数(ふくすう)の物理(ぶつり)サーバーに割(わ)り当(あ)てる技術です。ユーザーのクエリはBGPルーティングを通(つう)じて最(もっと)も近(ちか)いインスタンスに自動転送(じどうてんそう)されます。これにより、RootサーバーのIPは13個だけでも世界中で高速(こうそく)な応答が可能(かのう)です。

DNSキャッシング:パフォーマンスの鍵(かぎ)

DNSキャッシングは複数レベルで行(おこな)われます:

[ブラウザキャッシュ] -> [OSキャッシュ] -> [再帰リゾルバキャッシュ] -> [NSTTL]

Chrome: chrome://net-internals/#dns で確認可能
Windows: ipconfig /displaydns
Linux: systemd-resolve --statistics
macOS: sudo dscacheutil -flushcache

TTL(Time To Live)の理解(りかい):

example.com.    3600    IN    A    93.184.216.34
                 ^
              TTL = 3600秒(1時間)

TTL値(ち)による戦略(せんりゃく):

TTL値用途(ようと)メリットデメリット
60秒DNS変更予定時(へんこうよていじ)高速伝播(こうそくでんぱ)クエリ増加(ぞうか)、応答遅延(ちえん)
300秒(5分)一般的(いっぱんてき)なサービスバランスの取(と)れた選択(せんたく)-
3600秒(1時間)安定(あんてい)したサービス高速応答、クエリ削減(さくげん)変更反映(はんえい)が遅(おそ)い
86400秒(1日)ほとんど変(か)わらないレコード最高(さいこう)パフォーマンス緊急変更(きんきゅうへんこう)が困難(こんなん)

実践(じっせん)ヒント: DNS変更前にTTLを60秒に下(さ)げ、変更が完全(かんぜん)に伝播した後(あと)に元(もと)に戻(もど)しましょう。


2. ネームサーバー深堀(ふかぼ)り

権威(けんい)(Authoritative)vs 再帰(Recursive)ネームサーバー

区分(くぶん)Authoritative NSRecursive Resolver
役割特定ドメインの最終情報(じょうほう)を保持(ほじ)クライアントに代わりDNSツリーを巡回(じゅんかい)
データゾーンファイルの原本(げんぽん)データキャッシュされたデータ
ns1.cloudflare.com8.8.8.8(Google DNS)
運営主体ドメイン所有者/ホスティング業者(ぎょうしゃ)ISP、Google、Cloudflare
応答フラグAA(Authoritative Answer)ビット設定(せってい)AAビットなし

Primary(Master)vs Secondary(Slave)ネームサーバー

権威ネームサーバーはさらにPrimaryとSecondaryに分(わ)かれます。

[Primary NS] --ゾーン転送--> [Secondary NS]
  (読み書き)                   (読み取り専用)

  原本ゾーンファイル管理         Primary障害時のバックアップ
  レコード追加/変更/削除         負荷分散の役割

なぜSecondaryが必要(ひつよう)か?

  • 高可用性(こうかようせい):Primary障害(しょうがい)時にSecondaryが応答
  • 負荷分散(ふかぶんさん):クエリを分散処理(しょり)
  • 地理的(ちりてき)分散:ユーザーに近(ちか)い場所(ばしょ)に配置(はいち)
  • RFC 2182推奨(すいしょう):最低(さいてい)2つのネームサーバー運用(うんよう)

ゾーン転送(てんそう):AXFR vs IXFR

PrimaryからSecondaryへゾーンデータを複製(ふくせい)する方式です。

方式説明(せつめい)用途
AXFR全体(ぜんたい)ゾーンファイル転送初期同期(しょきどうき)、データ不整合(ふせいごう)時
IXFR変更分(へんこうぶん)のみ転送通常(つうじょう)の増分(ぞうぶん)アップデート
# AXFRテスト(セキュリティ上、外部からはブロックされるべき)
dig @ns1.example.com example.com AXFR

# SOAレコードのSerialで同期状態を確認
dig @ns1.example.com example.com SOA +short
# 2024032301 ns1.example.com. admin.example.com. ...

SOAレコードのシリアル番号(ばんごう): 慣習的(かんしゅうてき)にYYYYMMDDNN形式(けいしき)を使用(しよう)します(例:2026032301)。Serialが増加(ぞうか)するとSecondaryがゾーン転送を開始(かいし)します。

グルーレコード(Glue Record)の必要性(ひつようせい)

ドメインexample.comのネームサーバーがns1.example.comの場合(ばあい)、循環参照(じゅんかんさんしょう)問題(もんだい)が発生(はっせい)します:

Q: example.comのIPは?
-> example.comのネームサーバーはns1.example.com
-> ns1.example.comのIPは?
-> example.comのネームサーバーに聞く必要があるが...
-> 循環参照発生!

解決(かいけつ):グルーレコード

上位(じょうい)TLDサーバーにネームサーバーのIPを直接登録(とうろく)します:

;; .com TLDサーバーの委任レコード
example.com.    IN    NS    ns1.example.com.
example.com.    IN    NS    ns2.example.com.

;; グルーレコード(Additional Section)
ns1.example.com.    IN    A    203.0.113.1
ns2.example.com.    IN    A    203.0.113.2

主要(しゅよう)DNSソフトウェア

ソフトウェア種類(しゅるい)特徴(とくちょう)
BIND9権威/再帰兼用(けんよう)最(もっと)も古(ふる)いDNSサーバー。全機能(きのう)サポート
PowerDNS権威専用(せんよう)DBバックエンド対応(MySQL, PostgreSQL)
CoreDNS権威/再帰Go言語ベース、プラグインアーキテクチャ、K8sデフォルトDNS
Unbound再帰専用軽量(けいりょう)でセキュリティ重視(じゅうし)、DNSSEC検証(けんしょう)がデフォルト
Knot DNS権威専用高性能(こうせいのう)、モダンな設計(せっけい)
dnsmasq軽量キャッシング小規模(しょうきぼ)ネットワーク/ホームルーター向(む)け

Kubernetes内(ない)のCoreDNS

Kubernetes 1.13からCoreDNSがデフォルトDNSサーバーです。Pod内でサービス名(めい)で通信(つうしん)できるのはCoreDNSのおかげです。

# CoreDNS Corefile例
.:53 {
errors
health {
lameduck 5s
}
ready
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
fallthrough in-addr.arpa ip6.arpa
ttl 30
}
prometheus :9153
forward . /etc/resolv.conf
cache 30
loop
reload
loadbalance
}

K8s DNS解決(かいけつ)ルール:

# Podからサービスへのアクセス
my-service                          -> my-service.default.svc.cluster.local
my-service.other-ns                 -> my-service.other-ns.svc.cluster.local
my-service.other-ns.svc.cluster.local -> 完全なFQDN

# Podの/etc/resolv.conf
nameserver 10.96.0.10          # CoreDNS ClusterIP
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:5                # ドット(.)5個未満ならsearchドメインを追加

ndots:5の意味(いみ): api.example.comはドットが2個(5未満(みまん))なので、K8sはまずapi.example.com.default.svc.cluster.localなどを試(こころ)みます。これが外部(がいぶ)DNS解決を遅(おそ)くする原因(げんいん)になるため、外部ドメインはFQDN(末尾に.を追加)で指定(してい)することが推奨されます。


3. DNSレコードタイプ総整理(そうせいり)

主要レコードタイプ

タイプ用途
AIPv4アドレスマッピングexample.com. IN A 93.184.216.34
AAAAIPv6アドレスマッピングexample.com. IN AAAA 2606:2800:220:1::
CNAMEエイリアス(別ドメインへポインティング)www.example.com. IN CNAME example.com.
MXメールサーバー指定(してい)example.com. IN MX 10 mail.example.com.
TXTテキスト情報(SPF, DKIMなど)example.com. IN TXT "v=spf1 ..."
NSネームサーバー指定example.com. IN NS ns1.example.com.
SOAゾーン権限(けんげん)情報シリアル、リフレッシュ、有効期限(ゆうこうきげん)など
SRVサービスの場所(ばしょ)_sip._tcp.example.com. IN SRV 10 60 5060 sip.example.com.
CAA証明書発行権限(しょうめいしょはっこうけんげん)example.com. IN CAA 0 issue "letsencrypt.org"
PTR逆引(ぎゃくひ)き(IP→ドメイン)34.216.184.93.in-addr.arpa. IN PTR example.com.
NAPTRURI変換規則(へんかんきそく)SIP、ENUMで使用

CNAMEの制約(せいやく)

# OK - サブドメインにCNAME
www.example.com.    IN    CNAME    example.com.

# NG - ルートドメイン(Apex)にCNAME使用不可!
# example.com.       IN    CNAME    other.com.    (RFC違反)

# 解決策: ALIAS/ANAME(非標準)またはCloudflareのCNAME Flattening

なぜApexにCNAMEを使(つか)えないのか? CNAMEは同名(どうめい)の他(ほか)のすべてのレコードと共存(きょうぞん)できません。しかしApexドメインには必(かなら)ずSOA、NSレコードが存在(そんざい)しなければならず、CNAMEと衝突(しょうとつ)します。

メール認証(にんしょう)の三銃士(さんじゅうし):SPF、DKIM、DMARC

メールスパムとフィッシングを防止(ぼうし)するための3つのDNSベース認証体系(たいけい)です。

SPF(Sender Policy Framework):

example.com.  IN  TXT  "v=spf1 include:_spf.google.com include:sendgrid.net ip4:203.0.113.0/24 -all"
メカニズム意味(いみ)
include:domainそのドメインのSPFも許可(きょか)
ip4:CIDRそのIP帯域(たいいき)を許可
aドメインのAレコードIPを許可
mxMXレコードのIPを許可
-all上記以外(いがい)すべて拒否(きょひ)
~all上記以外ソフト失敗(しっぱい)

DKIM(DomainKeys Identified Mail):

selector1._domainkey.example.com.  IN  TXT  "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEB..."

メールサーバーがメールに電子署名(でんししょめい)を追加(ついか)し、受信(じゅしん)サーバーがDNSの公開鍵(こうかいかぎ)で検証します。

DMARC(Domain-based Message Authentication, Reporting, and Conformance):

_dmarc.example.com.  IN  TXT  "v=DMARC1; p=reject; rua=mailto:dmarc-reports@example.com; pct=100"
ポリシー意味
p=none監視(かんし)のみ(レポート収集(しゅうしゅう))
p=quarantine疑(うたが)わしいメールを迷惑(めいわく)メールフォルダへ
p=reject認証失敗メールを拒否

実践ゾーンファイル例(BIND形式)

$TTL 3600
$ORIGIN example.com.

@       IN  SOA   ns1.example.com. admin.example.com. (
                  2026032301  ; Serial (YYYYMMDDNN)
                  3600        ; Refresh(1時間)
                  900         ; Retry(15分)
                  1209600     ; Expire(2週間)
                  86400       ; Minimum TTL1日)
                  )

; ネームサーバー
@       IN  NS    ns1.example.com.
@       IN  NS    ns2.example.com.

; Aレコード
@       IN  A     203.0.113.10
www     IN  A     203.0.113.10
api     IN  A     203.0.113.20

; AAAAレコード
@       IN  AAAA  2001:db8::10

; CNAME
blog    IN  CNAME example.github.io.
docs    IN  CNAME readthedocs.io.

; MXレコード(数値が小さいほど優先度が高い)
@       IN  MX    10 mail.example.com.
@       IN  MX    20 mail2.example.com.
mail    IN  A     203.0.113.30

; TXTレコード
@       IN  TXT   "v=spf1 include:_spf.google.com -all"
_dmarc  IN  TXT   "v=DMARC1; p=reject; rua=mailto:dmarc@example.com"

; SRVレコード
_sip._tcp  IN  SRV  10 60 5060 sip.example.com.

; CAAレコード
@       IN  CAA   0 issue "letsencrypt.org"
@       IN  CAA   0 issuewild "letsencrypt.org"

4. ドメイン登録(とうろく)・移管(いかん)実践ガイド

ドメイン登録の仕組(しく)み

[ICANN] --管理--> [レジストリ] --委任--> [レジストラ] --販売--> [リセラー]
                  (Verisignなど)        (お名前.com等)          (ホスティング業者等)

レジストリ(Registry): TLD全体を管理(例:.comはVerisign)
レジストラ(Registrar): ICANNの認定を受けてドメイン登録を代行
リセラー(Reseller): レジストラの再販パートナー

日本(にほん)のレジストラ比較(ひかく)

レジストラ.com年間費用(ねんかんひよう).jp年間費用特徴
お名前.com約(やく)1,408円約3,124円国内最大(こくないさいだい)、セール頻繁(ひんぱん)
ムームードメイン約1,728円約3,344円GMOグループ、シンプル
さくらインターネット約1,886円約3,982円ホスティング連携(れんけい)が便利(べんり)
Xserver Domain約1,298円約2,508円Xserver利用者(りようしゃ)に最適(さいてき)

海外(かいがい)レジストラ比較

レジストラ.com年間費用特徴
Cloudflare Registrar約10.11 USD原価(げんか)販売、マークアップなし
Namecheap約8.88 USD(初年度(しょねんど))更新価格(こうしんかかく)の上昇(じょうしょう)に注意(ちゅうい)
Porkbun約9.73 USDコストパフォーマンスが良(よ)い
Google Domainsサービス終了 → Squarespace移管2023年終了

Cloudflare Registrarをお勧(すす)めする理由(りゆう):

  • 卸値(おろしね)(原価)そのまま販売(マークアップ0)
  • 更新価格も同(おな)じ
  • 無料(むりょう)DNSSEC、Whois Privacy
  • Cloudflare CDN/セキュリティとの統合(とうごう)が容易(ようい)

ドメイン移管(Transfer)手順(てじゅん)

1. 現在のレジストラでTransfer Lock(ドメインロック)を解除
2. Auth Code(認証コード / EPPコード)を取得
3. 新しいレジストラでTransfer申請 + Auth Code入力
4. 旧レジストラからの承認メール確認(57日待機)
5. 移管完了後、DNS設定を確認

注意事項:
- 登録/移管後60日間は再移管不可(ICANN 60-Day Lock)
- 有効期限15日以内のドメインは移管不可
- .jpドメインはJPRS規定による別途手続き

WhoisとRDAP

# Whois検索
whois example.com

# RDAP(Whois後継、JSONベース)
curl -s "https://rdap.verisign.com/com/v1/domain/example.com" | jq .

RDAP(Registration Data Access Protocol)の利点(りてん):

  • 標準化(ひょうじゅんか)されたJSON応答
  • HTTPSによるセキュアな転送
  • 国際化(こくさいか)(IDN)サポート
  • 差別化(さべつか)されたアクセス制御(せいぎょ)

5. DDNS(Dynamic DNS)完全(かんぜん)ガイド

DDNSが必要な理由

家庭用(かていよう)インターネットは通常(つうじょう)、動的(どうてき)IPアドレスを割(わ)り当(あ)てられます。ISPが定期的(ていきてき)に(またはルーター再起動時(さいきどうじ)に)IPを変更するため、固定(こてい)IPなしでは自宅(じたく)サーバーの運用が困難(こんなん)です。

問題:
  自宅サーバーIP: 211.xxx.xxx.100(昨日)
  自宅サーバーIP: 211.xxx.xxx.200(今日) <- IP変更!

  DNS: myserver.example.com -> 211.xxx.xxx.100(昨日登録)
  -> 接続不可!

解決(DDNS):
  IP変更検知 -> 自動的にDNSレコード更新
  myserver.example.com -> 211.xxx.xxx.200(自動更新)

DDNSサービス比較

サービス無料カスタムドメイン更新間隔(こうしんかんかく)特徴
DuckDNS無料不可(*.duckdns.orgのみ)リアルタイム完全無料、オープンソース
No-IP無料(30日更新)有料5分3つの無料ホスト名
Cloudflare DDNS無料可能(自身のドメイン)リアルタイムAPIで自作(じさく)が必要
Synology DDNS無料不可(*.synology.me)リアルタイムSynology NAS専用
Dynu無料可能(4つまで)リアルタイムIPv6対応(たいおう)

実践セットアップ1:ddclient(Linux)

# インストール
sudo apt install ddclient

# /etc/ddclient.conf設定(Cloudflare例)
protocol=cloudflare
use=web, web=https://api.ipify.org
zone=example.com
login=your-email@example.com
password=your-cloudflare-api-token
myserver.example.com

# サービス開始
sudo systemctl enable ddclient
sudo systemctl start ddclient

# 状態確認
sudo systemctl status ddclient
sudo ddclient -query

実践セットアップ2:Cloudflare APIでDDNSを自作

#!/bin/bash
# cloudflare-ddns.sh

# 設定
CF_API_TOKEN="your-api-token-here"
CF_ZONE_ID="your-zone-id-here"
CF_RECORD_NAME="myserver.example.com"
CF_RECORD_ID="your-record-id-here"

# 現在のグローバルIPを確認
CURRENT_IP=$(curl -s https://api.ipify.org)

# DNSに登録されているIPを確認
DNS_IP=$(dig +short "$CF_RECORD_NAME" @1.1.1.1)

# IPが変更されていれば更新
if [ "$CURRENT_IP" != "$DNS_IP" ]; then
    echo "IP changed: $DNS_IP -> $CURRENT_IP"

    curl -s -X PUT \
        "https://api.cloudflare.com/client/v4/zones/$CF_ZONE_ID/dns_records/$CF_RECORD_ID" \
        -H "Authorization: Bearer $CF_API_TOKEN" \
        -H "Content-Type: application/json" \
        --data "{\"type\":\"A\",\"name\":\"$CF_RECORD_NAME\",\"content\":\"$CURRENT_IP\",\"ttl\":60,\"proxied\":false}"

    echo "DNS updated successfully"
else
    echo "IP unchanged: $CURRENT_IP"
fi
# crontabに登録(5分ごとに実行)
crontab -e
# */5 * * * * /home/user/cloudflare-ddns.sh >> /var/log/ddns.log 2>&1

実践セットアップ3:Docker + DDNS自動更新

# docker-compose.yml
version: '3'
services:
  cloudflare-ddns:
    image: oznu/cloudflare-ddns:latest
    restart: always
    environment:
      - API_KEY=your-cloudflare-api-token
      - ZONE=example.com
      - SUBDOMAIN=myserver
      - PROXIED=false
      - RRTYPE=A
      - DELETE_ON_STOP=false
      - DNS_SERVER=1.1.1.1
docker-compose up -d

自宅サーバー運用:DDNS + Let's Encrypt + Nginx Proxy Manager

[インターネット] -> [ルーターポートフォワーディング] -> [Nginx Proxy Manager] -> [サービス]
                                                            |
                                                      Let's Encrypt
                                                      自動SSL発行
# docker-compose.yml - 自宅サーバースタック
version: '3'
services:
  nginx-proxy-manager:
    image: jc21/nginx-proxy-manager:latest
    restart: unless-stopped
    ports:
      - '80:80'
      - '443:443'
      - '81:81' # 管理パネル
    volumes:
      - ./npm-data:/data
      - ./npm-letsencrypt:/etc/letsencrypt

  cloudflare-ddns:
    image: oznu/cloudflare-ddns:latest
    restart: always
    environment:
      - API_KEY=your-cf-token
      - ZONE=example.com
      - SUBDOMAIN=home

ポートフォワーディング + ファイアウォール設定

ルーター設定:
  外部 80 -> 内部 192.168.1.100:80
  外部 443 -> 内部 192.168.1.100:443

Linux ファイアウォール(UFW):
  sudo ufw allow 80/tcp
  sudo ufw allow 443/tcp
  sudo ufw enable

セキュリティ注意事項(ちゅういじこう):

  • 22番(SSH)ポートは外部に絶対(ぜったい)公開(こうかい)しないこと(VPNまたはTailscaleを使用)
  • 管理パネル(81番)も外部からブロック
  • fail2banでブルートフォース攻撃(こうげき)を防御(ぼうぎょ)
  • Cloudflare Proxyを有効(ゆうこう)にしてオリジンIPの漏洩(ろうえい)を防止

6. nslookup完全活用法(かつようほう)

基本的(きほんてき)な使(つか)い方(かた)

# 基本検索
nslookup example.com
# Server:  8.8.8.8
# Address: 8.8.8.8#53
#
# Non-authoritative answer:
# Name:    example.com
# Address: 93.184.216.34

# 特定のDNSサーバーで検索
nslookup example.com 1.1.1.1

レコードタイプ別(べつ)検索(けんさく)

# MXレコード(メールサーバー)
nslookup -type=mx gmail.com
# gmail.com  mail exchanger = 5 gmail-smtp-in.l.google.com.
# gmail.com  mail exchanger = 10 alt1.gmail-smtp-in.l.google.com.

# AAAAレコード(IPv6)
nslookup -type=aaaa google.com

# TXTレコード(SPF, DKIMなど)
nslookup -type=txt example.com

# NSレコード(ネームサーバー)
nslookup -type=ns example.com

# SOAレコード(ゾーン情報)
nslookup -type=soa example.com

# CAAレコード(証明書発行権限)
nslookup -type=caa example.com

# SRVレコード(サービスの場所)
nslookup -type=srv _sip._tcp.example.com

# ANY(すべてのレコード - 一部サーバーはブロック)
nslookup -type=any example.com

対話(たいわ)モード

nslookup
> server 8.8.8.8          # DNSサーバー変更
> set type=mx              # レコードタイプ設定
> gmail.com                # 検索
> set type=txt
> example.com
> set debug                # デバッグモードON
> example.com              # 詳細情報出力
> set d2                   # さらに詳細なデバッグ
> exit

逆引(ぎゃくひ)き検索(PTR)

# IP -> ドメイン検索
nslookup 8.8.8.8
# 8.8.8.8.in-addr.arpa  name = dns.google.

nslookup 1.1.1.1
# 1.1.1.1.in-addr.arpa  name = one.one.one.one.

実践例(じっせんれい)10選(せん)

# 1. ドメインのネームサーバーを確認
nslookup -type=ns example.com

# 2. メールサーバーを確認(メール問題のデバッグ)
nslookup -type=mx company.com

# 3. SPFレコードを確認(メールスパム問題)
nslookup -type=txt example.com

# 4. Google DNS vs Cloudflare DNS比較
nslookup example.com 8.8.8.8
nslookup example.com 1.1.1.1

# 5. IPv6アドレスを確認
nslookup -type=aaaa facebook.com

# 6. ワイルドカードサブドメインをテスト
nslookup nonexistent-sub.example.com

# 7. CAAレコードを確認(SSL証明書発行前)
nslookup -type=caa example.com

# 8. 逆引きDNS確認(IP所有者の特定)
nslookup 203.0.113.1

# 9. CNAMEチェーンを追跡
nslookup -type=cname www.example.com

# 10. SOAレコードでDNS管理者を確認
nslookup -type=soa example.com

7. digコマンドマスタリー

dig vs nslookupの違(ちが)い

項目(こうもく)dignslookup
出力(しゅつりょく)詳細(しょうさい)(セクション別)簡潔(かんけつ)
DNSSEC対応(+dnssec)非対応(ひたいおう)
トレース対応(+trace)非対応
バッチモード対応(-f)非対応
インストールbind-utils/dnsutilsほとんどプリインストール
推奨用途DevOps/SRE簡単な確認

基本的な使い方

# 基本検索
dig example.com

# 出力構造:
# ;; QUESTION SECTION:    <- 質問
# ;example.com.           IN  A
#
# ;; ANSWER SECTION:      <- 回答
# example.com.      3600  IN  A  93.184.216.34
#
# ;; AUTHORITY SECTION:   <- 権威ネームサーバー
# example.com.      3600  IN  NS  a.iana-servers.net.
#
# ;; ADDITIONAL SECTION:  <- 追加情報
# a.iana-servers.net. 3600 IN  A  199.43.135.53
#
# ;; Query time: 23 msec
# ;; SERVER: 8.8.8.8#53(8.8.8.8)

よく使(つか)うオプション

# 短い出力(IPのみ)
dig +short example.com
# 93.184.216.34

# 特定のレコードタイプ
dig example.com MX
dig example.com AAAA
dig example.com TXT
dig example.com NS
dig example.com SOA
dig example.com CAA

# DNSサーバーを指定
dig @8.8.8.8 example.com
dig @1.1.1.1 example.com

# 応答時間のみ確認
dig example.com | grep "Query time"
# ;; Query time: 23 msec

Rootからトレース:+trace

# Rootから全DNS解決プロセスをトレース
dig +trace example.com

# 出力(要約):
# .                   518400  IN  NS  a.root-servers.net.  <- Root
# com.                172800  IN  NS  a.gtld-servers.net.  <- TLD
# example.com.         86400  IN  NS  a.iana-servers.net.  <- Authoritative
# example.com.          3600  IN  A   93.184.216.34        <- 最終回答

DNSトラブルシューティングで最も有用(ゆうよう)なコマンドの一(ひと)つです。どの段階(だんかい)で問題が発生しているかを正確(せいかく)に把握(はあく)できます。

DNSSEC検証

# DNSSEC署名情報を確認
dig +dnssec example.com

# DNSSEC有効性の検証
dig +sigchase +trusted-key=/etc/trusted-key.key example.com

# DNSSEC関連レコードを直接検索
dig example.com DNSKEY
dig example.com DS
dig example.com RRSIG
dig example.com NSEC

バッチ検索

# ファイルのすべてのドメインを一括検索
cat domains.txt
# example.com
# google.com
# github.com

dig -f domains.txt +short

# 特定レコードタイプでバッチ検索
dig -f domains.txt MX +short

高度(こうど)なオプション

# TCPモードで検索(UDP代わり)
dig +tcp example.com

# 特定セクションのみ出力
dig +noall +answer example.com    # 回答のみ
dig +noall +authority example.com  # 権限セクションのみ
dig +noall +stats example.com     # 統計のみ

# TTL付き省略出力
dig +nocmd +noall +answer +ttlid example.com

# 逆引き検索
dig -x 8.8.8.8
# 8.8.8.8.in-addr.arpa.  IN  PTR  dns.google.

# CHAOSクラスでDNSサーバーバージョンを確認
dig @ns1.example.com version.bind CHAOS TXT

# EDNS Client Subnetテスト
dig +subnet=203.0.113.0/24 example.com @8.8.8.8

実践例15選

# 1. 特定ネームサーバーから権威ある応答を確認
dig @ns1.example.com example.com +norecurse

# 2. DNS伝播確認(複数DNSサーバーを比較)
for dns in 8.8.8.8 1.1.1.1 9.9.9.9 208.67.222.222; do
  echo "=== $dns ==="
  dig @$dns example.com +short
done

# 3. CNAMEチェーン全体をトレース
dig +trace +nodnssec www.example.com CNAME

# 4. MXレコードの優先順位を確認
dig example.com MX +short | sort -n

# 5. SPFレコードを確認
dig example.com TXT +short | grep spf

# 6. DKIMレコードを確認
dig selector1._domainkey.example.com TXT +short

# 7. DMARCポリシーを確認
dig _dmarc.example.com TXT +short

# 8. CAAレコードを確認(SSL発行前)
dig example.com CAA +short

# 9. SOAのシリアル番号を確認(ゾーン転送の同期)
dig example.com SOA +short

# 10. 応答時間を比較(DNSパフォーマンステスト)
for i in $(seq 1 10); do
  dig example.com @8.8.8.8 | grep "Query time"
done

# 11. IPv6レコードを確認
dig example.com AAAA +short

# 12. ワイルドカードDNSを確認
dig random-subdomain.example.com +short

# 13. NSEC/NSEC3でDNSSEC認証された不存在証明
dig nonexistent.example.com NSEC

# 14. DNS応答サイズを確認(DDoS増幅テスト)
dig example.com ANY +bufsize=4096

# 15. 全ゾーンエクスポートを試行(セキュリティ監査)
dig @ns1.example.com example.com AXFR

8. DNSセキュリティ

DNS攻撃(こうげき)の種類(しゅるい)

1. DNSキャッシュポイズニング(Cache Poisoning)

正常: リゾルバ -> Authoritative NS -> 正確なIP
攻撃: 攻撃者が偽の応答をリゾルバキャッシュに注入
結果: ユーザーがフィッシングサイトに誘導される

防御: DNSSEC、ランダムソースポート、0x20エンコーディング

2. DNS増幅(ぞうふく)DDoS

攻撃方式:
1. 攻撃者がソースIPを被害者のIPに偽装(IP Spoofing)
2. オープンリゾルバに大きな応答を生成するクエリを送信(ANYタイプ)
3. 小さなクエリ -> 大きな応答 = 増幅効果(5070倍)
4. すべての応答が被害者に集中

防御: BCP38(ソースアドレス検証)、RRL(Response Rate Limiting)

3. DNSハイジャック

方法1: ルーター/ISPレベルでDNS応答を改ざん
方法2: レジストラアカウントを乗っ取り -> ネームサーバー変更
方法3: マルウェアがシステムDNS設定を変更

防御: DNSSEC、レジストラアカウント2FA、DNS監視

4. DNSトンネリング

目的: DNSプロトコルを悪用してデータ漏洩/リモート制御
方式: DNSクエリ/応答にエンコードされたデータを隠す

: malicious-data.encoded.evil.comTXTクエリ
-> ファイアウォールは正常なDNSトラフィックと認識

防御: DNSクエリ長/頻度の監視、DNSファイアウォール

DNSSECの動作原理(どうさげんり)

DNSSECはDNS応答の完全性(かんぜんせい)と出所(しゅっしょ)を暗号学的(あんごうがくてき)に検証します。

信頼の連鎖(Chain of Trust):
  Root (.) -> .com -> example.com

  各レベルで:
  1. DNSKEY: ゾーンの公開鍵
  2. RRSIG: 各レコードの電子署名
  3. DS: 子ゾーンの公開鍵ハッシュ(親ゾーンに保存)
  4. NSEC/NSEC3: 「この名前は存在しない」の証明
# DNSSEC検証を確認
dig +dnssec example.com

# 応答に'ad'フラグがあればDNSSEC検証成功
# flags: qr rd ra ad; QUERY: 1, ANSWER: 2

# DNSKEYを検索
dig example.com DNSKEY +short

# DSレコードを検索(親ゾーンから)
dig example.com DS +short

DNS over HTTPS(DoH)/ DNS over TLS(DoT)

従来(じゅうらい)のDNSは平文(ひらぶん)のUDP/TCPで送信されるため、ISPやネットワーク管理者(かんりしゃ)がDNSクエリを閲覧(えつらん)/改(かい)ざんできます。

プロトコルポート暗号化(あんごうか)特徴
通常DNS53(UDP/TCP)なし盗聴(とうちょう)/改ざん可能
DoT853(TCP)TLS専用ポートでブロック可能
DoH443(HTTPS)HTTPSHTTPSトラフィックに紛(まぎ)れ、ブロック困難
DoQ853(QUIC)QUIC最新(さいしん)、低遅延(ていちえん)
# DoHでDNS検索(curl)
curl -s -H "accept: application/dns-json" \
  "https://1.1.1.1/dns-query?name=example.com&type=A" | jq .

# DoHサービス
# Cloudflare: https://1.1.1.1/dns-query
# Google: https://dns.google/dns-query
# Quad9: https://dns.quad9.net/dns-query

# DoTテスト(kdig使用)
kdig -d @1.1.1.1 +tls-ca +tls-host=cloudflare-dns.com example.com

DNSフィルタリング:Pi-hole、NextDNS、AdGuard Home

[デバイス] -> [DNSフィルター] -> [許可されたクエリのみ通過] -> [インターネット]
                 |
           広告/悪意あるドメインをブロック
           トラッカーをブロック
           成人コンテンツフィルタリング
ソリューション種類特徴
Pi-holeセルフホスティングRaspberry Piで運用、ネットワーク全体に適用
NextDNSクラウド月30万クエリ無料、設定が簡単
AdGuard HomeセルフホスティングDoH/DoTサポート、Web UI

エンタープライズ:DNSファイアウォールとRPZ

RPZ(Response Policy Zone):
  DNSファイアウォールで特定ドメインの応答を上書きする技術

例(BIND RPZ):
; rpz.db
evil-domain.com        CNAME  .           ; NXDOMAIN応答
malware-c2.com         CNAME  .           ; ブロック
phishing-site.com      A      10.0.0.1    ; 警告ページにリダイレクト

9. 実践トラブルシューティング10シナリオ

シナリオ1:ドメインを登録したのにアクセスできない(伝播遅延(でんぱちえん))

症状(しょうじょう): ドメインを登録してAレコードを設定したが、ブラウザからアクセスできない。

原因: DNS伝播(Propagation)は全世界のDNSサーバーのキャッシュが更新されるまで最大48時間かかります。

# 診断
# 1. 権威ネームサーバーから直接確認(これが成功すれば設定は正常)
dig @ns1.your-dns-provider.com yourdomain.com A +short

# 2. 複数のパブリックDNSで伝播状態を確認
dig @8.8.8.8 yourdomain.com +short
dig @1.1.1.1 yourdomain.com +short
dig @9.9.9.9 yourdomain.com +short

# 3. オンラインツールで全世界の伝播を確認
# https://www.whatsmydns.net/

解決:

  • 待(ま)ちます(最大48時間、通常1~4時間)
  • ローカルDNSキャッシュを強制削除(きょうせいさくじょ):ipconfig /flushdns(Windows)またはsudo dscacheutil -flushcache(macOS)
  • 事前(じぜん)にTTLを低(ひく)く設定していれば、より速(はや)く伝播します

シナリオ2:SSL証明書の発行失敗(はっこうしっぱい)(CAAレコード)

症状: Let's EncryptでSSL証明書を発行しようとしたが失敗する。

# 診断: CAAレコードを確認
dig yourdomain.com CAA +short
# 0 issue "digicert.com"   <- Let's Encryptが許可リストにない!

# 解決: CAAレコードを追加または修正
# yourdomain.com. IN CAA 0 issue "letsencrypt.org"
# yourdomain.com. IN CAA 0 issuewild "letsencrypt.org"

# CAAレコードがなければすべてのCAが発行可能(デフォルト)
dig yourdomain.com CAA +short
# (空の応答 = 制限なし)

シナリオ3:メールが迷惑(めいわく)メールフォルダに入(はい)る(SPF/DKIM/DMARC)

症状: 送信(そうしん)したメールが受信者(じゅしんしゃ)の迷惑メールフォルダに入る。

# 診断1: SPFレコードを確認
dig yourdomain.com TXT +short | grep spf
# "v=spf1 include:_spf.google.com -all"

# 診断2: DKIMレコードを確認(selectorはメールヘッダーで確認)
dig google._domainkey.yourdomain.com TXT +short

# 診断3: DMARCポリシーを確認
dig _dmarc.yourdomain.com TXT +short
# "v=DMARC1; p=none; rua=mailto:dmarc@yourdomain.com"

# 解決チェックリスト:
# 1. SPFにメール送信サーバーのIP/ドメインが含まれているか確認
# 2. DKIM署名キーの登録を確認
# 3. DMARCポリシーを設定(最初はp=noneで監視)
# 4. DMARCレポートを分析後、p=quarantine -> p=reject の順で強化

シナリオ4:サブドメインが動作(どうさ)しない

症状: api.example.comは動(うご)くがstaging.example.comは動かない。

# 診断: サブドメインのレコードが存在するか確認
dig staging.example.com A +short
# (空の応答 = レコードなし)

dig api.example.com A +short
# 203.0.113.20(正常)

# ワイルドカードレコードを確認
dig *.example.com A +short

解決:

  • 該当(がいとう)サブドメインのA/CNAMEレコードを明示的(めいじてき)に追加
  • またはワイルドカード(*.example.com)レコードを設定
  • ワイルドカードは明示的レコードより優先度(ゆうせんど)が低(ひく)いことを覚(おぼ)えておきましょう

シナリオ5:DNS変更後、一部(いちぶ)のユーザーだけアクセスできない(TTLキャッシュ)

症状: DNSレコードを変更したが、あるユーザーは新(あたら)しいサーバーに、あるユーザーは以前(いぜん)のサーバーにアクセスする。

# 診断: 各DNSサーバーのキャッシュ状態を確認
dig @8.8.8.8 example.com +short    # Google DNS
dig @1.1.1.1 example.com +short    # Cloudflare DNS
dig @9.9.9.9 example.com +short    # Quad9

# TTLを確認
dig example.com | grep -A1 "ANSWER SECTION"
# example.com.  1800  IN  A  203.0.113.10
#                ^ 残りTTLがまだ高い

解決:

  • TTL時間分(じかんぶん)だけ待ちます
  • 次回(じかい)からはDNS変更の24時間前にTTLを60秒に下げましょう
  • 変更完了後、TTLを元の値に復元(ふくげん)

シナリオ6:nslookupは成功(せいこう)するがブラウザでアクセスできない

症状: nslookup example.comは正常に応答するが、Chromeでアクセスできない。

# 診断1: hostsファイルを確認
cat /etc/hosts          # Linux/macOS
type C:\Windows\System32\drivers\etc\hosts  # Windows

# 診断2: ブラウザDNSキャッシュを確認
# Chrome: chrome://net-internals/#dns -> Clear host cache

# 診断3: HSTS問題を確認
# Chrome: chrome://net-internals/#hsts
# ドメインを削除して再試行

# 診断4: プロキシ/VPN設定を確認
# ブラウザのプロキシ設定がDNSをバイパスする可能性

# 診断5: DNS over HTTPS設定を確認
# Chrome設定 -> プライバシーとセキュリティ -> セキュアDNSを使用

シナリオ7:ドメイン移管後(いかんご)にDNSが途切(とぎ)れる

症状: ドメインを別のレジストラに移管した後、サイトがダウンした。

# 診断: 現在のネームサーバーを確認
dig example.com NS +short
# 旧レジストラのネームサーバーが見えれば、まだ更新されていない

# 解決手順:
# 1. 新しいレジストラでDNSレコードを先に設定
# 2. 移管前にすべてのレコードを新しい場所に複製
# 3. ネームサーバーを変更
# 4. 旧ネームサーバーは最低48時間維持

予防法(よぼうほう): 移管前に必ず新しいレジストラにすべてのDNSレコードを先に設定しましょう。

シナリオ8:K8s内部(ないぶ)DNS解決失敗(しっぱい)(CoreDNS、ndots)

症状: Podから外部ドメイン(api.external.com)にアクセスできない、または非常(ひじょう)に遅い。

# 診断1: Pod内からDNS解決をテスト
kubectl exec -it debug-pod -- nslookup api.external.com

# 診断2: resolv.confを確認
kubectl exec -it debug-pod -- cat /etc/resolv.conf
# nameserver 10.96.0.10
# search default.svc.cluster.local svc.cluster.local cluster.local
# options ndots:5

# 診断3: CoreDNSログを確認
kubectl logs -n kube-system -l k8s-app=kube-dns

# 問題: ndots:5のため、api.external.com(ドット2個)は
# api.external.com.default.svc.cluster.local等を先に試行

解決:

# 方法1: FQDNを使用(末尾にドットを追加)
# コードで api.external.com. と呼び出す

# 方法2: PodのdnsConfigを設定
apiVersion: v1
kind: Pod
spec:
  dnsConfig:
    options:
      - name: ndots
        value: '2'

シナリオ9:CDN連携後(れんけいご)にオリジンサーバーIPが漏洩(ろうえい)(DNS Leak)

症状: Cloudflareを使用中だがオリジンサーバーIPが露出(ろしゅつ)し、DDoS攻撃(こうげき)を直接受(う)けている。

# 診断: プロキシされていないレコードを確認
# Cloudflareダッシュボードでオレンジ色の雲(プロキシ有効)ではなく
# 灰色の雲(DNS Only)のレコードがないか確認

# サブドメインスキャンで漏洩を確認
dig direct.example.com +short     # オリジンIP漏洩?
dig mail.example.com +short       # MX用AレコードにオリジンIP?
dig ftp.example.com +short        # FTPサブドメインにオリジンIP?

解決:

  • すべてのA/AAAAレコードにCloudflareプロキシを有効化
  • MXに必要なAレコードは別のIPを使用
  • オリジンIPが既(すで)に漏洩している場合はサーバーIPを変更
  • 過去(かこ)のDNS記録を確認:SecurityTrails、DNS Historyなどに元のIPが残っている可能性

シナリオ10:DDNSの更新(こうしん)が反映(はんえい)されない

症状: DDNSサービスを設定したが、IP変更時にDNSが更新されない。

# 診断1: 現在のグローバルIPを確認
curl -s https://api.ipify.org

# 診断2: DNSに登録されているIPを確認
dig myserver.example.com +short

# 診断3: DDNSクライアントのログを確認
sudo journalctl -u ddclient -n 50

# 診断4: APIトークンの有効性を確認
curl -s -X GET "https://api.cloudflare.com/client/v4/user/tokens/verify" \
  -H "Authorization: Bearer YOUR_TOKEN" | jq .

# 一般的な原因:
# 1. APIトークンの期限切れまたは権限不足
# 2. Zone IDまたはRecord IDの誤り
# 3. ファイアウォールがDDNSクライアントの外部通信をブロック
# 4. cronジョブが無効化されている
# 5. IP確認サービス(ipifyなど)にアクセスできない

10. DNSサービス比較表(ひかくひょう)

マネージドDNSサービス

サービス無料プランマネージドDNSDDNSDNSSECDDoS防御(ぼうぎょ)料金(りょうきん)(有料)
Cloudflareあり(無制限)ありAPIで実装あり(無料)あり無料~エンタープライズ
AWS Route 53なしありなしありあり(Shield)月0.50 USD/ゾーン
Google Cloud DNSなしありなしありあり月0.20 USD/ゾーン
Azure DNSなしありなしあり(プレビュー)あり月0.50 USD/ゾーン
NS1無料ティアありありありありカスタム
Dyn(Oracle)なしありありありありカスタム

パブリックDNSリゾルバ

サービスプライマリセカンダリDoHDoTDNSSEC検証特徴
Google DNS8.8.8.88.8.4.4ありありあり最も広(ひろ)く使用
Cloudflare1.1.1.11.0.0.1ありありあり最速(さいそく)
Quad99.9.9.9149.112.112.112ありありあり悪意あるドメインブロック
OpenDNS208.67.222.222208.67.220.220ありなしありフィルタリングオプション
AdGuard DNS94.140.14.1494.140.15.15ありありあり広告ブロック

シナリオ別(べつ)おすすめ

シナリオおすすめサービス理由
個人ブログ/サイトCloudflare(無料)無料DNS + CDN + SSL
スタートアップCloudflare ProまたはRoute 53拡張性(かくちょうせい) + 安定性
大企業(だいきぎょう)Route 53 + CloudflareマルチDNS + レイテンシベースルーティング
自宅サーバーCloudflare + DDNS無料 + 動的IPサポート
K8sクラスターCoreDNS + External-DNS自動化されたDNS管理

実践クイズ

Q1:DNS検索における再帰的(Recursive)クエリと反復的(Iterative)クエリの違いは?

再帰的クエリ: クライアントが再帰リゾルバに最終回答を要求します。リゾルバがすべての中間プロセスを代行し、最終的なIPアドレスを返します。

反復的クエリ: 再帰リゾルバが各段階のネームサーバー(Root、TLD、Authoritative)に順番に問い合わせます。各サーバーは最終回答ではなく「次に問い合わせるべきサーバー」を案内します。

一般的にクライアント→リゾルバは再帰的、リゾルバ→ネームサーバーは反復的クエリを使用します。

Q2:ルートドメイン(Apex)にCNAMEレコードを設定できない理由は?

RFCによると、CNAMEはその名前の唯一(ゆいいつ)のレコードでなければなりません。つまり、CNAMEがある場合、同じ名前に他のレコード(A、MX、NS、SOAなど)は存在できません。

しかし、ルートドメインには必ずSOAとNSレコードが存在しなければならず、CNAMEと共存できないため設定が不可能です。

代替手段(だいたいしゅだん)としてCloudflareのCNAME Flatteningや一部のDNSプロバイダーのALIAS/ANAMEレコードを使用できます。

Q3:TTLを60秒に設定したのに、48時間経ってもDNS変更が反映されない理由は?

考(かんが)えられる原因:

  1. TTLを下げる前のキャッシュがまだ残っている可能性があります。TTL変更自体も以前のTTL時間分の伝播が必要です。
  2. 一部のISP DNSサーバーは最低TTLを強制します(例:最低300秒)。
  3. クライアントのOSやブラウザキャッシュもDNSを独自にキャッシュします。
  4. ネームサーバー自体を変更した場合、TLDレベルでの伝播に最大48時間かかります。

解決: DNS変更の24時間前にTTLを事前に下げておき、変更後はipconfig /flushdnsなどでローカルキャッシュを削除します。

Q4:DNSSECはDNSクエリを暗号化する技術か?

いいえ。DNSSECはDNS応答の**完全性(Integrity)出所(Authenticity)**を検証する技術であり、**暗号化(Encryption)**技術ではありません。

DNSSECで保護されたDNS応答も依然(いぜん)として平文で送信されます。つまり、DNSクエリの内容はネットワーク上で見ることができます。

DNSクエリの暗号化(プライバシー)が必要な場合は、DNS over HTTPS(DoH)またはDNS over TLS(DoT)を使用する必要があります。

まとめ:

  • DNSSEC = 応答の改ざん防止(完全性)
  • DoH/DoT = クエリの暗号化(プライバシー)
  • 両方を使用すれば最適なセキュリティ
Q5:K8s Podから外部ドメインapi.external.comへのアクセスが遅い理由と解決方法は?

原因: Kubernetesのデフォルトのndots:5設定により、ドット(.)が5個未満のドメインはsearchドメインが先に追加されます。

api.external.comはドットが2個なので、実際のクエリ順序は:

  1. api.external.com.default.svc.cluster.local(NXDOMAIN)
  2. api.external.com.svc.cluster.local(NXDOMAIN)
  3. api.external.com.cluster.local(NXDOMAIN)
  4. api.external.com.(成功)

3回の不要なクエリの後にようやく実際の解決が行われます。

解決方法:

  1. FQDNを使用:api.external.com.(末尾にドットを追加)
  2. PodのdnsConfigでndotsを低い値(例:2)に設定
  3. 頻繁にアクセスする外部ドメインはCoreDNSにキャッシュルールを追加

参考資料(さんこうしりょう)

RFCドキュメント

  • RFC 1034 - Domain Names - Concepts and Facilities
  • RFC 1035 - Domain Names - Implementation and Specification
  • RFC 2136 - Dynamic Updates in the DNS (DDNS)
  • RFC 2181 - Clarifications to the DNS Specification
  • RFC 2308 - Negative Caching of DNS Queries
  • RFC 4033, 4034, 4035 - DNS Security Extensions (DNSSEC)
  • RFC 6698 - DNS-Based Authentication (DANE/TLSA)
  • RFC 7208 - SPF (Sender Policy Framework)
  • RFC 7489 - DMARC
  • RFC 8484 - DNS over HTTPS (DoH)
  • RFC 7858 - DNS over TLS (DoT)
  • RFC 8659 - DNS Certification Authority Authorization (CAA)

ツールとサービス

  • dig / nslookup - DNSクエリコマンドラインツール
  • whatsmydns.net - グローバルDNS伝播チェッカー
  • dnschecker.org - DNSレコードチェッカー
  • mxtoolbox.com - メールDNS診断(SPF, DKIM, DMARC)
  • securitytrails.com - DNS履歴検索
  • dnsviz.net - DNSSEC可視化と検証

DNSソフトウェア

学習(がくしゅう)リソース

  • Cloudflare Learning Center - DNSの概念(learning.cloudflare.com)
  • howdns.works - DNSの動作を視覚的(しかくてき)に説明
  • messwithdns.net - DNS実習環境(じっしゅうかんきょう)
  • Julia Evans - DNS関連ブログとzines