Ubuntu「名前解決に一時的に失敗しました」エラーの原因と解決方法

「一時的な名前解決エラー」「Temporary failure in name resolution」

Ubuntuを使っていて、突然このエラーメッセージに遭遇したことはありませんか?インターネットには繋がっているはずなのに、ブラウザでサイトが開けない、apt updateができない…そんな困った状況ですよね。

このエラーは、DNS(Domain Name System)と呼ばれる仕組みに問題が起きている証拠です。難しそうに聞こえますが、実は原因を理解すれば、初心者でも自力で解決できることが多いんですよ。

この記事では、「名前解決に一時的に失敗しました」エラーの原因から、具体的な解決方法まで、分かりやすく丁寧に解説していきます。

スポンサーリンク
  1. 「名前解決」とは?エラーの意味を理解しよう
    1. 名前解決(DNS)の仕組み
    2. エラーメッセージの種類
    3. このエラーが出る主な原因
  2. 基本的な確認事項
    1. インターネット接続の確認
    2. DNSサーバーの確認
    3. DNSクエリのテスト
  3. 解決方法1: DNSサーバーを手動設定する
    1. Google Public DNSを使う方法
    2. Cloudflare DNSを使う方法
    3. resolv.confファイルを直接編集
  4. 解決方法2: systemd-resolvedを再起動・設定する
    1. systemd-resolvedとは
    2. サービスの状態確認
    3. サービスの再起動
    4. DNSキャッシュのクリア
    5. resolved.confの設定
  5. 解決方法3: NetworkManagerの設定を見直す
    1. NetworkManagerの再起動
    2. ネットワーク接続のリセット
    3. dnsmasqの無効化
  6. 解決方法4: ファイアウォール・セキュリティの確認
    1. ufwファイアウォールの確認
    2. VPNやプロキシの確認
    3. SELinuxやAppArmorの確認
  7. 解決方法5: ルーターとモデムの再起動
    1. 家庭用ネットワーク機器の問題
    2. ISPのDNSサーバー障害
  8. 解決方法6: ネットワーク設定のトラブルシューティング
    1. /etc/hostsファイルの確認
    2. nsswitch.confの確認
    3. ネットワークインターフェースの確認
  9. 予防策と恒久的な対策
    1. 信頼できるDNSサーバーを設定
    2. システムの定期的なアップデート
    3. ログの監視
    4. バックアップの重要性
  10. よくある質問(FAQ)
    1. Q1:「名前解決エラー」と「接続エラー」の違いは?
    2. Q2:急に発生した場合、何をチェックすべき?
    3. Q3:IPv6環境での注意点は?
    4. Q4:会社のネットワークで発生する場合は?
    5. Q5:resolv.confが勝手に書き換わるのを防ぐには?
    6. Q6:Dockerコンテナ内でも発生する場合は?
  11. まとめ:名前解決エラーを確実に解決する

「名前解決」とは?エラーの意味を理解しよう

名前解決(DNS)の仕組み

名前解決とは、人間が分かりやすいドメイン名を、コンピューターが理解できるIPアドレスに変換する作業のことです。

身近な例で説明

電話帳で「山田太郎」という名前から電話番号を調べるイメージですね。

  • ドメイン名 = 人の名前(例: google.com)
  • IPアドレス = 電話番号(例: 172.217.175.46)
  • DNS = 電話帳

名前解決の流れ

  1. ブラウザで「google.com」にアクセス
  2. コンピューターがDNSサーバーに問い合わせる
  3. DNSサーバーが「google.comのIPアドレスは172.217.175.46だよ」と返す
  4. そのIPアドレスに接続してページが表示される

この流れのどこかで問題が起きると、「名前解決に失敗しました」というエラーが出るんです。

エラーメッセージの種類

Ubuntuでは、状況によって少しずつ違うメッセージが表示されます。

よくあるエラーメッセージ

一時的な名前解決エラー
Temporary failure in name resolution
Could not resolve host
Name or service not known

どれも根本的な原因は同じで、DNS解決ができていない状態を表しています。

このエラーが出る主な原因

名前解決エラーが発生する典型的な原因をまとめました。

