Linuxで「インターネットにはつながっているのにWebサイトが開けない」「IPアドレスでは通信できるのにドメイン名では通信できない」といった場合、DNSの名前解決に問題が起きている可能性があります。DNSは、example.com のようなドメイン名を実際のIPアドレスへ変換する仕組みです。この部分が壊れると、ネットワーク自体が生きていても、普段のインターネット利用がほぼ不可能になります。
よくある症状
- ブラウザで「サーバーが見つかりません」と表示される
ping 8.8.8.8は成功するが、ping google.comは失敗するapt、dnf、yum、pacmanなどのパッケージ取得に失敗するTemporary failure in name resolutionと表示される
まず確認すべき切り分け
最初に、「ネットワークそのものが死んでいる」のか、「DNSだけが壊れている」のかを分けて確認します。
ping -c 4 8.8.8.8
ping -c 4 google.com
ip addr
ip route
8.8.8.8 に届くのに google.com に届かない場合、DNSの設定やDNSサービスの異常を疑います。逆にIPアドレス宛ても失敗するなら、LAN接続、Wi-Fi、ゲートウェイ、ルーティングなど、より下の層の問題である可能性が高いです。
主な原因
1. /etc/resolv.conf の設定不備
Linuxでは、DNSサーバー情報が /etc/resolv.conf に記録されていることが多いです。ここに正しい nameserver が入っていないと名前解決ができません。
cat /etc/resolv.conf
内容例:
nameserver 8.8.8.8
nameserver 1.1.1.1
もし空だったり、存在しないローカルDNSを向いていたりする場合は問題です。ただし、最近のLinuxではこのファイルを手動で編集しても、NetworkManager や systemd-resolved によって上書きされることがあります。
2. systemd-resolved の不具合
Ubuntuなどでは systemd-resolved がDNS解決を管理し、127.0.0.53 をローカルスタブとして使うことがあります。このサービスが停止すると名前解決が失敗します。
systemctl status systemd-resolved
resolvectl status
問題がある場合は再起動します。
sudo systemctl restart systemd-resolved
3. NetworkManager 側のDNS配布ミス
デスクトップLinuxでは、NetworkManagerがDHCP経由で取得したDNS情報を適用していることがあります。Wi-Fiの再接続やネットワークプロファイル破損により、正しいDNSが入らないことがあります。
nmcli dev show | grep DNS
nmcli connection show
必要に応じて接続を入れ直します。
sudo systemctl restart NetworkManager
4. VPN・プロキシ・ファイアウォールの影響
VPN接続中にDNSだけ別経路へ送られたり、ファイアウォールが53番ポートを遮断したりすると、名前解決だけ失敗することがあります。企業環境やセキュリティ系ソフト導入時によく起こります。
5. DNSキャッシュの不整合
ローカルのキャッシュが古かったり壊れていたりすると、特定ドメインだけ解決に失敗することがあります。systemd-resolved や nscd を使っている環境ではキャッシュ削除が有効です。
sudo resolvectl flush-caches
実践的な対処手順
手順1: DNSサーバーへ直接問い合わせる
nslookup google.com 8.8.8.8
dig google.com @8.8.8.8
これで応答が返るなら、外部DNS自体は正常で、ローカル設定側に原因がある可能性が高いです。
手順2: 一時的に public DNS を設定する
すぐに復旧したい場合は、一時的に public DNS を使って確認できます。
sudo sh -c 'printf "nameserver 8.8.8.8\nnameserver 1.1.1.1\n" > /etc/resolv.conf'
ただしこの方法は再起動や再接続で元に戻ることがあります。恒久対策としては、NetworkManager や netplan、systemd-resolved 側の設定を直す必要があります。
手順3: Ubuntu系で netplan を確認する
sudo nano /etc/netplan/*.yaml
例:
nameservers:
addresses: [8.8.8.8,1.1.1.1]
変更後は反映します。
sudo netplan apply
手順4: DHCP再取得
sudo dhclient -r
sudo dhclient
DHCPで誤ったDNS情報を受け取っていた場合、再取得で改善することがあります。
確認用コマンドまとめ
ping -c 4 8.8.8.8
ping -c 4 google.com
cat /etc/resolv.conf
systemctl status systemd-resolved
resolvectl status
nmcli dev show | grep DNS
nslookup google.com
dig google.com
journalctl -u systemd-resolved --no-pager | tail -n 50
再発防止のポイント
/etc/resolv.confを直接編集するだけで終わらせない- DHCP・NetworkManager・systemd-resolved のどこがDNSを管理しているか把握する
- VPN導入後にDNSが変わっていないか確認する
- サーバー用途なら固定DNS設定を明示しておく
まとめ
LinuxでDNSが解決できない場合は、まず「IPでは通信できるか」を確認し、DNSだけの障害かどうかを切り分けることが重要です。そのうえで /etc/resolv.conf、systemd-resolved、NetworkManager、DHCP、VPN設定を順に確認すれば、多くのケースは原因を特定できます。焦って一時的な修正だけを入れるのではなく、どの仕組みがDNS設定を管理しているのかを理解したうえで恒久対策を行うのが重要です。