Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Парсинг конфигов BIND (http://forum.oszone.net/showthread.php?t=350330)

Elven 21-12-2021 13:48 2975755

Парсинг конфигов BIND
 
Имеется 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 2975759

это вывод из dig ?

BIND 9 ставится на Windows 10

Elven 21-12-2021 15:49 2975766

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

Sham 21-12-2021 16:44 2975769

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

Elven 21-12-2021 18:22 2975772

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

DJ Mogarych 21-12-2021 20:04 2975774

Можно виндовый сервер просто сделать вторичным, и он сам всё перетянет (только его IP надо в BIND указать как доверенный), а потом поднять его до первичного.

Elven 22-12-2021 17:06 2975815

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 2975822

через WMI можно

Elven 09-02-2022 22:04 2979671

Для SOA написал свой лисапед. Т.к. штука не так часто нужная особо не изощрялся, но если кому понадобится, то для повторного использования сойдет.


Время: 13:37.

Время: 13:37.
© OSzone.net 2001-