Войти

Показать полную графическую версию : [решено] Парсинг конфигов BIND


Elven
21-12-2021, 13:48
Имеется DNS на BIND, возникла нужность перетянуть то что в нем осталось в виндовый DNS, и, разумеется, делать этого руками сильно не хочется.
$TTL 300
@ IN SOA ns.dmn.loc. hostmaster.dmn.loc. (
2021060201 ; serial
21600 ; refresh
1800 ; retry
1209600 ; expiry
7200 ) ; minimum

IN NS ns.dmn.loc.
IN MX 5 mail.dmn.loc.

@ IN A 192.168.4.55
* IN A 192.168.4.55

web IN A 192.168.4.56

mysql IN A 192.168.4.57

cache IN A 192.168.4.58
rabbit IN CNAME cache
redis IN CNAME cache

зона = имя файла (в данном конкретном случае dmn12.loc)
Хотелось бы это как-то распарсить для скармливания в Add-DnsServerResourceRecord, ну или может какие-то другие варианты есть.
з.ы. TTL можно игнорировать, оставил только для того чтобы было видно как оно на самом деле есть в файле.

alpap
21-12-2021, 15:24
это вывод из dig ?

BIND 9 ставится (http://pyatilistnik.org/installing-dig-on-windows/) на Windows 10

Elven
21-12-2021, 15:49
alpap, это то что в одном из конфигов, в файле зоны. Вывод dig тоже могу показать, но это мало что даст, кмк. Подобных файлов порядочное количество для ручного перекапывания. Ну и есть несколько файлов побольше но выглядят +- так же.
Насчет установки BIND на десятку вообще не понял. Зачем? От BIND есть желание избавиться, для этого те записи которые на нем остались нужно перетащить в виндовый DNS.

Sham
21-12-2021, 16:44
Всё перепарсить в json. Видел разные скриптовые парсеры под node.js, python, есть какой-то zone2json. В ps уже можно энумерировать json-объект в зависимости от формата.

Elven
21-12-2021, 18:22
zone2json - вариант, получается весьма себе стройный json, с этим уже можно работать. Спасибо. Пока буду пробовать в эту сторону.
На всякий случай для интересующихся zone2json есть в пакете pdns-server (pdns для rhel).

DJ Mogarych
21-12-2021, 20:04
Можно виндовый сервер просто сделать вторичным, и он сам всё перетянет (только его IP надо в BIND указать как доверенный), а потом поднять его до первичного.

Elven
22-12-2021, 17:06
DJ Mogarych, можно было бы, но есть несколько "но", которые не очень позволяют так сделать. Да и скрипт в целом в общем уже готов...
Остались вопросы по поводу SOA и NS записей, вижу где они редактируются в GUI, но не нашел либо правильных командлетов, либо нужных для этого ключей. Однако если даже это останется нерешенным - подправлю руками, тем более что там все равно были бы замены относительно того что прописано в файлах зон BIND.
Как я говорил ранее посредством zone2json были получены вполне вменяемые json, исходя из них получилось что-то вот такое:
$jsonzones = Get-ChildItem ./zones/*.json
foreach ($jsonzone in $jsonzones) {
$Zone = $jsonzone.BaseName
Add-DnsServerPrimaryZone -Name $Zone -ReplicationScope Domain -DynamicUpdate NonsecureAndSecure
(Get-Content $jsonzone | ConvertFrom-Json).Records | Where-Object type -in A, MX, CNAME | ForEach-Object {
if ($_.name -in '.', '*.') {
$Name = $Zone
} else {
$Name = $_.name.TrimEnd('.')
}
$Type = $_.type
$IP = $_.content
$prio = $_.prio

Switch ($type) {
A {
Add-DnsServerResourceRecordA -AllowUpdateAny -CreatePtr -Name $Name -ZoneName $Zone -IPv4Address $IP
}
CNAME {
Add-DnsServerResourceRecordCName -AllowUpdateAny -Name $Name -ZoneName $Zone -HostNameAlias $IP
}
MX {
Add-DnsServerResourceRecordMX -AllowUpdateAny -Name $Name -ZoneName $Zone -MailExchange $IP -Preference $prio
}
Default {"WTF? $type is not correct type of DNS records for this script!"}
}
}
}

Пока это всё. Всем спасибо за вниманию :)

Sham
22-12-2021, 18:29
через WMI (https://docs.microsoft.com/en-us/windows/win32/dns/microsoftdns-soatype) можно

Elven
09-02-2022, 22:04
Для SOA написал свой лисапед (https://github.com/Obskuro/Set-DNSServerZoneSOARecordData). Т.к. штука не так часто нужная особо не изощрялся, но если кому понадобится, то для повторного использования сойдет.




© OSzone.net 2001-2012