Bind9 DNSゾーンでシーケンス番号を増やす方法

Bind9 DNSゾーンでシーケンス番号を増やす方法

シリアル番号が2015040500のDNSゾーンがあります。

今日はそこにいくつかのCNAMEレコードを追加する予定なので、シリアル番号を増やす方法に興味があります。つまり、今日の日付を基準に変更しなければならないという意味です。たとえば、2015042200、または1ずつ増やす必要があります。 2015040501でしょ?

答え1

あなたが望むものは何でもすることができます〜しなければならない新しいシリアル番号が古いシリアル番号より大きいことを確認してください。

しかし、私は次のスキームに従ってタイムスタンプベースのアプローチをお勧めします。

 YYYYMMDDxx

ここでは、特定の日付のすべての編集内容xxから始めて増やします(他の日付で編集した場合にリセットされます)。00xx00

このスキームの最大の利点は、ゾーンファイルが最後に変更された日付を一目で確認できることです。

また、シーケンス番号の増加をより強力にします。

1もう一つの方法は、ファイルの編集中に開始して増やすことです。

シーケンス番号がすでにタイムスタンプベースである場合(そして2015040500非常に似ているように見える場合)、その決定に固執し(あなたが決めていない場合でも)、以下を使用する必要があります。論理的後継2015042200

答え2

シリアルにUnixタイムを使用することにしました

- name: "{{ role_path|basename }} | get unix time"
  shell: echo $(date +%s)
  register: unix_time_stamp
  delegate_to: localhost
  run_once: true
  become: no

#
- name: "{{ role_path|basename }} setting execution facts"
  set_fact:
    __bind9_zone_serial: "{{ unix_time_stamp.stdout }}"
  run_once: true
  become: no

答え3

その他の回答を参照アンシプール。このアプローチは完全に有効です。ゾーン構成はテンプレートから生成され、単純な式を使用してシーケンスが更新されます。振り子2金型。私が使用する方法は、現在のゾーンファイルに現在の値があることです。抽出して増やしてみてください。

- name: get current bind9 serial
  block:
    - ansible.builtin.slurp:
        path: "/etc/bind/zones/db.{{ vw_tld }}"
      register: bind9_current

    - ansible.builtin.set_fact:
        bind9_serial_concat: "{{ (bind9_current.content | b64decode | regex_search('[0-9]+[ ]+; Serial'))[0:10] }}"
  rescue:
    - ansible.builtin.set_fact:
        bind9_serial_concat: "1970010100"

- ansible.builtin.set_fact:
    bind9_serial_date: "{{ bind9_serial_concat[0:8] }}"
    bind9_serial_counter: "{{ bind9_serial_concat[8:10] }}"

- ansible.builtin.set_fact:
    bind9_serial_new: "{{ now(fmt= '%Y%m%d') }}{{ '%02d' | format(bind9_serial_counter | int + 1) }}"
  when: bind9_serial_date == now(fmt= "%Y%m%d")

- ansible.builtin.set_fact:
    bind9_serial_new: "{{ now(fmt= '%Y%m%d') }}00"
  when: bind9_serial_date != now(fmt= "%Y%m%d")

- name: bind9 database
  ansible.builtin.template:
    src: bind9.db.j2
    dest: "/etc/bind/zones/db.{{ vw_tld }}"

- name: bind9 reverse database
  ansible.builtin.template:
    src: bind9.db.reverse.j2
    dest: /etc/bind/zones/db.192.168

答え4

@tombartの回答が機能し、ソース管理ではなくすべての領域が更新される小規模の研究室環境では、よりシンプルで簡単です。

#!/usr/bin/env bash

set -euo pipefail

: ${1?"Usage: $0 <zone file>"}

IFILE=$1

if [ ! -w "${IFILE}" ]; then
    echo "Error cannot write to ${IFILE}"
    exit
fi

if [ ! -w $(pwd) ]; then
    echo "Error, sed needs write permission for temp file, add w to current directory"
    exit
fi

PREV_SERIAL=$(grep -i Serial "${IFILE}" | awk '{print $1}')
TODAY=$(date +%Y%m%d00)

if [ "$PREV_SERIAL" -ge "${TODAY}" ]; then
    NEW_SERIAL=$((PREV_SERIAL+1))
else
    NEW_SERIAL=${TODAY}

fi
sed -i "s/${PREV_SERIAL}/${NEW_SERIAL}/" "${IFILE}"

printf "Zone: %s [%d -> %d]\n" "${IFILE}" "${PREV_SERIAL}" "${NEW_SERIAL}"

関連情報