DNSサーバーとは?仕組み・種類・確認方法をコマンドで解説

実務レシピ

DNSサーバーとは、example.comのようなドメイン名を、通信に使うIPアドレスに変換するサーバーです。人はドメイン名でサイトを開きますが、実際の通信はIPアドレス宛に行われるため、その間を取り持つ役割が必要になります。仕組みの説明だけ読んでも実感が湧きにくいので、この記事ではUbuntu 24.04(dig 9.18)で実際に実行した出力を並べながら解説します。まずは、いま自分の環境がどのDNSサーバーに問い合わせているかを確認してみてください。

dig example.com | grep SERVER
;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP)

この記事では、DNSサーバーの仕組みと種類、Linuxでの確認・変更方法、そして「DNSが原因かどうか」を切り分ける手順までを、コマンドの実行結果つきでまとめます。

  1. DNSサーバーとは|ドメイン名をIPアドレスに変換する仕組み
    1. 名前解決が行われる4つのステップ
  2. DNSサーバーの種類|キャッシュDNSと権威DNSの違い
    1. flagsを見れば、どちらのサーバーか判別できる
    2. ルート→TLD→権威の階層をたどる
    3. キャッシュが効いていることを確かめる
  3. DNSレコードの主な種類と確認コマンド
  4. 自分が使っているDNSサーバーを確認する方法
    1. /etc/resolv.confを見る(基本)
    2. resolvectlで確認する(systemd-resolved環境)
    3. digのSERVER行が最も確実
    4. nslookup・host・getentでも確認できる
    5. Windows・macOSでの確認方法
  5. DNSサーバーを変更・設定する方法(Linux)
    1. netplanで設定する(Ubuntuサーバー)
    2. nmcliで設定する(NetworkManager環境)
    3. 変更が反映されたか確認する
  6. DNSサーバーが原因かを切り分ける手順
    1. 外部DNSと比べて「自分側かサイト側か」を確定させる
    2. 応答速度でDNSサーバーを選ぶ
  7. 自前でDNSサーバーを立てる場合の選択肢
  8. よくある質問
    1. Q. DNSサーバーとネームサーバーは同じものですか?
    2. Q. DNSの変更が反映されるまでどれくらいかかりますか?
    3. Q. DNSキャッシュをクリアしたいのですが、コマンドが失敗します
    4. Q. digでは正しいIPが返るのに、ブラウザが古いサイトを表示します
    5. Q. 会社のDNSサーバーを勝手に8.8.8.8へ変えてもよいですか?
    6. Q. digコマンドが見つかりません
    7. Q. DNSサーバーは自分で用意しないといけませんか?
  9. まとめ
  10. 関連記事
  11. 関連記事

DNSサーバーとは|ドメイン名をIPアドレスに変換する仕組み

DNSは Domain Name System の略で、ドメイン名とIPアドレスの対応を管理する仕組み全体を指します。その仕組みを構成する個々のサーバーがDNSサーバーです。「インターネットの電話帳」と例えられることが多く、名前(ドメイン名)から番号(IPアドレス)を引く役割を担います。

ドメイン名からIPアドレスを求める処理を名前解決と呼びます。実際に何が返ってくるかは、digコマンドで直接確認できます。

dig example.com A +noall +answer
example.com.		152	IN	A	172.66.147.243
example.com.		152	IN	A	104.20.23.154

左から順に、ドメイン名・TTL(秒)・クラス・レコード種別・値です。この例ではexample.comに2つのIPアドレスが割り当てられており、TTLは152秒。TTLは「この答えを何秒間キャッシュしてよいか」を示す寿命で、DNS変更が反映されるまでの待ち時間を左右します。

名前解決が行われる4つのステップ

ブラウザにURLを入力してからIPアドレスが判明するまでの流れは、大きく4段階です。この問い合わせは通常UDPの53番ポートで行われ、応答が大きい場合だけTCPに切り替わります(TCPとUDPの違いを実測で解説|パケット数・ヘッダ・確認コマンドで、digがどちらを使ったか確認する方法を扱っています)。

  1. 端末が、設定されているDNSサーバー(多くはプロバイダやルーターのもの)に問い合わせる
  2. そのDNSサーバーがキャッシュを持っていれば即答する
  3. キャッシュが無ければ、ルートサーバー → TLDサーバー(.com.org)→ ドメインの権威サーバー、と順にたどる
  4. 得られたIPアドレスを端末に返し、同時にTTLの間だけキャッシュとして保持する

