【AlmaLinux 10】DNSクライアント設定と名前解決トラブルシューティング完全ガイド

サーバーインフラストラクチャの運用において、ネットワークの基本である「DNS(Domain Name System)」の正常な動作はシステムの生命線です。外部APIへの接続、パッケージのアップデート(dnf)、ドメインベースのルーティングや各種サービスの連携に至るまで、名前解決に一度障害が発生すれば、システム全体が連鎖的に機能不全に陥ります。

RHEL 10系をベースとするAlmaLinux 10では、ネットワーク管理の標準として「NetworkManager」が全面的に採用されており、DNSクライアントの設定や /etc/resolv.conf の管理挙動もモダンな方式へと最適化されています。しかし、自動設定(DHCP)との競合や設定ミスの変更が反映されないなどのトラブルは、インフラの現場で依然として頻発します。

コウ君

リナックス先生、新しいAlmaLinux 10サーバーを構築したんですが、なぜか dnf update も外部への curl も「Temporary failure in name resolution(名前解決の一時的な失敗)」と言われて外部ドメインに繋がりません! IPアドレスを直接指定すれば通信できるんですが、どこを直せばいいんでしょうか……?

リナックス先生

「IPでは繋がるが名前では繋がらない」というのは、典型的なDNSクライアント設定の不備ですね。AlmaLinux 10では、昔ながらの /etc/resolv.conf の直書きはNetworkManagerによって上書きされて消えてしまう仕様になっています。プロのインフラエンジニアとして、NetworkManagerの正しいDNS管理の仕組みを理解し、根本的な原因究明と復旧手順をマスターしましょう。

本記事では、AlmaLinux 10環境におけるDNSクライアントの設定手法と、名前解決エラーが発生した際に迅速に原因を特定して修復するための実践的なトラブルシューティング手順を徹底解説します。


1. 診断の第一歩:現在の名前解決状態と設定の確認

DNSに関するインシデントが発生した際、まずは「OSがどのDNSサーバーを参照しようとしているか」「名前解決のクエリがどこで止まっているか」を切り分ける必要があります。

1.1. /etc/resolv.conf の参照先確認

まずは、システムが現在使用しているネームサーバー(DNS)を確認します。

# 現在参照されているDNSサーバーを確認
cat /etc/resolv.conf

ここに期待するDNSサーバーのIPアドレス(例: nameserver 8.8.8.8 や社内DNSのIPなど)が正しく記述されているか確認します。もしここが空であったり、意図しないローカルIP(ルーターのローカルアドレス等)になっている場合は、DHCPからの設定プッシュやネットワーク設定に不備があります。

1.2. ツールを用いた名前解決のテスト(dig / nslookup)

実際にDNSサーバーに対して名前解決のクエリを飛ばし、どこに異常があるのかをテストします。AlmaLinux 10では、DNS診断ツールのパッケージ(bind-utils)が必要に応じてインストールされていることを確認してください。

# デフォルトのDNSサーバーを使用して名前解決をテスト
dig almalinux.org

# 特定のDNSサーバー(例: 1.1.1.1)を直接指定して名前解決をテスト
dig @1.1.1.1 almalinux.org

もし dig @1.1.1.1 では名前解決が成功するのに、単なる dig almalinux.org で失敗する場合、OSに設定されているローカルのDNSサーバー、あるいはルーティング・ファイアウォールに原因があると即座に切り分けることができます。

2. AlmaLinux 10におけるDNS管理の仕組み(NetworkManager)

Linuxの黎明期や古いバージョンでは、DNSを変更したいときは /etc/resolv.conf を直接エディタで書き換えるのが一般的でした。しかし、RHEL/AlmaLinux 8以降、そして最新のAlmaLinux 10においては、この伝統的な手法は推奨されません。

2.1. /etc/resolv.conf は「自動生成ファイル」である

AlmaLinux 10では、ネットワークインターフェイスのライフサイクル管理やIPアドレスの割当をすべて NetworkManager が一元管理しています。NetworkManagerは、DHCPから取得した情報や、管理者が手動で設定したネットワークプロファイルをもとに、/etc/resolv.conf を動的に生成(またはシンボリックリンクを制御)しています。

⚠️ よくある失敗:/etc/resolv.conf の直書き厳禁
トラブルシューティングの焦りから /etc/resolv.conf を直接エディタで書き換えて一時的に名前解決が復旧しても、サーバーを再起動したり、ネットワークインターフェイスの再接続(nmcli connection up)を行ったりすると、NetworkManagerによってファイルが強制的に上書きされ、設定が綺麗に消え去ります。永続的な設定変更は必ずNetworkManager経由で行う必要があります。

3. 正しいDNSサーバーの設定変更手順(nmcliコマンド)

AlmaLinux 10でDNSサーバーを永続的かつ正しく設定・変更するには、CUIネットワーク管理ツールである nmcli を使用します。

3.1. 現在のネットワーク接続名(プロファイル名)の特定

まずは、現在アクティブになっているネットワークインターフェイスの接続名を確認します。

# アクティブな接続デバイスとプロファイルの一覧表示
nmcli connection show --active

