IT & InfrastructureActive Directory & Identity10 min read

Building a Windows Domain from Scratch

I took two clean virtual machines and turned them into a working Active Directory environment: a Windows Server 2025 domain controller running AD DS and DNS, a domain-joined Windows 11 workstation, an organized OU structure, department users and nested security groups, a permission-locked SMB share, and Group Policy that configures both the computer and the user.

Role
Designed, built, and documented solo
Completed
October 2026
Environment
Oracle VirtualBox, Windows Server 2025, Windows 11 Enterprise
Status
Completed, with a 14-screenshot evidence trail

The core idea: how one domain user reaches the Accounting share

Permissions live on the resource group, never on the person. Changing someone’s access means changing one group membership.

Summary

The goal

Practice the core jobs that make Active Directory useful to an organization: central identity, computer membership, DNS-based service discovery, group-based access, and policy-based configuration. I configured everything by hand in the Windows admin tools to understand how each piece depends on the others.

What I built

Promoted DC01 to the first domain controller of a new forest, validated AD-integrated DNS, designed the OU tree, created users and AGDLP-nested groups, joined CLIENT01, secured an SMB share with share and NTFS permissions, and linked one computer GPO and one user GPO.

The result

Domain user CORP\mchen signs in to CLIENT01, sees a policy-driven logon banner, gets the Accounting drive (A:) mapped automatically, and can edit files on \\DC01\Accounting only through her group membership.

Skills

  • AD DS
  • AD-integrated DNS
  • OU design
  • User lifecycle
  • AGDLP groups
  • Domain join
  • SMB & NTFS permissions
  • Group Policy
  • GPP drive maps
On this page
  1. Overview
  2. Lab architecture
  3. The build, step by step
    1. Phase 1: Baseline & network
    2. Phase 2: Create the domain
    3. Phase 3: Organize identities
    4. Phase 4: Join the workstation
    5. Phase 5: Administer accounts
    6. Phase 6: Secure a resource
    7. Phase 7: Centralize configuration with Group Policy
  4. Final state
  5. Skills demonstrated
  6. Takeaway
  7. Configuration reference

Overview

I built a small Windows Active Directory environment with one Windows Server 2025 VM as the domain controller and one Windows 11 Enterprise VM as the domain member workstation.

The project started with two clean, isolated virtual machines and ended with a working forest named corp.shamarlab.test, internal DNS, an organized OU structure, domain users and security groups, a joined Windows 11 client, group-based SMB and NTFS permissions, and Group Policy that configured both the workstation and the Accounting user experience.

The goal was to practice the administration tasks that make Active Directory useful in an organization: centralized identity, computer membership, DNS-based service discovery, organizational structure, security group design, resource authorization, and policy-based configuration. I did it all manually in the Windows administrative tools so I would understand what each component does and how the pieces depend on one another.

Lab architecture

Topology: Oracle VirtualBox on a Windows 11 Home host

NAT network 10.77.0.0/24gateway 10.77.0.10
DC01Windows Server 2025 Standard
IPv4
10.77.0.10
DNS
10.77.0.10 (itself)
Spec
3 vCPU, 6 GB, 60 GB
AD DSDNSGlobal Catalog\\DC01\Accounting
CLIENT01Windows 11 Enterprise
IPv4
10.77.0.20
DNS
10.77.0.10 (DC01)
Spec
3 vCPU, 6 GB, 64 GB
Domain memberCorp\Workstations
HypervisorOracle VirtualBox 7.2.20 on a Windows 11 Home host
DC01Windows Server 2025 Standard Evaluation (Desktop Experience), 3 vCPUs, 6 GB RAM, 60 GB dynamic disk, UEFI
CLIENT01Windows 11 Enterprise Evaluation, 3 vCPUs, 6 GB RAM, 64 GB dynamic disk, UEFI
Virtual networkShared NAT lab network 10.77.0.0/24, gateway 10.77.0.10
DC01 IPv4 / DNS10.77.0.10 / 10.77.0.10
CLIENT01 IPv4 / DNS10.77.0.20 / 10.77.0.10
AD DNS domaincorp.shamarlab.test (NetBIOS: CORP)
WorkstationCLIENT01, joined to corp.shamarlab.test and placed in Corp\Workstations

