検証

【Ubuntu 24.04】初期設定からDNSサーバの指定を恒久的に変更する方法

gumio

今回はUbuntuサーバでDNS設定を恒久的に変更する方法を解説します。
初期セットアップ後にcloud-initが生成したNetplanファイル(50-cloud-init.yaml)の影響で、再起動のたびにDNS設定が元に戻ってしまうという問題が発生することがあります。

今回のモデルケースとして、初期セットアップ時にDNSサーバとして192.168.40.1が設定されていた環境で、これを恒久的に8.8.8.8 / 1.1.1.1に変更する方法を紹介します。
この記事では、cloud-initの干渉を停止し、再起動時に設定が復活する現象を回避する手順を解説します

前提条件

  • Ubuntu Server 24.04.3 LTS を使用
  • IP アドレス/ゲートウェイ/DNSサーバは固定設定
  • セットアップ時のDNSサーバ:192.168.40.1
  • OpenSSH Serverはインストール済み
  • 上記以外はすべてデフォルト設定で、初回ログイン直後のクリーンな状態から作業を開始

手順

以下のコマンドすべてUbuntuホスト側で実行します。

①現在のネットワーク設定(揮発性)を確認

DNS=192.168.40.1であることが分かります。

gumio@ubuntu-server:~$ ls -al /run/systemd/network/
total 4
drwxr-xr-x  2 root root             60 Nov 14 07:31 .
drwxr-xr-x 23 root root            600 Nov 15 04:07 ..
-rw-r-----  1 root systemd-network 150 Nov 14 07:31 10-netplan-ens18.network
gumio@ubuntu-server:~$
gumio@ubuntu-server:~$ sudo cat /run/systemd/network/10-netplan-ens18.network
[sudo] password for gumio:
[Match]
Name=ens18

[Network]
LinkLocalAddressing=ipv6
Address=192.168.40.10/24
DNS=192.168.40.1

[Route]
Destination=0.0.0.0/0
Gateway=192.168.40.99
gumio@ubuntu-server:~$

②現在反映されているDNSサーバを確認

gumio@ubuntu-server:~$ resolvectl
Global
         Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
  resolv.conf mode: stub

Link 2 (ens18)
    Current Scopes: DNS
         Protocols: +DefaultRoute -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 192.168.40.1
       DNS Servers: 192.168.40.1
gumio@ubuntu-server:~$

③Netplanの設定ファイル(不揮発性)を確認

以下の出力例のように、XX-cloud-init.yamlというファイルが存在することが分かります。
このファイルが、起動時に①の10-netplan-ens18.networkを自動生成しています。

gumio@ubuntu-server:~$ ls -al /etc/netplan/
total 12
drwxr-xr-x   2 root root 4096 Nov 14 07:15 .
drwxr-xr-x 108 root root 4096 Nov 14 07:15 ..
-rw-------   1 root root  235 Nov 14 07:15 50-cloud-init.yaml
gumio@ubuntu-server:~$
gumio@ubuntu-server:~$ sudo cat /etc/netplan/50-cloud-init.yaml
network:
  version: 2
  ethernets:
    ens18:
      addresses:
      - "192.168.40.10/24"
      nameservers:
        addresses:
        - 192.168.40.1
        search: []
      routes:
      - to: "default"
        via: "192.168.40.99"
gumio@ubuntu-server:~$

④cloud-initによるNetplan生成を無効化

cloud-initがNetplanに干渉しないよう、対象ファイルを無効化します。

gumio@ubuntu-server:~$ sudo mv /etc/netplan/50-cloud-init.yaml /etc/netplan/50-cloud-init.yaml.disabled
gumio@ubuntu-server:~$
gumio@ubuntu-server:~$
gumio@ubuntu-server:~$ ls -al /etc/netplan/
total 12
drwxr-xr-x   2 root root 4096 Nov 15 06:01 .
drwxr-xr-x 108 root root 4096 Nov 14 07:15 ..
-rw-------   1 root root  235 Nov 14 07:15 50-cloud-init.yaml.disabled
gumio@ubuntu-server:~$

⑤新しいNetplan設定ファイルを作成

gumio@ubuntu-server:~$ sudo nano /etc/netplan/99-network.yaml
gumio@ubuntu-server:~$
gumio@ubuntu-server:~$ ls -al /etc/netplan/
total 16
drwxr-xr-x   2 root root 4096 Nov 15 06:07 .
drwxr-xr-x 108 root root 4096 Nov 14 07:15 ..
-rw-------   1 root root  235 Nov 14 07:15 50-cloud-init.yaml.disabled
-rw-r--r--   1 root root  366 Nov 15 06:07 99-network.yaml
gumio@ubuntu-server:~$