ネットワーク接続の問題

  • Wi-Fiやイーサネットが実は繋がっていない
  • ルーターの不具合
  • ISP(インターネットプロバイダー)側の障害

DNS設定の問題

  • DNSサーバーの設定が間違っている
  • DNSサーバーが応答しない
  • resolv.confファイルの設定ミス

systemd-resolvedの問題

  • systemd-resolvedサービスが停止している
  • 設定ファイルが壊れている
  • キャッシュの不具合

ファイアウォールの問題

  • DNS通信(ポート53)がブロックされている
  • VPNやプロキシの設定ミス

NetworkManagerの問題

  • NetworkManagerサービスの不具合
  • 自動取得したDNS設定が正しくない

原因を特定することが、解決への第一歩ですよ。

基本的な確認事項

インターネット接続の確認

まず、本当にネットワークに繋がっているか確認しましょう。

pingコマンドで確認

ターミナルを開いて以下を実行:

ping -c 4 8.8.8.8

結果の見方

成功する場合:

64 bytes from 8.8.8.8: icmp_seq=1 ttl=118 time=15.2 ms

このように応答があれば、ネットワーク自体は正常です。

失敗する場合:

connect: Network is unreachable

この場合は、ネットワーク接続そのものに問題があります。Wi-Fiやケーブルを確認してください。

IPアドレスで直接アクセス

ブラウザのアドレスバーに以下を入力:

http://93.184.216.34

これはexample.comのIPアドレスです。表示されれば、ネットワークは正常でDNSだけに問題があることが分かります。

DNSサーバーの確認

現在使っているDNSサーバーを確認しましょう。

方法1: systemd-resolvedを使っている場合

systemd-resolve --status

または

resolvectl status

方法2: resolv.confを直接確認

cat /etc/resolv.conf

表示例:

nameserver 8.8.8.8
nameserver 8.8.4.4

この「nameserver」の後ろの数字がDNSサーバーのIPアドレスです。

方法3: NetworkManagerの設定確認

nmcli device show | grep DNS

これで、現在接続しているネットワークのDNS設定が分かりますよ。

DNSクエリのテスト

DNSが正しく機能しているかテストします。

nslookupコマンド

nslookup google.com

成功する場合:

Server:  8.8.8.8
Address: 8.8.8.8#53

Non-authoritative answer:
Name: google.com
Address: 142.250.196.78

失敗する場合:

;; connection timed out; no servers could be reached

digコマンド(より詳細)

dig google.com

digがインストールされていない場合:

sudo apt install dnsutils

これらのコマンドで、DNS解決が実際に動作しているか確認できます。

解決方法1: DNSサーバーを手動設定する

Google Public DNSを使う方法

最も簡単で確実な方法は、Googleの無料DNSサーバーを使うことです。

NetworkManagerを使った設定(GUI)

  1. 右上のネットワークアイコンをクリック
  2. 「設定」または「ネットワーク設定」を開く
  3. 使用中の接続(Wi-Fiまたは有線)の歯車アイコンをクリック
  4. 「IPv4」タブを選択
  5. 「DNS」の項目を探す
  6. 自動からオフに変更
  7. DNSサーバーに以下を入力:
   8.8.8.8, 8.8.4.4
  1. 「適用」をクリック
  2. ネットワークを再接続

コマンドラインから設定(nmcli)

# Wi-Fiの場合
nmcli con mod "接続名" ipv4.dns "8.8.8.8 8.8.4.4"
nmcli con mod "接続名" ipv4.ignore-auto-dns yes
nmcli con down "接続名"
nmcli con up "接続名"

接続名を確認するには:

nmcli con show

これでGoogle Public DNSが使えるようになりますよ。

Cloudflare DNSを使う方法

プライバシー重視の方には、Cloudflare DNSもおすすめです。

設定手順

上記のGoogle DNSと同じ手順で、DNSサーバーを以下に変更:

1.1.1.1, 1.0.0.1

Cloudflare DNSの特徴

  • 高速な応答速度
  • プライバシー保護を重視
  • ログを48時間で削除
  • セキュリティ機能が充実

好みに応じて選んでくださいね。