The build, step by step

Seven phases, sixteen steps. Each step shows what I did, the screenshot that proves it, and why it matters.

Phase 1Baseline & network

  1. Start from a clean, known baseline

    The environment began as two clean VirtualBox VMs. DC01 signed in with the local .\Administrator account and CLIENT01 with the local .\LabAdmin account. Neither was joined to a domain. I took clean-install snapshots first, so I had a recovery point before making any Active Directory changes.

    Figure 1.Both VMs at their local sign-in screens: DC01 (top) as Administrator, CLIENT01 (bottom) as LabAdmin.
    Why it matters

    This is the before picture: two independent Windows systems with local accounts only. It makes the later move to CORP domain accounts easy to see.

  2. Give the domain controller an address that never changes

    The NAT network handed out DHCP addresses. A domain controller and DNS server shouldn’t move, so I made DC01 static and pointed it at itself for DNS. Later, CLIENT01 got a static address that points at DC01 for DNS.

    HostDHCP (before)Static (after)Preferred DNS
    DC0110.77.0.310.77.0.10/2410.77.0.10 (itself)
    CLIENT0110.77.0.410.77.0.20/2410.77.0.10 (DC01)
    Default gateway for both: 10.77.0.10

    A direct ping between the two VMs timed out at first. I didn’t treat that as a broken lab: both machines could ping the NAT gateway, and DNS and Active Directory traffic later worked correctly. The timeout was most consistent with host firewall behavior, not a failed virtual network.

    Troubleshooting takeaway

    A ping result tests only one kind of network traffic. On its own it doesn’t prove whether Active Directory services are healthy.

Phase 2Create the domain

  1. Install AD DS and promote DC01

    In Server Manager I installed the Active Directory Domain Services role. Installing the role adds the server components and admin tools, but it doesn’t create a domain by itself. I then chose Promote this server to a domain controller and created a new forest with the root domain corp.shamarlab.test.

    • DC01 became the writable first domain controller, a DNS server, and the Global Catalog for the new forest
    • NetBIOS domain name: CORP
    • A lab-only Directory Services Restore Mode (DSRM) password
    • Default database, log, and SYSVOL paths
    • Prerequisite check passed, then the server promoted and rebooted
    Figure 2.Active Directory Users and Computers on DC01 showing the new corp.shamarlab.test domain and its default containers: Builtin, Computers, Domain Controllers, and Users.
    Why it matters

    The first direct, graphical proof that the forest and domain exist, and that DC01 now manages an Active Directory namespace instead of running as a standalone server.

  2. Validate AD-integrated DNS

    Active Directory depends on DNS for more than name resolution. It uses DNS for service discovery: a client asks DNS where the domain controller and the LDAP service are. So DC01 hosts the AD-integrated DNS zone, and CLIENT01 uses DC01 for DNS instead of an outside resolver.

    Figure 3.DNS Manager showing the corp.shamarlab.test forward lookup zone: the AD service folders (_msdcs, _sites, _tcp, _udp), DomainDnsZones and ForestDnsZones, and Host (A) records resolving the domain and dc01 to 10.77.0.10.

    I also checked name resolution and service discovery, and confirmed the domain controller was sharing SYSVOL and NETLOGON. Then I took a known-good snapshot named DC Promoted – AD Healthy.

    Why it matters

    These records let domain members find DC01 and the services they need to join the domain, authenticate, and pull Group Policy. It proves Active Directory and DNS are integrated correctly.

