BIND конвертация DNS зоны в PTR: различия между версиями
Iouser (обсуждение | вклад) |
Iouser (обсуждение | вклад) |
(не показана 1 промежуточная версия этого же участника) | |
(нет различий)
|
Текущая версия на 09:43, 12 июня 2013
BIND конвертация DNS зоны в PTR
ВНИМАНИЕ
Данная статья может нанести моральный ущерб. Она целиком в говнокоде.
Слабонервных прошу перейти сюда.
Начальные условия
OpenBSD настроена как secondary (slave) DNS сервер. В качестве DNS сервера используется BIND.
Приём зоны идёт с неподконтрольного DNS сервера поддерживающего работу Active Directory.
Сеть организации: 192.168.10.0/24
Постановка задачи
Необходимо из «полувалидного» файла зоны создать валидный файл PTR зоны, попутно защитившись от таких явлений как:
- одному IP соответствует несколько имён
- одному имени соответствует несколько IP
- имя содержит знак нижнего тире «_»
Коллизии (если они будут) желательно выявить и указать на них администратору.
Задачу надо решить максимально быстро, без программирования используя только системное ПО OpenBSD.
Решение
«Конвертер» выглядит следующим образом
domain.ru — файл зоны
10.168.192.in-addr.arpa — файл результата
$ cat domain.ru | grep 192.168.10 | grep -w "A" | sed "s/192.168.10*//g" | \
awk '{print $3, $2, $1".domain.ru."}' | sed "s/ A / PTR /g" | \
sed -e 's/^.\{1\}//' | grep "PTR" | tr '[A-Z]' '[a-z]' | \
sed "s/ ptr / PTR /g" | sort -k1,2 -u | sort -k2,3 -u | \
sort -k1 | uniq | grep -v _ > 10.168.192.in-addr.arpa
Чтобы произвести сверку убираем из «конвертера» сортировку с режимом уникальности.
В остальном поможет diff.
$ cat domain.ru | grep 192.168.10 | grep -w "A" | sed "s/192.168.10*//g" | \
awk '{print $3, $2, $1".domain.ru."}' | sed "s/ A / PTR /g" | \
sed -e 's/^.\{1\}//' | grep "PTR" | tr '[A-Z]' '[a-z]' | \
sed "s/ ptr / PTR /g" | \
sort -k1 > tmpfile.txt
$ diff -C1 tmpfile.txt 10.168.192.in-addr.arpa > dns_diff.txt
$ rm ./tmpfile.txt