Windows Server 2008

Nowości w Windows Server 2008 R2 - AD DS: bezpołączeniowe dołączanie do domeny (Offline domain join) Udostępnij na: Facebook

Autor: Nataniel Zieliński

Opublikowano: 7 kwietnia 2009

Zawartość strony
Idea działania  Idea działania
Tylko po co...?  Tylko po co...?
Krok po kroku  Krok po kroku
Ograniczenia  Ograniczenia
Przydatne linki  Przydatne linki

 

**Uwaga!**Artykuł pisany jest na ok. rok przed premierą produktu, dla wersji Windows Server 2008 R2 beta 1 – w wersji finalnej pewne elementy mogą ulec zmianie.

Idea działania

Idea prezentowanego mechanizmu jest prosta: możliwość dodania do domeny stacji, która nie ma połączenia z AD. Aby stacja została dodana do domeny, operacja musi zostać wykonana w dwóch krokach – na kontrolerze domeny musi zostać powołane konto, a stacja kliencka musi zapisać informację o tym, że ma uwierzytelniać się w domenie.

Jest to oczywiście bardzo skrócony opis, istotą jest jednak wykonanie czynności po obu stronach – inaczej całość nie ma szansy zadziałać. Nie przez przypadek zostało użyte sformułowanie ‘powołać konto’ (provision), ponieważ wiąże się to z zapisaniem pewnych informacji o systemie, który to konto reprezentuje – w przeciwieństwie do ‘założenia konta’, które jest po prostu założeniem obiektu bez żadnej relacji z rzeczywistą stacją.

Do wymiany informacji musi zostać wykorzystane jakieś medium zastępujące połączenie sieciowe, i w tym przypadku jest to mały plik tekstowy.

 Do początku strony Do początku strony

Tylko po co...?

Co osiągniemy, jeśli włączymy stację dodaną do domeny bezpołączeniowo?

  • nie zostaną pobrane polisy GPO
  • nie będzie można zalogować się na żadne konto domenowe
  • nie da się skorzystać z żadnych zasobów domenowych

A więc jaki jest scenariusz, w którym taka funkcjonalność może być przydatna? Podstawowym zastosowaniem jest wykorzystanie tego mechanizmu podczas powoływania maszyn wirtualnych w centrach danych. Wirtualizacja staje się coraz bardziej powszechna i możliwość szybkiego utworzenia maszyny, która będzie od razu dodana do domeny z odpowiednią nazwą, może okazać się pomocne.

 Do początku strony Do początku strony

Krok po kroku

Nie będzie to zbyt długi spacer - ma tylko dwa kroki, w obu wykorzystane będzie narzędzie 'djoin', które jest standardowo w każdym Windows 7.

W pierwszym należy 'powołać konto':

PS C:\>djoin /provision /domain "w2k8r2.domain" /machine "client01" /savefile "client01.djoin"

Nazwa pliku wynikowego może być dowolna i jest to prosty plik tekstowy, w którym zapisane są zakodowane informacje o haśle konta i nazwie komputera. Ciekawostką i największą zaletą tego rozwiązania jest fakt, że nazwa stacji klienckiej zostanie podczas operacji zmieniona na taką, jaką zdefiniujemy podczas powoływania. Zapewnia to wygodę podczas pracy z szablonami systemów wirtualnych. Podczas tej operacji kontroler domeny musi być dostępny.

Drugi krok można wykonać na dwa sposoby - zależnie od scenariusza. Zacznę od mniej ciekawego - kiedy stacja robocza działa, ale nie ma połączenia z domeną. W takim wypadku należy po prostu wykonać komendę:

PS C:\>djoin /requestODJ /loadfile client01.djoin /windowspath (Get-Item -path Env:\windir).value /localos

System wystarczy teraz zrestartować i niezależnie od nazwy jaką miał poprzednio - po restarcie mamy gotową do pracy, dodaną do domeny maszynę o zadanej nazwie.

Jednak podstawowy scenariusz, gdzie na prawdę widać po co djoin został stworzony, to powoływanie maszyn wirtualnych z szablonu. Systemy zenkapsulowane są w plikach vhd, a Windows 7 posiada nową, bardzo ciekawą funkcjonalność - natywne wsparcie dla dysków vhd. Oznacza to, że możemy za pomocą djoin przygotować maszyny w trybie offline. W tym celu trzeba najpierw podłączyć dysk vhd:

PS C:\> diskpart

        Microsoft DiskPart version 6.1.7000

        Copyright (C) 1999-2008 Microsoft Corporation.

        On computer: W2K8R2BETA



        DISKPART> select vdisk file="h:\w7.vhd"

        DiskPart successfully opened the virtual disk file.

        DISKPART> attach vdisk

        DiskPart successfully attached the virtual disk file.

        DISKPART> list volume

        Volume ###  Ltr  Label        Fs     Type        Size     Status     Info

        ----------  ---  -----------  -----  ----------  -------  ---------  --------

        Volume 0     E                       DVD-ROM         0 B  No Media

        Volume 1     D   Windows 7    NTFS   Partition    149 GB  Healthy    System

        Volume 2     C   W2k8R2.b7oo  NTFS   Partition     24 GB  Healthy    Boot

        Volume 3     F                NTFS   Partition    127 GB  Healthy

        DISKPART> exit

        Leaving DiskPart...

        PS C:\> dir f:

        Directory: f:\

        Mode                LastWriteTime     Length Name

        ----                -------------     ------ ----

        d----        2009-02-20     11:03            PerfLogs

        d-r--        2009-02-20     15:24            Program Files

        d-r--        2009-03-12     16:13            Users

        d----        2009-03-12     16:27            Windows

        -a---        2008-04-29     21:43         24 autoexec.bat

        -a---        2008-04-29     21:43         10 config.sys

