見出し画像

[MINISFORUM] 最小構成のDebianで固定IPにする際の落とし穴:DNS設定の正しい手順 [MS-S1 MAX]

第一回目の設定手順ですが、ここは補足をしないとなりません。DNSの設定方法が不足していました。しれっとここに残しておきます。

dhcp を介さない場合に、そのままだと /etc/network/interfaces.d/ の dns-nameservers 設定が自動的に /etc/resolv.conf に反映されません。ひどい。

固定IP環境での DNS 設定手順

Debian/Ubuntu で静的IP設定を使用する場合、`/etc/network/interfaces.d/` に `dns-nameservers` を指定しても、`/etc/resolv.conf` に DNS サーバーが自動的に反映されない問題が発生します。

症状

$ cat /etc/resolv.conf
# Generated by dhcpcd
# /etc/resolv.conf.head can replace this line
# /etc/resolv.conf.tail can replace this line

nameserver エントリが空

影響

  • DNS 解決ができない

  • `apt update` が失敗する(`deb.debian.org` などが解決できない)

  • ネットワーク接続はあるが、名前解決ができない


根本原因

静的IP環境で `/etc/resolv.conf` が空になる原因:

  1. ifupdown の dns-nameservers 設定は、デフォルトで `systemd-resolved` または `resolvconf` に依存

  2. Debian Trixie (13) では、最小構成で以下のパッケージがインストールされていない:

    • `resolvconf` パッケージ(ifupdown の DNS 管理)

    • `systemd-resolved`(systemd の DNS 管理)

  3. dhcpcd は DHCP クライアント用で、静的IP設定では DNS を `/etc/resolv.conf` に書き込まない

  4. 結果:`/etc/resolv.conf` が空のまま生成される


解決策

オプション 1: resolvconf パッケージをインストール(推奨)

特徴

  • 静的IP設定の標準的な方法

  • `/etc/network/interfaces.d/` の `dns-nameservers` がそのまま使える

  • シンプルで管理しやすい

手順

1. 一時的に DNS を手動設定

# /etc/resolv.conf を一時的に手動設定(apt が使えるようにする)
sudo tee /etc/resolv.conf > /dev/null <<EOF
nameserver 192.168.0.254
EOF

2. resolvconf パッケージをインストール

sudo apt update
sudo apt install resolvconf

3. ネットワークインターフェースを再起動

# インターフェース名は環境により異なる(ip a で確認)
sudo ifdown <interface-name>
sudo ifup <interface-name>

# 例:
sudo ifdown enp193s0 && ifup enp193s0

4. 確認

# /etc/resolv.conf が正しく生成されたか確認
cat /etc/resolv.conf
# 期待される出力:
# # Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# #     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
# nameserver 192.168.0.254

# DNS 解決をテスト
getent hosts deb.debian.org

# apt update をテスト
sudo apt update

オプション 2: systemd-resolved を使用(モダンな方法)

特徴

  • systemd の標準機能

  • より高機能(mDNS、LLMNR サポート)

  • 設定が複雑になる可能性がある

手順

1. systemd-resolved をインストール・有効化

sudo apt update
sudo apt install systemd-resolved
sudo systemctl enable --now systemd-resolved

2. /etc/resolv.conf をシンボリックリンクに変更

# 既存の /etc/resolv.conf をバックアップ
sudo mv /etc/resolv.conf /etc/resolv.conf.backup

# systemd-resolved のスタブリゾルバにリンク
sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

3. ネットワーク設定を systemd-networkd に移行(オプション)

# /etc/systemd/network/10-static.network
[Match]
Name=enp193s0

[Network]
Address=192.168.0.13/24
Gateway=192.168.0.254
DNS=192.168.0.254

4. 確認

# systemd-resolved の状態確認
systemctl status systemd-resolved
resolvectl status

# DNS 解決テスト
getent hosts deb.debian.org

オプション 3: 手動管理(非推奨)

特徴

  • 最もシンプルだが、再起動で消える可能性がある

  • 一時的な対処療法

手順

# /etc/resolv.conf を直接編集
sudo tee /etc/resolv.conf > /dev/null <<EOF
nameserver 192.168.0.254
nameserver 8.8.8.8
search your-domain.com
EOF

# 変更不可にする(オプション)
sudo chattr +i /etc/resolv.conf

問題点

  • システムやパッケージの更新で上書きされる可能性がある

  • 自動化に向かない

いいなと思ったら応援しよう!

しょっさん あなたの支えが、私の心の糧になります。 note の収益はガジェットのレビューや、自費出版に使わせていただきます。