Ubuntu環境でローカルDNSサーバーや特定のDNSサーバーを設定しようとすると、/etc/resolv.conf
ファイルを直接編集しても変更が反映されなかったり、再起動後に元に戻ってしまったりする問題に直面することがあります。これは、systemd-resolved
サービスがDNS設定を管理しているためです。
systemd-resolved
が管理している環境でDNSサーバーを設定するには、いくつかの方法があります。
1. /etc/resolv.conf
のシンボリックリンクを解除し、直接編集する
最も直接的な方法ですが、systemd-resolved
の管理から外れるため、注意が必要です。
まず、/etc/resolv.conf
が systemd-resolved
によって管理されているシンボリックリンクであることを確認します。
ls -l /etc/resolv.conf
# 例: lrwxrwxrwx 1 root root 39 Apr 9 10:00 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
シンボリックリンクを解除し、新しいファイルを作成します。
sudo rm /etc/resolv.conf
sudo nano /etc/resolv.conf
nano
エディタでファイルが開かれるので、以下のようにDNSサーバーのIPアドレスを記述します。
# /etc/resolv.conf
nameserver 192.168.1.100 # ローカルDNSサーバーのIPアドレス
nameserver 8.8.8.8 # フォールバック用のパブリックDNS (例: Google Public DNS)
ファイルを保存してエディタを終了します。
2. netplan
を使用してDNSサーバーを設定する(推奨)
Ubuntu 18.04 LTS以降では、ネットワーク設定の管理に netplan
が推奨されています。netplan
を使用すると、YAML形式の設定ファイルでネットワークインターフェースやDNSサーバーなどを一元的に管理できます。
netplan
の設定ファイルは通常 /etc/netplan/
ディレクトリにあります(例: 01-network-manager-all.yaml
や 50-cloud-init.yaml
)。既存のファイルを編集するか、新しいファイルを作成します。
sudo nano /etc/netplan/00-custom-dns.yaml
ファイルの内容を以下のように記述します。ethernets
の下のインターフェース名(例: enp0s3
や eth0
)は、ご自身の環境に合わせて変更してください。
# /etc/netplan/00-custom-dns.yaml
network:
version: 2
renderer: networkd # または NetworkManager
ethernets:
enp0s3: # ご自身の環境のインターフェース名に置き換える
dhcp4: yes # DHCPを使用する場合
# または static IP を設定する場合
# addresses: [192.168.1.10/24]
# gateway4: 192.168.1.1
nameservers:
addresses: [192.168.1.100, 8.8.8.8] # 設定したいDNSサーバーのIPアドレス
search: [yourdomain.local] # 検索ドメイン (オプション)
設定ファイルを保存したら、以下のコマンドで設定を適用します。
sudo netplan try
# 設定に問題がなければ Enter を押して適用
sudo netplan apply
これにより、systemd-resolved
が netplan
の設定を読み込み、DNSサーバーが正しく設定されます。
3. systemd-resolved
の設定ファイルを編集する
systemd-resolved
の設定ファイル /etc/systemd/resolved.conf
を編集する方法もあります。
sudo nano /etc/systemd/resolved.conf
以下の行のコメントを解除し、設定したいDNSサーバーのIPアドレスを記述します。
# /etc/systemd/resolved.conf
[Resolve]
#DNS=
#FallbackDNS=
#Domains=
#DNSSEC=no
#DNSOverTLS=no
#MulticastDNS=no
#LLMNR=no
#Cache=yes
#DNSStubListener=yes
#ReadEtcHosts=yes
DNS=192.168.1.100 8.8.8.8
#FallbackDNS=
#Domains=yourdomain.local
変更を保存したら、systemd-resolved
サービスを再起動します。
sudo systemctl restart systemd-resolved
これらの方法のいずれかを使用することで、Ubuntu環境でローカルDNSサーバーを適切に設定することができます。通常は netplan
を使用する方法が推奨されます。