Как увеличить серийный номер в зоне bind9 dns

У меня есть зона DNS, у которой есть серийный номер: 2015040500

Сегодня я собираюсь добавить там записи CNAME, поэтому меня интересует, как увеличить серийный номер, я хочу изменить его на основе сегодняшней даты, например, это будет: 2015042200 или просто увеличить его на один, так что это будет 2015040501?

  • Использовать имена хостов клиента для DNS
  • dig возвращает другой IP-адрес при удалении «www.» из имени домена
  • Настройте BIND и DNSMasq для совместной работы на одной машине
  • Сеть не имеет пинга и не может разрешать хосты
  • Файл большой зоны для bind9: блокировка рекламы
  • host возвращает 0 для несуществующего имени
  • Как настроить все CNAME на Ubuntu Linux с помощью BIND 9
  • Iptables для перенаправления DNS-поиска IP и порта
  • 2 Solutions collect form web for “Как увеличить серийный номер в зоне bind9 dns”

    Вы можете сделать все, что угодно, единственное, что вы должны убедиться, это то, что новый серийный номер больше старого.

    Сказав это, я рекомендовал бы подход, основанный на временной шкале, по схеме, подобной:

    YYYYMMDDxx 

    где xx начинается с 00 и увеличивается для всех изменений в этот конкретный день (при редактировании в другой день вы сбросите xx на 00 )

    Основным преимуществом этой схемы является то, что вы также знаете дату последней модификации вашего зонного файла с первого взгляда.

    Он также увеличивает серийный номер.

    Альтернативой является запуск с 1 и просто увеличение при каждом редактировании файла.

    Если серийный номер уже основан на 2015040500 времени (и 2015040500 очень похож на него), вы, вероятно, придерживаетесь этого решения (даже если оно не сделано вами) и используйте логический преемник 2015042200

    Сценарий bash, который ищет:

      12345 ; Serial 

    в каталоге /etc/bind/zones . Он должен соответствовать любому числу раньше ; Serial ; Serial (с учетом регистра). И замените его на формат YYYYMMDDxx .

     #!/bin/bash ZONES_PATH="/etc/bind/zones" DATE=$(date +%Y%m%d) # we're looking line containing this comment NEEDLE="Serial" for ZONE in $(ls -1 $ZONES_PATH) ; do curr=$(/bin/grep -e "${NEEDLE}$" $ZONES_PATH/${ZONE} | /bin/sed -n "s/^\s*\([0-9]*\)\s*;\s*${NEEDLE}\s*/\1/p") # replace if current date is shorter (possibly using different format) if [ ${#curr} -lt ${#DATE} ]; then serial="${DATE}00" else prefix=${curr::-2} if [ "$DATE" -eq "$prefix" ]; then # same day num=${curr: -2} # last two digits from serial number num=$((10#$num + 1)) # force decimal representation, increment serial="${DATE}$(printf '%02d' $num )" # format for 2 digits else serial="${DATE}00" # just update date fi fi /bin/sed -i -e "s/^\(\s*\)[0-9]\{0,\}\(\s*;\s*${NEEDLE}\)$/\1${serial}\2/" ${ZONES_PATH}/${ZONE} echo "${ZONE}: " grep "; ${NEEDLE}$" $ZONES_PATH/${ZONE} done и #!/bin/bash ZONES_PATH="/etc/bind/zones" DATE=$(date +%Y%m%d) # we're looking line containing this comment NEEDLE="Serial" for ZONE in $(ls -1 $ZONES_PATH) ; do curr=$(/bin/grep -e "${NEEDLE}$" $ZONES_PATH/${ZONE} | /bin/sed -n "s/^\s*\([0-9]*\)\s*;\s*${NEEDLE}\s*/\1/p") # replace if current date is shorter (possibly using different format) if [ ${#curr} -lt ${#DATE} ]; then serial="${DATE}00" else prefix=${curr::-2} if [ "$DATE" -eq "$prefix" ]; then # same day num=${curr: -2} # last two digits from serial number num=$((10#$num + 1)) # force decimal representation, increment serial="${DATE}$(printf '%02d' $num )" # format for 2 digits else serial="${DATE}00" # just update date fi fi /bin/sed -i -e "s/^\(\s*\)[0-9]\{0,\}\(\s*;\s*${NEEDLE}\)$/\1${serial}\2/" ${ZONES_PATH}/${ZONE} echo "${ZONE}: " grep "; ${NEEDLE}$" $ZONES_PATH/${ZONE} done 

    Примечание: вы не должны делать более 99 модификаций в течение одного дня 🙂

    Linux и Unix - лучшая ОС в мире.