手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 26.04 systemd-resolved の基本 – DNS 設定と名前解決を確認する

関連する記事

Ubuntu 26.04 では、名前解決の状態確認に systemd-resolvedresolvectlgetent hosts を使います。DNS サーバー、検索ドメイン、リンク単位の DNS、/etc/resolv.conf の向き先を分けて見ると、APT、SSH、内部サービス接続の失敗を切り分けやすくなります。

この記事では、systemd-resolved の状態、/etc/resolv.conf、DNS サーバー、検索ドメイン、split DNS、キャッシュ、ログ確認、getent hosts を含む名前解決の検証を扱います。固定の hosts エントリだけを見るのではなく、OS 全体の名前解決経路を確認するための記事です。

名前解決で見る対象を分ける

Ubuntu の名前解決では、/etc/hosts/etc/resolv.conf、systemd-resolved、DNS サーバー、NSS の結果を分けて確認します。getent hosts はアプリケーションが参照する名前解決の見え方に近く、resolvectl query は systemd-resolved 経由の確認に向いています。

/etc/hosts はローカル固定エントリ、/etc/resolv.conf は resolver の入口、systemd-resolved はリンク単位の DNS や split DNS を扱う層です。どこで失敗しているかを分けると、DNS 設定の問題なのか、hosts エントリの問題なのか、経路や firewall の問題なのかを判断しやすくなります。

systemd-resolved の状態を確認する

まずサービス状態と、現在の DNS 設定を確認します。

systemctl status systemd-resolved.service --no-pager
resolvectl status
resolvectl dns
resolvectl domain

/etc/resolv.conf を確認する

/etc/resolv.conf がどこを指しているかを確認します。Ubuntu では stub resolver を使う構成が一般的です。

ls -l /etc/resolv.conf
readlink -f /etc/resolv.conf
cat /etc/resolv.conf

名前解決を確認する

実際に名前解決できるかを確認します。resolvectl querygetent hosts の両方を見ると、systemd-resolved と NSS 経由の見え方を確認できます。

resolvectl query www.example.com
getent hosts www.example.com
getent ahosts www.example.com

DNS サーバーを一時設定する

検証のためにリンク単位で DNS サーバーを指定します。永続化する場合は netplan などのネットワーク設定側で管理します。

sudo resolvectl dns eth0 192.0.2.53
sudo resolvectl domain eth0 example.com
resolvectl status eth0
resolvectl query server.example.com

split DNS を確認する

特定ドメインだけ特定 DNS へ問い合わせる構成では、リンクごとの domain 設定が重要です。~example.com は routing domain として扱われます。

sudo resolvectl dns eth0 192.0.2.53
sudo resolvectl domain eth0 '~example.com'
resolvectl status eth0
resolvectl query host1.example.com

グローバル DNS 設定を追加する

systemd-resolved 側でグローバル DNS を指定する場合は、drop-in として分けて管理します。ネットワーク管理方式と競合しないか確認してから使います。

sudo install -d -o root -g root -m 0755 /etc/systemd/resolved.conf.d
sudo tee /etc/systemd/resolved.conf.d/10-dns.conf >/dev/null <<'EOF'
[Resolve]
DNS=192.0.2.53 2001:db8::53
FallbackDNS=1.1.1.1 2606:4700:4700::1111
Domains=example.com
DNSSEC=no
EOF
sudo systemctl restart systemd-resolved.service
resolvectl status

キャッシュを確認する

名前解決結果が古い場合は、キャッシュの統計確認と flush を行います。

resolvectl statistics
sudo resolvectl flush-caches
resolvectl statistics

DNSSEC と LLMNR / mDNS を確認する

環境によっては DNSSEC、LLMNR、mDNS の設定が名前解決に影響します。サーバー用途では必要性を確認して有効無効を決めます。

resolvectl status | grep -E 'DNSSEC|LLMNR|mDNS'
systemd-analyze cat-config systemd/resolved.conf
resolvectl status

ログを確認する

systemd-resolved の動作や再起動後の状態は journal で確認します。

journalctl -u systemd-resolved.service -b --no-pager
journalctl -u systemd-resolved.service --since '1 hour ago' --no-pager

ネットワーク経路と合わせて確認する

DNS サーバーのアドレスが設定されていても、そこへ到達できなければ名前解決は失敗します。経路と疎通を合わせて確認します。

ip route get 192.0.2.53
ping -c 4 192.0.2.53
nc -vz 192.0.2.53 53

APT や SSH の失敗と切り分ける

APT や SSH の失敗が DNS 由来か、通信経路由来か、TLS 由来かを分けます。まず名前解決だけを確認し、その後に接続確認へ進みます。

resolvectl query archive.ubuntu.com
getent hosts archive.ubuntu.com
curl -I https://archive.ubuntu.com/
ssh -G ubuntu2604-admin | grep '^hostname'

確認項目

  • systemd-resolved.service が active か。
  • /etc/resolv.conf の向き先が想定どおりか。
  • リンクごとの DNS サーバーと search domain が正しいか。
  • split DNS の routing domain が必要に応じて設定されているか。
  • DNS サーバーへの経路と疎通があるか。
  • APT や SSH の失敗を DNS だけでなく経路や TLS と分けて確認しているか。

まとめ

Ubuntu 26.04 の systemd-resolved では、サービス状態、/etc/resolv.conf、リンク単位の DNS、検索ドメイン、キャッシュ、ログを分けて確認します。名前解決の状態を先に固定できると、APT、SSH、内部サービス接続の障害を切り分けやすくなります。

関連する記事
Ubuntu 26.04 systemd-resolved の基本 – DNS 設定と名前解決を確認する

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る