resolv.confファイルを直接編集

NetworkManagerを使わない場合の設定方法です。

注意点

systemd-resolvedが動作している場合、/etc/resolv.confはシンボリックリンクになっています。直接編集しても再起動で元に戻ることがあります。

手順

# 既存のシンボリックリンクを削除
sudo rm /etc/resolv.conf

# 新しいファイルを作成
sudo nano /etc/resolv.conf

以下の内容を記入:

nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 1.1.1.1

保存して終了(Ctrl+O、Enter、Ctrl+X)

# ファイルを保護(自動変更を防ぐ)
sudo chattr +i /etc/resolv.conf

解除する場合:

sudo chattr -i /etc/resolv.conf

これで手動設定が維持されます。

解決方法2: systemd-resolvedを再起動・設定する

systemd-resolvedとは

systemd-resolvedは、最近のUbuntuで標準的に使われているDNS管理サービスです。

役割

  • DNSクエリのキャッシュ
  • 複数のDNSソースを統合管理
  • mDNS(マルチキャストDNS)のサポート
  • DNSSEC(DNS Security Extensions)対応

サービスの状態確認

まず、systemd-resolvedが正常に動作しているか確認しましょう。

systemctl status systemd-resolved

正常な場合

● systemd-resolved.service - Network Name Resolution
   Active: active (running) since ...

異常な場合

● systemd-resolved.service - Network Name Resolution
   Active: inactive (dead)

または

Active: failed

サービスの再起動

問題がある場合は、サービスを再起動してみます。

sudo systemctl restart systemd-resolved

状態を再確認:

systemctl status systemd-resolved

これだけで解決することも多いですよ。

DNSキャッシュのクリア

古いキャッシュが原因の場合もあります。

# キャッシュをクリア
sudo systemd-resolve --flush-caches

または

sudo resolvectl flush-caches

確認:

sudo systemd-resolve --statistics

キャッシュがリセットされていることを確認してください。

resolved.confの設定

systemd-resolvedの設定ファイルをカスタマイズできます。

sudo nano /etc/systemd/resolved.conf

以下のように編集:

[Resolve]
DNS=8.8.8.8 8.8.4.4
FallbackDNS=1.1.1.1 1.0.0.1
#DNSSEC=allow-downgrade
#DNSOverTLS=no

保存後、サービスを再起動:

sudo systemctl restart systemd-resolved

設定が反映されます。

解決方法3: NetworkManagerの設定を見直す

NetworkManagerの再起動

NetworkManagerに一時的な不具合がある場合の対処法です。

sudo systemctl restart NetworkManager

念のため、systemd-resolvedも一緒に再起動:

sudo systemctl restart systemd-resolved
sudo systemctl restart NetworkManager

これで接続がリセットされますよ。

ネットワーク接続のリセット

接続設定を一度削除して再作成する方法です。

Wi-Fi接続をリセット

# 現在の接続を確認
nmcli con show

# 接続を削除
nmcli con delete "接続名"

# 再接続(GUIから再度接続)

有線接続をリセット

