Monday, September 27, 2010

Извлекаем DNS подзону домена Active Directory

Имеется дерево доменов Active Directory с поддоменами. Необходимо извлечь вложенную зону subdomain1.subdomain2.example.com из домена example.com и создать отдельный DNS домен - subdomain1.subdomain2.example.com

Создаем файл extract-dns-zone.cmd:
set maindomain=example.com
set subdomain=subdomain1.subdomain2
set dcsrv=dc.example.com
del \\%dcsrv%\c$\WINDOWS\system32\dns\%maindomain%.txt
dnscmd %dcsrv% /zoneexport %maindomain% %maindomain%.txt
copy \\%dcsrv%\c$\WINDOWS\system32\dns\template.dns \\%dcsrv%\c$\WINDOWS\system32\dns\%subdomain%.%maindomain%.dns
findstr /i "%subdomain%" \\%dcsrv%\c$\WINDOWS\system32\dns\%maindomain%.txt >> \\%dcsrv%\c$\WINDOWS\system32\dns\%subdomain%.%maindomain%.dns
cscript replace.vbs \\%dcsrv%\c$\WINDOWS\system32\dns\%subdomain%.%maindomain%.dns ".%subdomain% " " "
cscript replace.vbs \\%dcsrv%\c$\WINDOWS\system32\dns\%subdomain%.%maindomain%.dns "%subdomain% " "@ "
dnscmd %dcsrv% /zoneadd %subdomain%.%maindomain% /primary /file %subdomain%.%maindomain%.dns /load
rem psexec.exe \\%dcsrv% dcdiag /test:registerindns /dnsdomain:%subdomain%.%maindomain%.dns



Поскольку в Windows нет штатной команды для замены текста в файле, создадим vbs скрипт replace.vbs:
Const ForReading = 1
Const ForWriting = 2

strFileName = Wscript.Arguments(0)
strOldText = Wscript.Arguments(1)
strNewText = Wscript.Arguments(2)

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(strFileName, ForReading)

strText = objFile.ReadAll
objFile.Close
strNewText = Replace(strText, strOldText, strNewText)

Set objFile = objFSO.OpenTextFile(strFileName, ForWriting)
objFile.WriteLine strNewText
objFile.Close



Файл extract-dns-zone.cmd импортирует всю зону example.com в файл, копирует шаблон пустой зоны subdomain2.subdomain2.example.com в новый файл и добавляет в него только строки, относящиеся к извлекаемому домену, затем на основе этого файла создает новую зону DNS. После создания зоны необходимо сдклать её интегрированной в AD и включить безопасный обновления. Старую подзону следует удалить и вместо неё создать делегированную зону.

Файл \\dc.example.com\c$\WINDOWS\system32\dns\template.dns:
;

@ IN SOA dc.example.com. hostmaster.example.com. (
2010060200 ; serial number
900 ; refresh
600 ; retry
86400 ; expire
3600 ) ; default TTL

;
; Zone NS records
;

@ NS dc.example.com.

No comments:

Post a Comment