この3段目の「たどる」様子は、dig +traceで実際に目視できます。後述の「階層をたどる」の節で実行結果を示します。

DNSサーバーの種類|キャッシュDNSと権威DNSの違い

「DNSサーバー」と一括りにされますが、役割はまったく異なる2種類に分かれます。トラブル対応でどちらを疑うべきかが変わるため、ここは押さえておく価値があります。

種類別名役割設定・運用する人
キャッシュDNSサーバーフルサービスリゾルバ/フルリゾルバ利用者の問い合わせを受け、代わりに階層をたどって答えを探し、結果をキャッシュするプロバイダ、社内インフラ、公開DNS事業者
権威DNSサーバーネームサーバー/コンテンツサーバー自分が管理するドメインのゾーン情報(Aレコード等)を保持し、正式な答えを返すドメイン所有者、レジストラ、DNSホスティング

権威DNSサーバーはさらに、ゾーン情報の原本を持つプライマリ(マスター)と、そのコピーを保持して冗長化するセカンダリ(スレーブ)に分かれます。ドメイン登録時に「ネームサーバーを2つ以上指定してください」と求められるのは、このセカンダリを用意させるためです。

flagsを見れば、どちらのサーバーか判別できる

digの応答ヘッダーにあるflagsを読むと、返してきたサーバーがキャッシュDNSか権威DNSかがわかります。まずGoogle Public DNS(キャッシュDNS)に問い合わせた場合です。

dig @8.8.8.8 iana.org +noall +comments | grep -E 'flags|status'
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58000
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

次に、iana.orgの権威DNSサーバーに直接問い合わせた場合です。

dig @a.iana-servers.net iana.org +noall +comments | grep -E 'flags|status'
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11009
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

違いはaaraの有無です。

フラグ意味読み取れること
aaAuthoritative Answer権威DNSサーバーが自分の管理するゾーンから答えた(=正式な答え)
raRecursion Available再帰問い合わせを受け付ける=キャッシュDNSサーバーとして動作している
rdRecursion Desireddigが「代わりに調べてほしい」と要求した(送信側の希望)
adAuthenticated DataDNSSECによる検証に成功している
qrQuery Responseこのパケットが応答であることを示す

権威DNSサーバーは「自分の担当ドメイン以外は答えない」のが原則です。担当外を聞くとREFUSEDが返ります。

dig @a.iana-servers.net google.com +noall +comments | grep status
;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 9282

自分で権威DNSサーバーを立てたとき、意図せず担当外のドメインまで再帰的に答えてしまう設定はオープンリゾルバと呼ばれ、DDoS攻撃の踏み台にされます。このREFUSEDが返る状態は、むしろ正しく閉じられている証拠です。

ルート→TLD→権威の階層をたどる

キャッシュDNSサーバーが答えを探す道筋は、dig +traceで再現できます。

dig +trace iana.org
.			509274	IN	NS	a.root-servers.net.
.			509274	IN	NS	b.root-servers.net.
(中略:ルートサーバーは a〜m の13系統)

org.			172800	IN	NS	a0.org.afilias-nst.info.
org.			172800	IN	NS	b2.org.afilias-nst.org.
(中略:.org を管理するTLDサーバー)

iana.org.		86400	IN	NS	a.iana-servers.net.
iana.org.		86400	IN	NS	b.iana-servers.net.
iana.org.		86400	IN	NS	c.iana-servers.net.
iana.org.		86400	IN	NS	ns.icann.org.

ルート(.)が「.orgのことはこのサーバーに聞け」と教え、TLDサーバーが「iana.orgのことはこのサーバーに聞け」と教える。この受け渡しを委任と呼びます。委任だけを取り出して見ることもできます。

dig @a0.org.afilias-nst.info iana.org +noall +authority
iana.org.		3600	IN	NS	ns.icann.org.
iana.org.		3600	IN	NS	b.iana-servers.net.
iana.org.		3600	IN	NS	a.iana-servers.net.
iana.org.		3600	IN	NS	c.iana-servers.net.

ここに表示されるNSレコードが、上位から見た「正しい委任先」です。ドメイン移管やDNSホスティング変更のトラブルでは、この上位側の委任と、実際に運用している権威サーバーがズレていることがよくあります。

キャッシュが効いていることを確かめる

キャッシュDNSサーバーが答えを保持している間、TTLは秒単位で減っていきます。同じ問い合わせを繰り返すとTTLの値が変わるのはそのためです。

