systemd-resolvedにDNSサーバーを追加する
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ステップを踏みます。
-
/etc/systemd/resolve.conf.d/
ディレクトリを作る。 - 上記ディレクトリに
*.conf
ファイルを作る。 - 上記ファイルに設定を書き込む。
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