Phase 3Organize identities

  1. Design the OU structure

    Instead of leaving everything in the default containers, I created a top-level Corp OU with child OUs for Users, Groups, Workstations, and Servers, and department OUs (Accounting, IT, Sales) under Users. That makes the directory easier to administer and, more importantly, gives Group Policy a clean scope for department users and workstations.

    Figure 4.The Corp OU expanded: Groups, Servers, Users, and Workstations, with Accounting, IT, and Sales under Users.
    Why it matters

    This hierarchy drives the rest of the lab. The Workstations OU later receives a computer-side GPO, and the Accounting OU receives a user-side drive mapping.

  2. Create domain user accounts

    I created three fictional employees in their department OUs. Each got a Department attribute matching the OU and a temporary, lab-only password that had to be changed at next sign-in.

    UserSign-in nameOU & Department
    Maya ChenmchenAccounting
    Jordan EllisjellisSales
    Taylor BrookstbrooksIT
    Figure 5.Taylor Brooks inside the IT OU. Maya and Jordan were created the same way in Accounting and Sales.
    Local vs. domain identity

    A local account like CLIENT01\LabAdmin exists on one computer only. An account like CORP\mchen lives in Active Directory, so it can sign in to any domain-joined computer and reach domain resources, subject to policy and group membership.

  3. Build the group model with AGDLP

    I created three Global security groups for department membership (GG-Accounting, GG-Sales, GG-IT) and added each user to their department’s group. Then I created a Domain Local group, DL-AccountingShare-Modify, to represent one specific permission on one resource.

    Instead of adding Maya to the permission group directly, I nested GG-Accounting inside DL-AccountingShare-Modify. That’s the simplified AGDLP model:

    Figure 6.The Members tab of DL-AccountingShare-Modify lists GG-Accounting. The Groups OU holds DL-AccountingShare-Modify, GG-Accounting, GG-IT, and GG-Sales.
    Why this model scales

    The design separates who the user is from what the resource allows. If an employee changes departments, I change their Global group membership, and the file share never has to be reconfigured for one person. That’s easier to audit and maintain than putting individual users on every ACL.

Phase 4Join the workstation

  1. Point CLIENT01 at AD DNS and prove discovery works

    Before the join, I set CLIENT01 to 10.77.0.20/24 with 10.77.0.10 as its default gateway and DC01 (10.77.0.10) as its preferred DNS server. DNS was the critical setting: the workstation has to query AD DNS to discover the private corp.shamarlab.test domain and its domain controller.

    CLIENT01 PowerShell, excerpt of Figure 7
    PS> ipconfig /all
       IPv4 Address. . . . . : 10.77.0.20(Preferred)
       Default Gateway . . . : 10.77.0.10
       DNS Servers . . . . . : 10.77.0.10
    
    PS> nslookup dc01.corp.shamarlab.test
    Name:    dc01.corp.shamarlab.test
    Address: 10.77.0.10
    
    PS> nslookup -type=SRV _ldap._tcp.dc._msdcs.corp.shamarlab.test
    _ldap._tcp.dc._msdcs.corp.shamarlab.test   SRV service location:
              port         = 389
              svr hostname = dc01.corp.shamarlab.test
    Figure 7.ipconfig /all shows CLIENT01 at 10.77.0.20 with 10.77.0.10 as its default gateway and DNS server. nslookup resolves dc01.corp.shamarlab.test to 10.77.0.10, and the SRV lookup for _ldap._tcp.dc._msdcs returns dc01 on LDAP port 389.
    Reading the output

    The “DNS request timed out” and “Server: UnKnown” lines come from nslookup trying to reverse-resolve the DNS server’s own address, and this lab has no reverse lookup zone. The forward and SRV queries both answer correctly.

    Why it matters

    It proves the client can use internal DNS to locate the domain controller and the LDAP service Active Directory clients rely on, before attempting the join.

  2. Join the domain and sign in as a domain user

    With discovery working, I opened System Properties, changed CLIENT01’s membership from a workgroup to the corp.shamarlab.test domain, authenticated the join with CORP\Administrator, accepted the welcome message, and restarted the workstation.

    Figure 8.On CLIENT01, whoami returns corp\mchen and hostname returns CLIENT01, running under Maya Chen’s profile.
    Why it matters

    Direct evidence that Maya isn’t using a local account. She’s authenticated as a CORP domain user on a domain-joined Windows 11 workstation.

  3. Move the computer object into the Workstations OU

    A domain join creates a computer object in Active Directory. I moved CLIENT01 into Corp\Workstations, because the workstation baseline GPO is linked there. Object placement determines policy scope.

    Figure 9.The CLIENT01 computer object inside Corp › Workstations.

