Ubuntu環境でのローカルDNSサーバー設定ガイド

Ubuntu環境でローカルDNSサーバーや特定のDNSサーバーを設定しようとすると、/etc/resolv.conf ファイルを直接編集しても変更が反映されなかったり、再起動後に元に戻ってしまったりする問題に直面することがあります。これは、systemd-resolved サービスがDNS設定を管理しているためです。

systemd-resolved が管理している環境でDNSサーバーを設定するには、いくつかの方法があります。

1. /etc/resolv.conf のシンボリックリンクを解除し、直接編集する

最も直接的な方法ですが、systemd-resolved の管理から外れるため、注意が必要です。

まず、/etc/resolv.confsystemd-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.yaml50-cloud-init.yaml)。既存のファイルを編集するか、新しいファイルを作成します。

sudo nano /etc/netplan/00-custom-dns.yaml

ファイルの内容を以下のように記述します。ethernets の下のインターフェース名(例: enp0s3eth0)は、ご自身の環境に合わせて変更してください。

# /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-resolvednetplan の設定を読み込み、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 を使用する方法が推奨されます。