「一時的な名前解決エラー」「Temporary failure in name resolution」
Ubuntuを使っていて、突然このエラーメッセージに遭遇したことはありませんか?インターネットには繋がっているはずなのに、ブラウザでサイトが開けない、apt updateができない…そんな困った状況ですよね。
このエラーは、DNS(Domain Name System)と呼ばれる仕組みに問題が起きている証拠です。難しそうに聞こえますが、実は原因を理解すれば、初心者でも自力で解決できることが多いんですよ。
この記事では、「名前解決に一時的に失敗しました」エラーの原因から、具体的な解決方法まで、分かりやすく丁寧に解説していきます。
「名前解決」とは?エラーの意味を理解しよう
名前解決(DNS)の仕組み
名前解決とは、人間が分かりやすいドメイン名を、コンピューターが理解できるIPアドレスに変換する作業のことです。
身近な例で説明
電話帳で「山田太郎」という名前から電話番号を調べるイメージですね。
- ドメイン名 = 人の名前(例: google.com)
- IPアドレス = 電話番号(例: 172.217.175.46)
- DNS = 電話帳
名前解決の流れ
- ブラウザで「google.com」にアクセス
- コンピューターがDNSサーバーに問い合わせる
- DNSサーバーが「google.comのIPアドレスは172.217.175.46だよ」と返す
- その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)
- 右上のネットワークアイコンをクリック
- 「設定」または「ネットワーク設定」を開く
- 使用中の接続(Wi-Fiまたは有線)の歯車アイコンをクリック
- 「IPv4」タブを選択
- 「DNS」の項目を探す
- 自動からオフに変更
- DNSサーバーに以下を入力:
8.8.8.8, 8.8.4.4
- 「適用」をクリック
- ネットワークを再接続
コマンドラインから設定(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: ルーターとモデムの再起動
家庭用ネットワーク機器の問題
意外と見落としがちですが、ルーターやモデムの不具合も原因になります。
再起動手順
- モデムとルーターの電源を切る
- 2分間待つ
- モデムの電源を入れる
- ランプが安定するまで待つ(1~2分)
- ルーターの電源を入れる
- 接続が確立するまで待つ
これでネットワーク機器がリフレッシュされます。
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 DNS | 8.8.8.8 | 8.8.4.4 | 高速・安定 |
Cloudflare DNS | 1.1.1.1 | 1.0.0.1 | プライバシー重視 |
Quad9 | 9.9.9.9 | 149.112.112.112 | セキュリティ重視 |
OpenDNS | 208.67.222.222 | 208.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:
以下の順番で確認してください。
- 他のデバイスでも同じ問題が起きるか確認
→ 起きる場合はルーター/ISPの問題 - pingでIPアドレスに到達できるか確認
→ できない場合はネットワークの問題 - systemd-resolvedの状態確認
→ 停止していれば再起動 - 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サーバーを固定する
解決のフローチャート
- pingで8.8.8.8に到達できるか確認
→ できない場合はネットワーク接続を確認 - systemd-resolvedの状態を確認
→ 異常があれば再起動 - Google DNSを手動設定
→ これで解決することが最も多い - ルーター/モデムを再起動
→ ISP側の問題の可能性 - それでもダメならファイアウォール、VPN、プロキシを確認
焦らず一つずつ試してみてください
トラブルシューティングは、慌てずに順番に試すことが大切です。この記事の方法を試せば、ほとんどの名前解決エラーは解決できるはずですよ。
それでも解決しない場合は、Ubuntuの公式フォーラムやコミュニティで質問してみましょう。ログを添えて質問すれば、詳しい人が助けてくれますよ!
コメント