Phase 5Administer accounts

  1. Reset a password, then disable and re-enable an account

    With the domain running, I practiced everyday account administration in Active Directory Users and Computers. I reset Maya Chen’s domain password and required a change at next sign-in, which shows the difference between resetting a domain credential in Active Directory and changing a local workstation password.

    I also disabled Jordan Ellis’s account to test its Enabled/Disabled state, then re-enabled it for continued lab use. Disabling keeps the account object and its group memberships but blocks normal authentication, which is what you want for a temporary suspension or an offboarding workflow.

    Figure 10.The Sales OU, with an Active Directory Domain Services message confirming that Jordan Ellis has been disabled. Jordan was re-enabled after the exercise.
    Why it matters

    An account can have a perfectly valid password and still be denied, because the Active Directory account itself is disabled. Access control is independent of the password.

  2. Change a user’s role through group membership

    I temporarily moved Maya from Accounting to Sales: removed her from GG-Accounting, added her to GG-Sales, and changed her Department attribute to Sales. Then I restored her original state by adding GG-Accounting back, removing GG-Sales, and changing Department back to Accounting.

    That showed the difference between the two: the Department field is descriptive metadata, while security group membership is what actually drives authorization, including the file share later on.

    The security-token concept

    When group membership changes, a user who is already signed in may keep using a security token that contains the old memberships. Signing out and back in issues a fresh token, which is why access changes are usually verified after a new logon.

Phase 6Secure a resource

  1. Build the Accounting share with two permission layers

    To connect the identities to a real resource, I created C:\Shares\Accounting on DC01 with an Accounting-ReadMe.txt file inside, and shared the folder as Accounting, which gives the UNC path \\DC01\Accounting.

    LayerGranted toPermission
    SMB shareCORP\DL-AccountingShare-ModifyChange + Read
    NTFS (Security)CORP\DL-AccountingShare-ModifyModify (no Full Control)
    Left intactSYSTEM and administrative entriesExisting permissions

    That creates two authorization gates: a user must be allowed by the SMB share permission and by the NTFS ACL.

    Figure 11.Security permissions for C:\Shares\Accounting: DL-AccountingShare-Modify is allowed Modify, Read & execute, List folder contents, and Read. Full Control is not granted.
    Why it matters

    The file-system permission sits on the resource-oriented Domain Local group, not on Maya. The permission chain is mchen → GG-Accounting → DL-AccountingShare-Modify → NTFS and SMB access.

  2. Verify end-to-end access as Maya

    Signed in to CLIENT01 as corp\mchen, I browsed to Network › DC01 › Accounting and confirmed I could open, edit, save, create, and delete files in the share.

    Figure 12.CLIENT01 signed in as corp\mchen (whoami in the background), with File Explorer open to Network › DC01 › Accounting showing Accounting-ReadMe.txt.
    Effective access path

    CORP\mchen → GG-Accounting → DL-AccountingShare-Modify → SMB share permission + NTFS Modify → \\DC01\Accounting

    Why it matters

    End-to-end proof that the domain identity, the group nesting, the DNS and network path, the SMB share, and the NTFS permissions all work together.

Phase 7Centralize configuration with Group Policy

  1. Computer-side GPO: a logon banner for every workstation

    I created a GPO named CORP - Workstation Baseline and linked it to Corp\Workstations. Under Computer Configuration › Policies › Windows Settings › Security Settings › Local Policies › Security Options, I set the interactive logon message:

    Policy settingValue
    Interactive logon: Message title for users attempting to log onShamarLab Authorized Use
    Interactive logon: Message text for users attempting to log onTraining environment. Authorized lab use only.

    Because it’s a computer-side policy, it follows the CLIENT01 computer object. Moving CLIENT01 into the Workstations OU earlier is what put it in scope. After forcing a policy refresh and restarting CLIENT01, the banner appeared before sign-in.

    Figure 13.Left: Group Policy Management Editor on DC01 at Security Options, where the interactive logon settings were configured. Right: CLIENT01 showing the ShamarLab Authorized Use banner before sign-in.
    Why it matters

    The workstation’s behavior changed because of a GPO linked to its OU, not because anyone configured the client by hand. That’s centralized computer configuration through Group Policy.

  2. User-side Group Policy Preferences: map the Accounting drive

    I created a second GPO, CORP - Accounting Drive, and linked it to Corp\Users\Accounting. Under User Configuration › Preferences › Windows Settings › Drive Maps, I added an Update action that maps \\DC01\Accounting as the Accounting drive on letter A:.

    This policy is user-side. Maya receives it because her user object sits in the Accounting OU, so the same CLIENT01 workstation can present different settings depending on which domain account signs in.

    Figure 14.Left: the CORP - Accounting Drive GPO with an A: drive map pointing to \\DC01\Accounting. Right: CLIENT01 with Accounting (A:) in File Explorer and Accounting-ReadMe.txt available from the mapped drive.
    Computer vs. user policy

    CORP - Workstation Baseline applies because CLIENT01 is in the Workstations OU. CORP - Accounting Drive applies because Maya is in the Accounting user OU. This distinction is one of the main reasons OU placement matters in Active Directory.