99-network.yamlの中身には以下を記述しています。インターフェイス名(ens18)はご自身の環境に合わせて修正してください。

network:
  version: 2
  renderer: networkd
  ethernets:
    ens18:
      dhcp6: false
      dhcp4: false
      addresses: [192.168.40.10/24]
      routes:
        - to: default
          via: 192.168.40.99
      nameservers:
        addresses: [8.8.8.8, 1.1.1.1]

Tips

今回は99-network.yamlのように、cloud-initが生成するファイルより大きい番号(99)をプレフィックスとして付けていますが、手順④でcloud-initを無効化しているため、実際には任意のファイル名(.yamlであれば何でも可)で問題ありません。

また、もし50-cloud-init.yamlが有効な状態で99-network.yamlを配置した場合、Netplanはファイル名の昇順に設定を読み込み、最後のファイルが優先されます。ただし今回のように、各ファイルで異なるDNSサーバが指定されている場合、単純に上書きではなく設定がマージされる点に注意が必要です。

その結果、DNSサーバとして:

  • 50-cloud-init.yaml → 192.168.40.1
  • 99-network.yaml → 8.8.8.8, 1.1.1.1

が記載されていると、最終的なネットワーク設定には192.168.40.1 / 8.8.8.8 / 1.1.1.1のすべてが反映されることになります。

⑥Netplanを適用

最後にNetplanを適用、ステータス確認をして完了です。

■ネットワーク設定ファイルの生成・適用
gumio@ubuntu-server:~$ sudo netplan generate

** (generate:1102): WARNING **: 07:05:56.270: Permissions for /etc/netplan/99-network.yaml are too open. Netplan configuration should NOT be accessible by others.
gumio@ubuntu-server:~$
gumio@ubuntu-server:~$ sudo netplan apply

** (generate:1149): WARNING **: 07:06:02.975: Permissions for /etc/netplan/99-network.yaml are too open. Netplan configuration should NOT be accessible by others.

** (process:1147): WARNING **: 07:06:03.142: Permissions for /etc/netplan/99-network.yaml are too open. Netplan configuration should NOT be accessible by others.

** (process:1147): WARNING **: 07:06:03.192: Permissions for /etc/netplan/99-network.yaml are too open. Netplan configuration should NOT be accessible by others.
gumio@ubuntu-server:~$
gumio@ubuntu-server:~$ ls -al /run/systemd/network/
total 4
drwxr-xr-x  2 root root             60 Nov 15 07:06 .
drwxr-xr-x 23 root root            600 Nov 15 07:06 ..
-rw-r-----  1 root systemd-network 157 Nov 15 07:06 10-netplan-ens18.network
gumio@ubuntu-server:~$

■生成されたネットワーク設定ファイルの中身を確認
gumio@ubuntu-server:~$ sudo cat /run/systemd/network/10-netplan-ens18.network
[Match]
Name=ens18

[Network]
LinkLocalAddressing=ipv6
Address=192.168.40.10/24
DNS=8.8.8.8
DNS=1.1.1.1

[Route]
Destination=0.0.0.0/0
Gateway=192.168.40.99
gumio@ubuntu-server:~$

■DNSの設定値を確認
gumio@ubuntu-server:~$ resolvectl
Global
         Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
  resolv.conf mode: stub

Link 2 (ens18)
    Current Scopes: DNS
         Protocols: +DefaultRoute -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
       DNS Servers: 8.8.8.8 1.1.1.1
gumio@ubuntu-server:~$

まとめ

UbuntuのDNSサーバの反映フロー

Ubuntu起動
  ⬇
netplanがsystemd-networkd用の設定ファイルを生成
(※このタイミングで50-cloud-init.yamlが使われてしまう)
  ⬇
systemd-networkdが生成された*.networkを読み込み、IPやDNSを適用
  ⬇
systemd-networkdがDNS設定をsystemd-resolvedに通知
  ⬇
systemd-resolvedが最終的なDNSサーバを決定

という流れの中で、cloud-initが毎回Netplanに干渉してDNS上書きしていた問題を解消することができました。参考になれば幸いです。

ABOUT ME
空花(そらはな)ぐみを
空花(そらはな)ぐみを
ネットワークエンジニア / 愛猫家
高卒工場勤務を経て31歳でIT業界へ転職し、現在はSIerでネットワークエンジニアの現場リーダーとして設計・構築を担当しています。未経験からキャリアを切り開いた経験を活かし、
・ネットワークエンジニア初級〜中級者がつまずきやすいポイントの解説
・ラボ環境を活用した検証手順
・業務で生かせる実践的なノウハウ
など、インフラエンジニアを目指す方や、現職でスキルを磨きたい方に役立つ情報を発信していきます。
記事URLをコピーしました