出力結果の「NAME」列(例: eth0enp0s3 など)に表示される接続名を控えておきます。

3.2. nmcliを用いたDNSサーバーの静的設定

確認した接続名に対して、IPv4のDNSサーバーアドレスを明示的に設定します。複数のDNSサーバーを指定する場合は、スペース区切りで記述します。

# 例:接続名「eth0」に対して、Google Public DNS (8.8.8.8, 8.8.4.4) を静的設定する
sudo nmcli connection modify eth0 ipv4.dns "8.8.8.8 8.8.4.4"

# 必要に応じてDNSの検索ドメイン(サーチパス)を設定する場合
sudo nmcli connection modify eth0 ipv4.dns-search "yourcompany.local"

3.3. 設定の反映(接続の再適用)

設定を変更しただけでは、現在稼働中のネットワークには即時反映されません。一度接続をダウンさせてからアップさせ、NetworkManagerに設定を再読み込みさせます。

# ネットワーク接続を一度切断して再適用
sudo nmcli connection up eth0

この手順を実行した後に再度 cat /etc/resolv.conf を確認すると、指定したDNSサーバーのIPアドレスが正しく書き込まれていることが確認できます。

4. トラブルシューティング:名前解決エラーの切り分けフロー

正しい手順でDNSを設定したにもかかわらず名前解決ができない場合、インフラエンジニアは以下のステップに従って体系的な切り分けを行います。

4.1. ステップ1:デフォルトゲートウェイとルーティングの確認

DNSサーバーのIPアドレス自体が間違っていなくても、そこへ到達するためのデフォルトゲートウェイ(ルーター)への経路が通っていなければパケットは届きません。

# ゲートウェイへの疎通確認
ping -c 3 <ゲートウェイのIPアドレス>

# ルーティングテーブルの確認
ip route show

4.2. ステップ2:UDP/TCP 53番ポートのネットワーク疎通確認

ルーターや外部ファイアウォール、あるいはクラウドのセキュリティグループ(AWSのSGや各種クラウドのファイアウォール設定)によって、DNS通信で使用される「ポート53(UDPおよびTCP)」がブロックされているケースは非常に多く見られます。

# nc (netcat) または telnet等を用いて、DNSサーバーの53番ポートへの疎通をテスト
nc -zv 8.8.4.4 53
# あるいは
nc -zvu 8.8.4.4 53

もし「Connection timed out」や「Connection refused」になる場合、OS内部の設定ではなく、ネットワーク・セキュリティ層(ファイアウォール)での通信ブロックが原因です。

4.3. ステップ3:NetworkManagerのログ監査

NetworkManagerがDNSの設定適用時にエラーを起こしていないか、システムログを詳細に監査します。

# NetworkManagerの直近のログを抽出してリアルタイム監視
sudo journalctl -u NetworkManager -n 50 --no-pager

ログ内にDNSプラグインのエラーや、DHCPから不正なDNS情報を受け取ってコンフリクトを起こしている痕跡がないかを確認します。

5. よくある落とし穴とファイアウォール(UDP 53)の確認

AlmaLinux 10サーバー自身が「社内向けのフルサービスキャッシュDNSサーバー(BIND等)」として動作している場合や、ローカルにコンテナネットワーク(Podman/Docker)を構築している場合、ローカルのパケットフィルタリング機能(firewalld)が障壁になることがあります。

5.1. firewalldにおけるDNSサービスの許可設定

自サーバーが外部からのDNSクエリを受け付ける役割を持つ場合、firewalldでDNS(UDP/TCP 53番ポート)のインバウンド通信を明示的に許可する必要があります。

# firewalldでDNSサービスを永続的に許可
sudo firewall-cmd --add-service=dns --permanent

# 設定を即時反映
sudo firewall-cmd --reload

6. まとめとインフラ運用のベストプラクティス

本記事では、AlmaLinux 10環境におけるDNSクライアントの設定と、名前解決トラブルシューティングの手順について以下のポイントを解説しました。

  • 管理体系の理解: AlmaLinux 10ではNetworkManagerがDNS設定を一元管理しており、/etc/resolv.conf の直接手動編集は再起動時に上書きされるため厳禁であること。
  • nmcliによる永続化設定: nmcli connection modify を用いて正しいDNSサーバーを登録し、接続の再適用(up)を行う標準フローの徹底。
  • 体系的な切り分け: dig による直接名前解決テスト、デフォルトゲートウェイの疎通、およびポート53のネットワークブロックの検証。
  • ファイアウォール管理: 自サーバーがDNSを提供する役割を持つ場合の firewalld(dnsサービス)の適切な開放。

DNSのトラブルはシステム全体の停止に直結するため、日頃から構成をNetworkManagerで正しくコード化・管理し、万が一の障害時には本記事の切り分けフローを迅速に実行できるように備えておくことが、安定したインフラ運用のカギとなります。

▼ 【安定したネットワーク環境を構築しよう】 ▼

ネットワーク性能が安定する高信頼サーバー
「高コスパおすすめVPS・専用サーバー」

VPSランキングを見る

インフラネットワークのスペシャリストを目指す
「インフラエンジニア専門転職」

転職エージェントを見る

コメント