Final state

At the end, DC01 was the domain controller and DNS server for corp.shamarlab.test, and CLIENT01 was a working domain member. The directory had a deliberate OU hierarchy, department users, department security groups, and a nested resource-permission group. The Accounting share used the group model for authorization, and Group Policy centrally configured both a workstation setting and a user resource mapping.

Final configuration checklist

  • corp.shamarlab.test forest and domain created on DC01
  • DC01 provides AD DS and internal DNS at 10.77.0.10
  • CLIENT01 uses 10.77.0.10 for DNS and is joined to the CORP domain
  • The Corp OU contains Users, Groups, Workstations, and Servers, with department child OUs
  • Maya Chen, Jordan Ellis, and Taylor Brooks exist as department domain users
  • GG-Accounting, GG-Sales, and GG-IT are Global security groups
  • GG-Accounting is nested inside DL-AccountingShare-Modify
  • CLIENT01 resides in Corp\Workstations
  • Maya can use \\DC01\Accounting through the intended group-based permission path
  • CORP - Workstation Baseline applies a centralized logon banner to CLIENT01
  • CORP - Accounting Drive maps the Accounting share as A: for the Accounting user scope

Skills demonstrated

SkillWhat I demonstrated
AD DS deploymentInstalled AD DS and created a new Windows forest and domain
AD-aware DNSConfigured client DNS to use DC01 and validated A and SRV service discovery
OU administrationDesigned OU scope for departments, groups, workstations, and servers
Identity managementCreated domain users and performed a password reset, disable/enable, and membership changes
Security groupsUsed Global and Domain Local security groups with nested membership (AGDLP)
Domain membershipJoined Windows 11 to the domain and verified CORP domain authentication
AuthorizationImplemented SMB and NTFS access through a nested AD group path
Group PolicyApplied computer settings by workstation OU and user settings by department OU
Windows Server 2025Windows 11 EnterpriseActive Directory Users and ComputersDNS ManagerGroup Policy ManagementGroup Policy PreferencesSMB sharesNTFS ACLsOracle VirtualBoxStatic IP addressingnslookup

Takeaway

The finished lab demonstrates the complete identity-to-resource path: build the domain, organize it, create identities and groups, join a workstation, authenticate a user, authorize a resource, and apply centralized policy.

“I did more than create a domain. I configured DNS so clients could find it, organized the directory into manageable OUs, created domain identities, modeled permissions through security groups, joined and authenticated a workstation, controlled access to an SMB resource, and used Group Policy to deliver centralized settings.”

Configuration reference

Naming & configuration values 16 items
Domaincorp.shamarlab.test
NetBIOS domainCORP
Domain controllerDC01
Domain member workstationCLIENT01
DC01 IPv410.77.0.10
CLIENT01 IPv410.77.0.20
Default gateway10.77.0.10
Client DNS10.77.0.10
Top-level OUCorp
Department usersMaya Chen (mchen), Jordan Ellis (jellis), Taylor Brooks (tbrooks)
Global groupsGG-Accounting, GG-Sales, GG-IT
Resource groupDL-AccountingShare-Modify
Accounting UNC path\\DC01\Accounting
Workstation GPOCORP - Workstation Baseline
Accounting drive GPOCORP - Accounting Drive
Mapped driveAccounting (A:) → \\DC01\Accounting
Screenshot evidence index 14 figures

Hiring for this skill set? I’m open to SOC, security analyst, and IT roles, and I usually reply within 24 hours.