目的
UbuntuではデフォルトのDNSリゾルバとして、systemd-resolved(127.0.0.53:53)が稼働している。
新規に同サーバに構築するCoreDNSは、ポート53が競合する。その解消のために、systemd-resolvedが管理する/etc/resolv.confを作り変えてsystemd-resolvedの管轄外にする。
また、自サーバで稼働するメールサーバのrainloopは、デフォルトでホストOSのDNSリゾルバを参照する。しかし作り直した/etc/resolv.confでは、メールサーバ(mail.murci.net)の名前解決に失敗する。そのため独自設定でpublicDNSを参照させる。
環境
対象ホスト:192.168.9.7
Ubuntu 22.04
構成の変化
全体
これまでのDNS問い合わせ
- インターネット向け → systemd-resolved(127.0.0.53:53)
変更後のDNS問い合わせ
- インターネット向け → 192.168.9.7#53(publicDNSへフォワード)
rainloop
これまでのDNS問い合わせ
- インターネット向け → systemd-resolved(127.0.0.53:53)
変更後のDNS問い合わせ
- インターネット向け → Google(8.8.8.8)(docker-compose.ymlで独自DNS指定)
CoreDNS
新規構築後のDNS問い合わせ
- murci.internal向け → 192.168.9.7#53
手順
rainloop側設定
rainloopはデフォルトでホストOSのリゾルバ(127.0.0.53:53)を参照するため、systemd-resolvedが管理するリゾルバファイル(/etc/resolv.conf)を書き換える場合は、別途DNSの指定が必要になる。
docker-compose.yamlのDNSに8.8.8.8を指定する。
version: "2"
services:
web:
image: hardware/rainloop
volumes:
- /srv/rainloop/data:/rainloop/data
ports:
- 8888:8888
dns:
- 8.8.8.8
dockerコンテナを再起動する。
$ pwd
/home/admin/rainloop
$ docker-compose down
$ docker-compose up -d
systemd-resolved.serviceが管理する/etc/resolv.confを作り変える
/etc/resolve.confを削除する。
$ ls -ltr /etc/resolv.conf
lrwxrwxrwx 1 root root 39 Feb 2 2021 /etc/_old/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
$ rm /etc/resolv.conf
新規に/etc/resolv.confを作成する。/etc/resolv.confは作成後即時に反映されるため、systemd-resolvedの再起動は不要。
$ cat /etc/resolv.conf
nameserver 192.168.9.7
search murci.internal
search 9.168.192.in-addr.arpa.
備考
本手順実施後に、以下手順で、DNSおよびメールサーバを構築する。
dockerでDNSサーバおよびメールサーバ構築手順