DNS docker docker-compose

CoreDNSとsystemd-resolvedのポート競合解消手順

2023年7月25日


目的

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サーバおよびメールサーバ構築手順

CATEGORIES & TAGS

DNS, docker, docker-compose,

Author:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

カテゴリー

むるし

フリーランスのインフラ系エンジニア。
備忘録で色々書いていきます。
お問い合わせは↓
mo-gyu@murci.net
LPIC303 Security
%d人のブロガーが「いいね」をつけました。