Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Парсинг конфигов BIND

Ответить
Настройки темы
PowerShell - [решено] Парсинг конфигов BIND

Аватара для Elven

Ветеран


Сообщения: 992
Благодарности: 268

Профиль | Сайт | Отправить PM | Цитировать


Имеется 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 можно игнорировать, оставил только для того чтобы было видно как оно на самом деле есть в файле.

Отправлено: 13:48, 21-12-2021

 

Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


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

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

Отправлено: 15:24, 21-12-2021 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Elven

Ветеран


Сообщения: 992
Благодарности: 268

Профиль | Сайт | Отправить PM | Цитировать


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

Отправлено: 15:49, 21-12-2021 | #3


Deadooshka


Сообщения: 2566
Благодарности: 698

Профиль | Отправить PM | Цитировать


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

Отправлено: 16:44, 21-12-2021 | #4


Аватара для Elven

Ветеран


Сообщения: 992
Благодарности: 268

Профиль | Сайт | Отправить PM | Цитировать


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

Отправлено: 18:22, 21-12-2021 | #5


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6705
Благодарности: 1576

Профиль | Отправить PM | Цитировать


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

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 20:04, 21-12-2021 | #6


Аватара для Elven

Ветеран


Сообщения: 992
Благодарности: 268

Профиль | Сайт | Отправить PM | Цитировать


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!"}
        }
    }
}
Пока это всё. Всем спасибо за вниманию

Отправлено: 17:06, 22-12-2021 | #7


Deadooshka


Сообщения: 2566
Благодарности: 698

Профиль | Отправить PM | Цитировать


через WMI можно

Отправлено: 18:29, 22-12-2021 | #8


Аватара для Elven

Ветеран


Сообщения: 992
Благодарности: 268

Профиль | Сайт | Отправить PM | Цитировать


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

Отправлено: 22:04, 09-02-2022 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Парсинг конфигов BIND

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Redhat/Fedora - Missing Dependency bind dihlof0s Общий по Linux 3 01-09-2009 14:55
FreeBSD - Перекрытие конфигов POSTFIX kryo Общий по FreeBSD 2 12-11-2008 11:39
Настройка BIND 9.3.1 xayam Программное обеспечение Linux и FreeBSD 8 06-07-2005 11:59
Помогите BIND 9 Alexandr2005 Сетевые технологии 3 29-04-2005 11:24
bind не стартует Vich Программное обеспечение Linux и FreeBSD 9 01-12-2003 14:00




 
Переход