# 接続を削除
sudo rm /etc/NetworkManager/system-connections/*

# NetworkManagerを再起動
sudo systemctl restart NetworkManager

再接続すれば、クリーンな状態で設定されます。

dnsmasqの無効化

NetworkManagerがdnsmasqを使っている場合、競合することがあります。

sudo nano /etc/NetworkManager/NetworkManager.conf

以下の行を探してコメントアウト(#を付ける):

[main]
plugins=ifupdown,keyfile
#dns=dnsmasq

保存後、再起動:

sudo systemctl restart NetworkManager

これでdnsmasqを使わずに直接DNS解決するようになります。

解決方法4: ファイアウォール・セキュリティの確認

ufwファイアウォールの確認

ファイアウォールがDNS通信をブロックしている可能性があります。

sudo ufw status

無効化して確認

sudo ufw disable

この状態で名前解決ができるか確認。できる場合は、ファイアウォールが原因です。

DNS通信を許可

sudo ufw allow 53/udp
sudo ufw allow 53/tcp
sudo ufw enable

これでDNS通信(ポート53)が許可されます。

VPNやプロキシの確認

VPNやプロキシを使っている場合、DNS設定が上書きされることがあります。

VPNを一時的に切断

VPNクライアントを停止して、名前解決ができるか確認してください。

プロキシ設定の確認

env | grep -i proxy

プロキシが設定されている場合、一時的に無効化:

unset http_proxy
unset https_proxy
unset HTTP_PROXY
unset HTTPS_PROXY

これで通常の接続に戻ります。

SELinuxやAppArmorの確認

セキュリティモジュールがDNS通信を制限している可能性もあります。

AppArmorの状態確認

sudo aa-status

一時的に無効化

sudo systemctl stop apparmor

名前解決ができるか確認し、問題があればAppArmorのプロファイルを調整してください。

解決方法5: ルーターとモデムの再起動

家庭用ネットワーク機器の問題

意外と見落としがちですが、ルーターやモデムの不具合も原因になります。

再起動手順

  1. モデムとルーターの電源を切る
  2. 2分間待つ
  3. モデムの電源を入れる
  4. ランプが安定するまで待つ(1~2分)
  5. ルーターの電源を入れる
  6. 接続が確立するまで待つ

これでネットワーク機器がリフレッシュされます。

ISPのDNSサーバー障害

プロバイダー側のDNSサーバーに問題がある場合もあります。

確認方法

  • 他のデバイス(スマホなど)でも同じ問題が起きるか確認
  • ISPの障害情報ページをチェック
  • SNSでISP名+「障害」で検索

ISP側の問題なら、復旧を待つか、Google DNSなどの外部DNSを使いましょう。

解決方法6: ネットワーク設定のトラブルシューティング

/etc/hostsファイルの確認

hostsファイルに不適切なエントリがあると問題が起きます。

cat /etc/hosts

正常な内容の例

127.0.0.1   localhost
127.0.1.1   your-hostname

# IPv6
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

不要なエントリを削除

sudo nano /etc/hosts

不審な行を削除して保存してください。

nsswitch.confの確認

名前解決の優先順位を定義するファイルです。

cat /etc/nsswitch.conf

hostsの行を確認:

hosts: files mdns4_minimal [NOTFOUND=return] dns

推奨設定

hosts: files dns

シンプルな設定の方が問題が起きにくいです。

編集する場合:

sudo nano /etc/nsswitch.conf

ネットワークインターフェースの確認

ネットワークカードが正常に認識されているか確認します。

ip link show

UP状態か確認

2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP>

UPと表示されていればOKです。

ダウンしている場合:

sudo ip link set enp3s0 up

インターフェース名は環境によって異なります(wlan0、eth0など)。

予防策と恒久的な対策

信頼できるDNSサーバーを設定

一度解決したら、信頼性の高いDNSサーバーを固定しましょう。

おすすめのパブリックDNS

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ファミリーフィルター

用途に応じて選んでくださいね。

システムの定期的なアップデート

古いバージョンのバグが原因のこともあります。

sudo apt update
sudo apt upgrade

特にNetworkManagerやsystemd関連のパッケージは最新に保ちましょう。

ログの監視

問題が再発する場合は、ログを確認する習慣をつけましょう。

# systemd-resolvedのログ
journalctl -u systemd-resolved -f

# NetworkManagerのログ
journalctl -u NetworkManager -f

# システム全体のログ
sudo tail -f /var/log/syslog

エラーの兆候を早期に発見できますよ。

バックアップの重要性

正常に動作している時の設定をバックアップしておきましょう。

# 設定ファイルのバックアップ
sudo cp /etc/resolv.conf /etc/resolv.conf.backup
sudo cp /etc/systemd/resolved.conf /etc/systemd/resolved.conf.backup
sudo cp /etc/NetworkManager/NetworkManager.conf /etc/NetworkManager/NetworkManager.conf.backup

問題が起きたら、バックアップから復元できます。

よくある質問(FAQ)

Q1:「名前解決エラー」と「接続エラー」の違いは?

A:
似ていますが、原因が異なります。

名前解決エラー

  • DNSサーバーに問題がある
  • ドメイン名をIPアドレスに変換できない
  • pingでIPアドレス(8.8.8.8)は成功する

接続エラー

  • ネットワーク自体に問題がある
  • インターネットに繋がっていない
  • pingでIPアドレスも失敗する

pingコマンドで切り分けができますよ。

Q2:急に発生した場合、何をチェックすべき?

A:
以下の順番で確認してください。

  1. 他のデバイスでも同じ問題が起きるか確認
    → 起きる場合はルーター/ISPの問題
  2. pingでIPアドレスに到達できるか確認
    → できない場合はネットワークの問題
  3. systemd-resolvedの状態確認
    → 停止していれば再起動
  4. Google DNSなど外部DNSを試す
    → 成功すれば元のDNS設定の問題

大体はこれで原因が特定できます。

Q3:IPv6環境での注意点は?

A:
IPv6とIPv4の両方を考慮する必要があります。

IPv6のDNSサーバー

Google Public DNS:

2001:4860:4860::8888
2001:4860:4860::8844

Cloudflare DNS:

2606:4700:4700::1111
2606:4700:4700::1001

設定方法

NetworkManagerのIPv6タブでDNSを設定するか:

nmcli con mod "接続名" ipv6.dns "2001:4860:4860::8888,2001:4860:4860::8844"

Q4:会社のネットワークで発生する場合は?

A:
企業ネットワークでは特別な設定が必要な場合があります。

確認事項

  • 社内のDNSサーバーを使う必要があるか
  • プロキシ設定が必要か
  • VPN経由でしかアクセスできないか

IT部門に確認して、適切なDNS設定を教えてもらいましょう。勝手にパブリックDNSに変更すると、社内リソースにアクセスできなくなることがあります。

Q5:resolv.confが勝手に書き換わるのを防ぐには?

A:
いくつかの方法があります。

方法1:ファイルを保護

sudo chattr +i /etc/resolv.conf

方法2:NetworkManagerで固定

GUI設定でDNSを手動指定し、「自動DNS」をオフにする。

方法3:systemd-resolvedの設定

/etc/systemd/resolved.confでDNSを指定する(前述)。

環境に応じて適切な方法を選んでくださいね。

Q6:Dockerコンテナ内でも発生する場合は?

A:
DockerコンテナのDNS設定を確認してください。

docker-compose.ymlで設定

version: '3'
services:
  myapp:
    image: myimage
    dns:
      - 8.8.8.8
      - 8.8.4.4

dockerコマンドで指定

docker run --dns 8.8.8.8 --dns 8.8.4.4 myimage

daemon.jsonで全体設定

sudo nano /etc/docker/daemon.json
{
  "dns": ["8.8.8.8", "8.8.4.4"]
}
sudo systemctl restart docker

まとめ:名前解決エラーを確実に解決する

「名前解決に一時的に失敗しました」エラーは、原因さえ分かれば解決できる問題です。

この記事のポイント

  • 名前解決はDNSでドメイン名をIPアドレスに変換する仕組み
  • エラーの原因はDNS設定、systemd-resolved、NetworkManagerなど多岐にわたる
  • まずpingコマンドでネットワーク接続を確認
  • Google DNSやCloudflare DNSを手動設定すると解決することが多い
  • systemd-resolvedの再起動で解決する場合もある
  • ルーターやモデムの再起動も試す価値がある
  • 解決後は信頼できるDNSサーバーを固定する

解決のフローチャート

  1. pingで8.8.8.8に到達できるか確認
    → できない場合はネットワーク接続を確認
  2. systemd-resolvedの状態を確認
    → 異常があれば再起動
  3. Google DNSを手動設定
    → これで解決することが最も多い
  4. ルーター/モデムを再起動
    → ISP側の問題の可能性
  5. それでもダメならファイアウォール、VPN、プロキシを確認

焦らず一つずつ試してみてください

トラブルシューティングは、慌てずに順番に試すことが大切です。この記事の方法を試せば、ほとんどの名前解決エラーは解決できるはずですよ。

それでも解決しない場合は、Ubuntuの公式フォーラムやコミュニティで質問してみましょう。ログを添えて質問すれば、詳しい人が助けてくれますよ!

コメント

タイトルとURLをコピーしました