📛

systemd-resolvedにDNSサーバーを追加する

2025/03/01に公開

systemd-resolvedで管理された名前解決において、DNSサーバーを追加しなければならなかったので、その方法を記しておきます。

  • Debian 12

方法

動作

ネットワークの名前解決をsystemd-resovedで行っていて、好みのネームサーバーを追加したいとします。その場合、以下のいずれかのディレクトリに*.confを作れば、systemd-resolvedがそこから設定を読んでくれます(resolved.conf(5))。

  • /usr/lib/systemd/resolved.conf.d/
  • /usr/local/lib/systemd/resolved.conf.d/
  • /etc/systemd/resolved.conf.d/

/usr/*はパッケージのためのものですので、個別のマシン用には/etc/systemd/resolved.conf.d/に設定ファイルを置きます。

書式

単にDNSサーバーを追加する場合、[Resolve]行に続けて、DNS=オプションでDNSサーバーを指定します。複数ある場合には空白で区切って列挙します。例えば、以下の例では3つのDNSサーバーを指定しています。

[Resolve]
DNS=xxx.xxx.xxx.xxx yyy.yyy.yyy.yyy zzz.zzz.zzz.zzz

手順

次の3ステップを踏みます。

  1. /etc/systemd/resolve.conf.d/ ディレクトリを作る。
  2. 上記ディレクトリに *.conf ファイルを作る。
  3. 上記ファイルに設定を書き込む。
sudo mkdir /etc/systemd/resolve.conf.d/
sudo nano /etc/systemd/resolve.conf.d/my-resolv.conf

あとは、テキストファイルに先の内容を書き込んで保存します。

保存したら、デーモンを再起動します。

sudo systemctl restart systemd-resolved

これで希望するDNSサーバーを名前解決に利用できます。

事の始末

なぜこのようなことが必要になったか書いておきます。

私は最近Proxmox VE上にVMを作り始めています。しかし、それらのVMで名前解決が出来なくなる問題が発生しました。これらのVMは名前解決に次のような機能を使っています。

  • DHCPによるDNSの自動設定
  • avahi-daemonによるmDNS
  • Tailscaleのmagic DNS

そりゃ混乱するわ、って気もしますね。調べてみるとDHCPとTailscaleが/etc/resolv.confの奪い合いをするのが原因のようです。解決策としては公式ページにsystemd-resolvedを使えと書いてあります。

ところが、systmed-resolvedをインストールしても名前解決できなかったのでしばらく苦しみました。

今時のLinux distributionの例にたがわず、Debianもほとんどの設定を自動でやってくれます。DHCPが自動でIPアドレスを取得して自動でDNSサーバーを取得して自動で/etc/resolv.confを設定してくれます。ところが、startd-resolvedをインストールする際は、すでにある/etc/resolv.confを参照せずに廃棄して、まっさらのDNS設定にしてしまっていました。

そんなわけで、systemd-resolvedの設定方法を調べた次第です。

Discussion