BIND конвертация DNS зоны в PTR: различия между версиями

Материал из OpenBSD-Wiki
Перейти к навигации Перейти к поиску
(Отмена правки 215, сделанной участником Iouser (обс.))
Строка 1: Строка 1:
 
== BIND конвертация DNS зоны в PTR ==
 
== BIND конвертация DNS зоны в PTR ==
1
 
  
 
== ВНИМАНИЕ ==
 
== ВНИМАНИЕ ==

Версия 09:40, 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