Dysk F: to wirtualny system Windows 7 w pliku vhd.

Teraz można wykonać komendę:

PS C:\>djoin /requestODJ /windowspath f:\windows /loadfile client01.djoin

      Loading provision data from file: .\client01.djoin



      Offline domain join request completed successfully.

Warunkiem powodzenia jest, aby komputer, na którym podłącza się dysk, był w domenie oraz aby użytkownik, który dodaje stację, miał do tego uprawnienia.

Po wykonaniu dołączenia, należy nie zapomnieć odłączyć dysk wirtualny za pomocą diskpart:

DISKPART> select vdisk file="h:\w7.vhd"

      DiskPart successfully opened the virtual disk file.

      DISKPART> dettach vdisk

      DiskPart successfully dettached the virtual disk file.

      DISKPART> exit

      Leaving DiskPart...

Polecenie diskpart można oskryptować, tworząc plik wsadowy i wykonując je z przełącznikiem „-s” [ref 1], dzięki czemu całe rozwiązanie można już dziś w pełni zautomatyzować.

Jeśli zajrzymy do pliku „client01.djoin”, zobaczymy tam jedynie „krzaczki”. Okazuje się, że ma on nieskomplikowaną budowę i po wyrzuceniu pierwszych dwóch bajtów, reszta to zakodowane w base64 informacje.

Na blogu Matthieu Suiche można przeczytać szczegółowe informacje, oraz pobrać narzędzie – dinfo, które wyświetla informacje zawarte w pliku wygenerowanym przez djoin:

PS E:\> .\dinfo /loadfile .\client01.djoin

      dinfo - v1.0.20090128 - Domain Information

      dinfo utility displays the contents of the provisioning file created by Microsoft djoin.exe tool.



      Copyright (c) 2007 - 2009, Matthieu Suiche <http://www.msuiche.net>

      Copyright (c) 2008 - 2009, MoonSols <http://www.moonsols.com>



      main: Loading provision data from file: .\client01.djoin

      main: Blob base64 decoded, unpickling...

      main: Blob decoded successfully, dumping...



      Blob version: 1

      Blob size: 864



      Global Information:

      lpDomain: w2k8r2.domain

      lpMachineName: client01

      lpMachinePassword: \.AqzuoU.rWTnv@;Z_8iQ jc=P`px&*bYCxVa'0ARgwAkVD`kA!`vY#i"mLZ6PgXlP8Z fYOw*%rM8xZ"eFCx7-m X`UT=@]86@Z!-2VM(Sep0z#YN<uc2ZS



   DomainDnsPolicy:=""

       Name:="" w2k8r2=""

       DnsDomainName:="" w2k8r2.domain=""

       DnsForestName:="" w2k8r2.domain=""

       DomainGuid:="" 8bfecf3f-0327-4600-b644-32afd280e175=""

       Sid:="" S-1-5-21-2489063379-3576466881-4189521548=""



   DcInfo:=""

       DomainControllerName:="" \\AD.w2k8r2.domain=""

       DomainControllerAddress:="" \\2002:ac00:1::ac00:1=""

       DomainControllerAddressType:="" 0x1=""!

       DomainGuid:="" 8bfecf3f-0327-4600-b644-32afd280e175=""

       DomainName:="" w2k8r2.domain=""

       DnsForestName:="" w2k8r2.domain=""

       Flags:="" 0xe00031fd=""

       DcSiteName:="" w2k8r2-central=""

       ClientSiteName:="" w2k8r2-central=""



   Options:=""

   Options = "0x0"

 Do początku strony Do początku strony

Ograniczenia

Idealnym rozwiązaniem byłoby napisanie skryptu, który tworzyłby dyski wirtualne przyrostowe z przygotowanego dysku bazowego, następnie by je podłączał, wykonywał djoin – i możemy w krótkim czasie stworzyć dowolnie wielkie środowisko wirtualne.

Pojawia się tutaj jednak poważny problem: podczas zmiany nazwy, nie jest zmieniany SID systemu. Teoretycznie da się dołączyć do domeny systemy z tym samym SIDem, ale jest to ryzykowne – nie ma w zasadzie żadnego dokumentu, który mówiłby jakie będą tego konsekwencje, a z praktyki wiem, że niestety czasem pewne aplikacje działać nie chcą.

Należy więc mieć nadzieję, że do pojawienia się wersji finalnej, narzędzie zostanie zmodyfikowane tak, żeby podmieniało SID systemu.

 Do początku strony Do początku strony

Przydatne linki


Nataniel Zieliński Nataniel Zieliński (konsultant ISCG)
Przygodę z komputerem zaczynał na polskich 8-bitowcach Bosman 8 w późnych latach 80-tych. Po bogatych doświadczeniach z licznymi systemami, rozpoczął karierę jako administrator systemów Windows NT w Polsko-Japońskiej Wyższej Szkole Technik Komputerowych, gdzie zgłębiał tajemnice kolejnych wersji Windows NT, zarówno od strony technicznej - administrując, jak teoretycznej - prowadząc kursy MOC w Akademickim Centrum Szkoleniowym. Od kilku lat pracuje w roli konsultanta oraz trenera MCT w firmie ISCG Sp. z o.o., Gold Partnera Microsoft, dalej pogłębiając swoją wiedzę w dziedzinie kolejnych produktów ze stacji Microsoft. Od dłuższego czasu członek elitarnego klubu inżynierów Microsoft - SEClub.
 Do początku strony Do początku strony

Windows Server 2008