for i in 1 2 3; do dig @1.1.1.1 iana.org +noall +answer; sleep 2; done
iana.org.		2651	IN	A	192.0.43.8
iana.org.		1121	IN	A	192.0.43.8
iana.org.		1947	IN	A	192.0.43.8

ここで注意したいのが、値が単純に減っていない点です。1.1.1.18.8.8.8のような公開DNSはエニーキャストで世界中に多数のサーバーが分散配置されており、問い合わせのたびに別のインスタンスへ届くことがあります。それぞれが独立したキャッシュを持つため、TTLの残りがバラつきます。「DNSレコードを変更したのに、リロードすると新旧の結果が入れ替わる」現象の一因はこれです。

DNSレコードの主な種類と確認コマンド

権威DNSサーバーが保持している情報は、レコードという単位で管理されます。よく使うものは次の通りです。

種別内容確認コマンド
Aドメイン名に対応するIPv4アドレスdig +short A example.com
AAAAIPv6アドレスdig +short AAAA iana.org
CNAME別のドメイン名への別名(エイリアス)dig www.iana.org +noall +answer
MXメール受信サーバーと優先度dig +short MX gmail.com
NSそのドメインの権威DNSサーバーdig +short NS iana.org
TXT任意の文字列。SPFやドメイン所有確認に使うdig +short TXT iana.org
SOAゾーンの管理情報(シリアル、TTL既定値など)dig +short SOA iana.org
PTRIPアドレスからドメイン名を引く逆引きdig +short -x 192.0.43.8

CNAMEは実務で誤解が多いレコードです。実際の応答を見ると、CNAMEが張られている場合はAレコードが「別名の先」に付いていることがわかります。

dig www.iana.org +noall +answer
www.iana.org.		2051	IN	CNAME	www.iana.org.cdn.cloudflare.net.
www.iana.org.cdn.cloudflare.net. 184 IN	A	104.18.24.232
www.iana.org.cdn.cloudflare.net. 184 IN	A	104.18.25.232

この例ではwww.iana.org自身にAレコードは無く、CDNのドメインへ転送されています。TTLもCNAME側(2051秒)とA側(184秒)で別々です。「Aレコードを直したのに反映されない」というときは、まずCNAMEが挟まっていないかを疑ってください。

SOAレコードのシリアル番号は、ゾーン情報を更新した回数(多くは日付形式)を示します。プライマリとセカンダリでこの値が食い違っていれば、ゾーン転送が失敗している可能性が高いと判断できます。

dig +short SOA iana.org
sns.dns.icann.org. noc.dns.icann.org. 2026072705 7200 3600 1209600 3600

digの詳しいオプションはdig – DNS情報を問い合わせるコマンドにまとめています。

自分が使っているDNSサーバーを確認する方法

Linuxで「いまどのDNSサーバーを参照しているか」を調べる方法は複数あり、環境によって正解が変わります。順に見ていきます。

/etc/resolv.confを見る(基本)

cat /etc/resolv.conf
nameserver 127.0.0.1

nameserver行に書かれているのが問い合わせ先です。ここが127.0.0.1127.0.0.53のようなループバックアドレスになっている場合、実際の問い合わせ先はこのファイルには書かれていません。ローカルで動くDNSサービス(systemd-resolved、dnsmasq、Unboundなど)が窓口になっていて、その先の転送先は別の設定にあります。誰が53番ポートを握っているかはssで確認できます。

sudo ss -lntup 'sport = :53'

resolvectlで確認する(systemd-resolved環境)

Ubuntu 18.04以降のデスクトップや標準的なサーバー構成では、systemd-resolvedが名前解決を担っています。この場合はresolvectlが最も情報量の多い確認方法です。

resolvectl status
resolvectl dns

ただし、systemd-resolvedが動いていない環境では次のように失敗します。コマンドが存在するかどうかと、サービスが動いているかどうかは別問題です。

Failed to get global data: Unit dbus-org.freedesktop.resolve1.service not found.

このメッセージが出たら、まずサービスの状態を確認してください。

systemctl is-active systemd-resolved
inactive

inactiveなら、名前解決は/etc/resolv.confに書かれたサーバーへglibcが直接問い合わせています。systemd-resolvedを前提にした解説記事の手順(キャッシュクリアなど)はそのままでは通用しません。

digのSERVER行が最も確実

設定ファイルを読み解くより、実際に問い合わせて「どこが答えたか」を見るほうが確実です。

dig example.com | grep -E 'SERVER|Query time'
;; Query time: 14 msec
;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP)

