如何增加bind9 dns区域中的序列号

如何增加bind9 dns区域中的序列号

我有一个 dns 区域,其序列号:2015040500

今天我要在那里添加一些 CNAME 记录,所以我对如何增加序列号感兴趣,我的意思是我应该根据今天的日期更改它,例如它将是:2015042200 或者只是将其增加 1,所以它将是2015040501?

答案1

你可以随心所欲地做你想做的事必须确保新序列号大于旧序列号。

话虽如此,我建议采用基于时间戳的方法,遵循以下方案:

 YYYYMMDDxx

其中xx从 开始00,并针对该特定日期的所有编辑递增(在另一天编辑时,您重置xx00

该方案的主要优点是,您还可以一眼就知道区域文件的最后修改日期。

它还使序列号递增更加稳健。

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}"

相关内容