DNSコンテンツサーバのゾーンファイルの同期

fedora

DNSコンテンツサーバのゾーンファイルの同期設定を行いました.なお,DNSはnsdを利用しています.

DNSコンテンツサーバの運用

DNSコンテンツサーバの運用は以下のとおり行います.

  • DNSサーバは一号機と二号機の二台構成とします.
  • どちらもプライマリサーバ構成とします.
  • ゾーンファイルを修正する場合は,一号機側のファイルを書き換えるものとします.二号機側への変更は破棄されます.
  • 二号機側のゾーンファイルは一号機のものをコピーして利用します.
  • 二号機でゾーンファイルのコピーを行っている間nsdサービスを停止します.
  • ゾーンファイルのバックアップおよびコピーはそれぞれ一日一回行います.

同期方式

候補は,nsdの機能,rsync,scpなどを考えましたが,DNSサーバ二台が共通で利用しているNFSサーバありますので,バックアップもかねてそこを介してファイルの同期を行います.

一号機側の設定

nsdのzoneファイルのバックアップシェルです.当サイトでは/usr/local/libexec/backup-nsd-zones.shというファイル名で作成しました.

#!/usr/bin/env bash

LANG=C ; export LANG
DATE=`date +%Y%m%d%H%M`

#HOSTNAME=`/usr/bin/hostname -s`
#
#if [ "xxxxx" != ${HOSTNAME} ]; then
#        echo exec this script on xxxxx.
#        exit
#fi

BK_DIR=/backup/nsd/zones

cd ${BK_DIR}
mkdir -p .bk
rm -rf .bk/${DATE}.tar
tar cf .bk/${DATE}.tar *.zone
bzip2 .bk/*.tar
rm -rf *.zone
cp -p /etc/nsd/zones/*.zone ${BK_DIR}

systemdのserviceファイルです.

[Unit]
Description=backup nsd zones every day

[Service]
Type=oneshot
ExecStart=/usr/bin/sh -c '/usr/local/libexec/backup-nsd-zones.sh'

systemdのtimerファイルです.

[Unit]
Description=backup nsd zones every day

[Timer]
OnCalendar=*-*-* 23:30:00
Unit=backup-nsd-zones.service

[Install]
WantedBy=timers.target

timerを有効にします.

# systemctl daemon-reload
# systemctl enable  backup-nsd-zones.timer
Created symlink /etc/systemd/system/timers.target.wants/backup-nsd-zones.timer → /etc/systemd/system/backup-nsd-zones.timer.
# systemctl start  backup-nsd-zones.timer
# systemctl list-timers
NEXT                        LEFT          LAST                        PASSED     UNIT                         ACTIVATES
(途中略)
Sun 2022-04-03 23:30:00 JST 9h left       n/a                         n/a        backup-nsd-zones.timer       backup-nsd-zones.service
(途中略)

8 timers listed.
Pass --all to see loaded but inactive timers, too.
#

二号機側の設定

一号機のzoneファイルのバックアップをコピーするシェルです.当サイトでは/usr/local/libexec/setup-nsd-zones.shというファイル名で作成しました.

#!/usr/bin/env bash

LANG=C ; export LANG
DATE=`date +%Y%m%d%H%M`

#HOSTNAME=`/usr/bin/hostname -s`
#
#if [ "yyyyy" != ${HOSTNAME} ]; then
#        echo exec this script on yyyyy.
#        exit
#fi

BK_DIR=/backup/nsd/zones
ZONES_DIR=/etc/nsd/zones

systemctl stop nsd

cd ${ZONES_DIR}
rm -rf *.zone
cp -p ${BK_DIR}/*.zone ${ZONES_DIR}

systemctl start nsd

systemdのserviceファイルです.

[Unit]
Description=setup nsd zones every day

[Service]
Type=oneshot
ExecStart=/usr/bin/sh -c '/usr/local/libexec/setup-nsd-zones.sh'

systemdのtimerファイルです.

[Unit]
Description=setup nsd zones every day

[Timer]
OnCalendar=*-*-* 00:30:00
Unit=setup-nsd-zones.service

[Install]
WantedBy=timers.target

timerを有効にします.

# systemctl daemon-reload
# systemctl enable setup-nsd-zones.timer
Created symlink /etc/systemd/system/timers.target.wants/setup-nsd-zones.timer → /etc/systemd/system/setup-nsd-zones.timer.
# systemctl start setup-nsd-zones.timer
# systemctl list-timers
NEXT                        LEFT         LAST                        PASSED       UNIT                         ACTIVATES
(途中略)
Mon 2022-04-04 00:30:00 JST 9h left      n/a                         n/a          setup-nsd-zones.timer        setup-nsd-zones.service
(途中略)

10 timers listed.
Pass --all to see loaded but inactive timers, too.
#

コメント

タイトルとURLをコピーしました