このSERVER行が、digが実際に問い合わせた相手です。設定ファイルの記述と食い違っていたら、そちらが古い、あるいは別の仕組みで上書きされていると判断できます。

nslookup・host・getentでも確認できる

digが入っていない環境では、次のコマンドが代わりになります。それぞれ見え方が違います。

host iana.org
nslookup iana.org
getent hosts iana.org
iana.org has address 192.0.43.8
iana.org has IPv6 address 2001:500:88:200::8
iana.org mail is handled by 10 pechora1.icann.org.
(中略)

Non-authoritative answer:
Name:	iana.org
Address: 192.0.43.8
Name:	iana.org
Address: 2001:500:88:200::8

2001:500:88:200::8 iana.org

ここには重要な違いがあります。dighostnslookupDNSサーバーに直接問い合わせるのに対し、getent hosts/etc/nsswitch.confの順序に従うため、/etc/hostsの記述を先に見ます

grep ^hosts /etc/nsswitch.conf
hosts:          files mdns4_minimal [NOTFOUND=return] dns

files(=/etc/hosts)がdnsより前にあります。つまりアプリケーションが実際に使う名前解決の結果はgetentのほうで、digが正しい答えを返しているのにブラウザやcurlだけ古いIPに繋がる場合は、/etc/hostsに残骸が残っている可能性が高い、と切り分けられます。使い分けはnslookup – Linuxで使うDNS問い合わせコマンドの使い方host – シンプルなDNS問い合わせコマンドも参考にしてください。

Windows・macOSでの確認方法

OSコマンド
Windowsipconfig /all(「DNSサーバー」の行を確認)
Windowsnslookup(起動時に表示されるServerが参照先)
macOSscutil --dnsnetworksetup -getdnsservers Wi-Fi

DNSサーバーを変更・設定する方法(Linux)

参照するDNSサーバーの変更は、環境によって編集すべき場所が違います。/etc/resolv.confを直接編集しても、多くの環境では再起動時に元に戻ります。実際、多くのUbuntu環境ではこのファイルはシンボリックリンクです。

ls -l /etc/resolv.conf
lrwxrwxrwx 1 root root 28 Aug  1 09:15 /etc/resolv.conf -> /opt/valet-linux/resolv.conf

リンク先を確認すれば、誰がこのファイルを生成しているかがわかります。/run/systemd/resolve/配下ならsystemd-resolved、/run/NetworkManager/配下ならNetworkManagerが管理者です。それに応じて設定場所を選びます。

管理している仕組み編集する場所反映コマンド
netplan(Ubuntuサーバー)/etc/netplan/*.yamlnameserverssudo netplan apply
NetworkManager(デスクトップ)nmcliで接続設定を変更sudo nmcli connection up <接続名>
systemd-resolved/etc/systemd/resolved.confDNS=sudo systemctl restart systemd-resolved
いずれも無い最小構成/etc/resolv.confを直接編集不要(即時反映)

netplanで設定する(Ubuntuサーバー)

network:
  version: 2
  ethernets:
    eth0:
      dhcp4: true
      nameservers:
        addresses: [8.8.8.8, 1.1.1.1]

DHCPからDNSサーバーが配られる環境では、上の指定が無視されることがあります。その場合はdhcp4-overridesuse-dns: falseを併記してください。編集後は、適用前に構文を確認するのが安全です。

sudo netplan generate   # 構文チェックのみ
sudo netplan try        # 120秒後に自動で元に戻る(SSH断の保険)
sudo netplan apply

リモートのサーバーで作業する場合、netplan tryを使うと設定ミスで接続を失っても自動で巻き戻ります。いきなりapplyしないことをおすすめします。

nmcliで設定する(NetworkManager環境)

nmcli connection show                      # 接続名を確認
sudo nmcli connection modify "接続名" ipv4.dns "8.8.8.8 1.1.1.1"
sudo nmcli connection modify "接続名" ipv4.ignore-auto-dns yes
sudo nmcli connection up "接続名"

ipv4.ignore-auto-dns yesを忘れると、DHCPから配られたDNSサーバーが手動指定より優先されたままになります。設定後は先ほどのdigのSERVER行で、実際に切り替わったかを必ず確認してください。

変更が反映されたか確認する

dig example.com | grep SERVER

設定ファイルを書き換えただけでは反映されていないことがあるため、この1行での確認を習慣にすると事故が減ります。

DNSサーバーが原因かを切り分ける手順

「サイトが開かない」ときにDNSが原因かどうかは、応答コード(status)で判断できます。まず現状のstatusを取ります。

dig +noall +comments example.com | grep -o 'status: [A-Z]*'
status意味次にやること
NOERROR名前解決は成功しているDNS以外を疑う(経路、ポート、Webサーバー、TLS)
NXDOMAINそのドメインは存在しない綴り、サブドメインの有無、ドメインの有効期限を確認
SERVFAIL問い合わせ先が答えを出せなかった権威サーバーの障害、DNSSEC検証失敗、上流の不調を疑う
REFUSED問い合わせ自体を拒否されたそのサーバーが担当外か、アクセス制限をかけている
(応答なし)タイムアウト53番ポートの遮断、DNSサーバーの停止、経路断を疑う

SERVFAILの例として、DNSSECの署名が意図的に壊してある検証用ドメインを問い合わせるとこうなります。

dig @8.8.8.8 dnssec-failed.org +noall +comments | grep status
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 54476

外部DNSと比べて「自分側かサイト側か」を確定させる

切り分けで最も効くのが、いま使っているDNSサーバーと、外部の公開DNSの結果を比べることです。

dig +short example.com          # いまの設定で問い合わせ
dig @8.8.8.8 +short example.com # Google Public DNS
dig @1.1.1.1 +short example.com # Cloudflare DNS
いまのDNS外部DNS判断
失敗成功自分側(設定・キャッシュ・ルーター・プロバイダのDNS)が原因
失敗失敗サイト側(権威DNS、ドメイン設定)が原因
成功成功DNSは正常。以降の通信(経路・ポート・Webサーバー)を調べる
成功失敗古いキャッシュが残っているか、社内DNSが独自の答えを返している

「DNSは正常」と判明したら、次は経路とポートの調査に移ります。手順は接続不良の原因を特定!ネットワークトラブルシュートの基本コマンド一覧Linuxのtracerouteコマンド使い方にまとめています。逆にブラウザにDNS_PROBE_FINISHED_NXDOMAINが出ている場合は、DNS_PROBE_FINISHED_NXDOMAINの原因と直し方で個別に解説しています。

応答速度でDNSサーバーを選ぶ

公開DNSはどれも無料で使えますが、回線や地域によって応答速度が変わります。実測してから選ぶのが確実です。

for s in 8.8.8.8 1.1.1.1 9.9.9.9 208.67.222.222; do
  printf "%-16s " "$s"
  dig @"$s" +noall +stats iana.org | grep -oE 'Query time: [0-9]+ msec'
done
8.8.8.8          Query time: 11 msec
1.1.1.1          Query time: 15 msec
9.9.9.9          Query time: 15 msec
208.67.222.222   Query time: 113 msec

この環境では最後の1つだけ明確に遅い結果になりました。値はネットワーク環境で大きく変わるので、必ず自分の回線で測ってください。代表的な公開DNSは次の通りです。

サービスプライマリセカンダリ特徴
Google Public DNS8.8.8.88.8.4.4広く使われ、切り分けの基準にしやすい
Cloudflare DNS1.1.1.11.0.0.1プライバシー重視をうたう
Quad99.9.9.9149.112.112.112悪性ドメインをブロックする
OpenDNS208.67.222.222208.67.220.220フィルタリング機能を持つ

なお、Quad9やOpenDNSはフィルタリングを行うため、切り分け目的で使うと「ブロックされているだけ」を障害と誤認することがあります。純粋な切り分けには8.8.8.81.1.1.1を使うほうが確実です。

自前でDNSサーバーを立てる場合の選択肢

社内向けの名前解決や、自分のドメインの権威DNSを自前で運用したい場合の代表的なソフトウェアです。用途を取り違えると必要以上に複雑な構成になるため、まず役割から選びます。

ソフトウェア主な役割向いている用途
dnsmasqキャッシュDNS+DHCP小規模LAN、開発環境、Raspberry Pi
UnboundキャッシュDNS(フルリゾルバ)社内の共有リゾルバ、DNSSEC検証
BIND 9権威DNS+キャッシュDNS本格的なゾーン運用、機能が最も豊富
NSD権威DNS専用権威に特化して軽量・堅牢に運用したい場合
PowerDNS権威DNS(DB連携)/リゾルバレコードをRDBやAPIで管理したい場合

インターネット向けに権威DNSを公開する場合は、再帰問い合わせを必ず無効にしてください。前述のオープンリゾルバ状態は、DNSリフレクション攻撃の踏み台として悪用されます。設定後は、担当外ドメインを問い合わせてREFUSEDが返ることを確認するのが手軽なチェックになります。

また、権威DNSは1台構成にしないのが原則です。プライマリとセカンダリを別ネットワークに置き、SOAのシリアル番号が両者で一致しているかを定期的に確認します。

for ns in $(dig +short NS example.com); do
  printf "%-30s " "$ns"
  dig @"$ns" +short SOA example.com | awk '{print $3}'
done
hera.ns.cloudflare.com.        2410849323
elliott.ns.cloudflare.com.     2410849323

出力されたシリアル番号がすべて揃っていれば、ゾーン転送は正常です。1台だけ古い番号なら、そのセカンダリへの転送が失敗しています。

よくある質問

Q. DNSサーバーとネームサーバーは同じものですか?

ほぼ同義で使われますが、厳密には「ネームサーバー」は権威DNSサーバーを指すことが多い用語です。ドメイン登録画面で「ネームサーバーの設定」と表示されるのは、そのドメインの権威DNSサーバーを指定する操作を意味します。一方、端末側の設定で「DNSサーバー」と言えば、通常はキャッシュDNSサーバーのことです。

Q. DNSの変更が反映されるまでどれくらいかかりますか?

目安は変更前のレコードに設定されていたTTLの時間です。TTLが3600なら最大1時間、キャッシュが残っている経路では古い答えが返り続けます。計画的な変更なら、切り替えの数日前にTTLを300秒程度まで下げておき、切り替え後に戻すと影響を短くできます。

Q. DNSキャッシュをクリアしたいのですが、コマンドが失敗します

Linuxの場合、OS自体はDNSキャッシュを持ちません。キャッシュを持つのはsystemd-resolvedやdnsmasqといった常駐サービスのほうです。そのため、これらが動いていない環境でresolvectl flush-cachesを実行してもUnit dbus-org.freedesktop.resolve1.service not foundで失敗します。まずsystemctl is-active systemd-resolvedで稼働状況を確認し、動いていなければクリアすべきキャッシュ自体が存在しない、と判断してください。ブラウザは独自のキャッシュを持つため、そちらは別途クリアが必要です。

Q. digでは正しいIPが返るのに、ブラウザが古いサイトを表示します

digはDNSサーバーへ直接問い合わせますが、アプリケーションは/etc/hostsを先に参照します。getent hosts ドメイン名を実行し、digと違う結果が返るなら/etc/hostsに古い記述が残っています。それも同じ結果なら、ブラウザ自身のキャッシュかCDN側のキャッシュを疑ってください。

Q. 会社のDNSサーバーを勝手に8.8.8.8へ変えてもよいですか?

おすすめしません。社内DNSは、社内サーバーのプライベートIPを返す内部専用のレコードを持っていることが多く、外部DNSへ切り替えると社内システムに接続できなくなります。切り分けのために一時的にdig @8.8.8.8で問い合わせるのは問題ありませんが、端末の設定そのものを変えるのは避けてください。

Q. digコマンドが見つかりません

digは単体パッケージではなく、DNSユーティリティ群に含まれています。Ubuntu/Debianならsudo apt install dnsutils、RHEL系ならsudo dnf install bind-utilsでインストールできます。インストールできない環境では、標準で入っていることが多いgetent hostspython3のsocketモジュールで代用してください。

Q. DNSサーバーは自分で用意しないといけませんか?

一般的なWebサイト運用では不要です。ドメイン登録事業者やレンタルサーバー、クラウド事業者が権威DNSを提供しており、管理画面からレコードを追加するだけで済みます。自前で立てる価値があるのは、社内向けの独自ゾーンを持つ場合や、レコードを大量に自動生成したい場合です。

まとめ

DNSサーバーの要点を整理します。

  • DNSサーバーはドメイン名とIPアドレスを対応づけるサーバーで、役割はキャッシュDNS権威DNSの2種類に分かれる
  • どちらが答えたかは、digのflagsにあるaa(権威)とra(再帰可能)で判別できる
  • 自分の参照先はdig ドメイン名 | grep SERVERで確認するのが最も確実。設定ファイルは上書きされていることがある
  • 設定変更はnetplan・nmcli・resolved.confのどれが管理しているかを見極めてから行う
  • 障害時はstatus(NOERROR / NXDOMAIN / SERVFAIL / REFUSED)と外部DNSとの比較で、自分側かサイト側かを先に確定させる

設定ファイルを読むより、まず1コマンド実行して応答を見るほうが早く正確です。困ったらdigから始めてください。

関連記事

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント