On this page
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
- IPv4
- 10.77.0.10
- DNS
- 10.77.0.10 (itself)
- Spec
- 3 vCPU, 6 GB, 60 GB
- IPv4
- 10.77.0.20
- DNS
- 10.77.0.10 (DC01)
- Spec
- 3 vCPU, 6 GB, 64 GB
| Hypervisor | Oracle VirtualBox 7.2.20 on a Windows 11 Home host |
|---|---|
| DC01 | Windows Server 2025 Standard Evaluation (Desktop Experience), 3 vCPUs, 6 GB RAM, 60 GB dynamic disk, UEFI |
| CLIENT01 | Windows 11 Enterprise Evaluation, 3 vCPUs, 6 GB RAM, 64 GB dynamic disk, UEFI |
| Virtual network | Shared NAT lab network 10.77.0.0/24, gateway 10.77.0.10 |
| DC01 IPv4 / DNS | 10.77.0.10 / 10.77.0.10 |
| CLIENT01 IPv4 / DNS | 10.77.0.20 / 10.77.0.10 |
| AD DNS domain | corp.shamarlab.test (NetBIOS: CORP) |
| Workstation | CLIENT01, 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
Start from a clean, known baseline
The environment began as two clean VirtualBox VMs. DC01 signed in with the local
.\Administratoraccount and CLIENT01 with the local.\LabAdminaccount. 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 mattersThis is the before picture: two independent Windows systems with local accounts only. It makes the later move to CORP domain accounts easy to see.
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.
Host DHCP (before) Static (after) Preferred DNS DC01 10.77.0.3 10.77.0.10/24 10.77.0.10 (itself) CLIENT01 10.77.0.4 10.77.0.20/24 10.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 takeawayA 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
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.testdomain and its default containers: Builtin, Computers, Domain Controllers, and Users.Why it mattersThe 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.
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.testforward lookup zone: the AD service folders (_msdcs,_sites,_tcp,_udp), DomainDnsZones and ForestDnsZones, and Host (A) records resolving the domain anddc01to 10.77.0.10.I also checked name resolution and service discovery, and confirmed the domain controller was sharing
SYSVOLandNETLOGON. Then I took a known-good snapshot named DC Promoted – AD Healthy.Why it mattersThese 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
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 mattersThis 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.
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.
User Sign-in name OU & Department Maya Chen mchenAccounting Jordan Ellis jellisSales Taylor Brooks tbrooksIT Figure 5.Taylor Brooks inside the IT OU. Maya and Jordan were created the same way in Accounting and Sales. Local vs. domain identityA local account like
CLIENT01\LabAdminexists on one computer only. An account likeCORP\mchenlives in Active Directory, so it can sign in to any domain-joined computer and reach domain resources, subject to policy and group membership.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:
Accountsmchen, jellis, tbrooksGlobal groupsGG-Accounting, GG-Sales, GG-ITDomain LocalDL-AccountingShare-ModifyPermissionsSMB + NTFS on the shareFigure 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 scalesThe 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
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.testdomain and its domain controller.CLIENT01 PowerShell, excerpt of Figure 7PS> 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.testFigure 7. ipconfig /allshows CLIENT01 at 10.77.0.20 with 10.77.0.10 as its default gateway and DNS server.nslookupresolvesdc01.corp.shamarlab.testto 10.77.0.10, and the SRV lookup for_ldap._tcp.dc._msdcsreturns dc01 on LDAP port 389.Reading the outputThe “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 mattersIt 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.
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.testdomain, authenticated the join withCORP\Administrator, accepted the welcome message, and restarted the workstation.Figure 8.On CLIENT01, whoamireturnscorp\mchenandhostnamereturns CLIENT01, running under Maya Chen’s profile.Why it mattersDirect evidence that Maya isn’t using a local account. She’s authenticated as a CORP domain user on a domain-joined Windows 11 workstation.
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
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 mattersAn 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.
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 conceptWhen 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
Build the Accounting share with two permission layers
To connect the identities to a real resource, I created
C:\Shares\Accountingon DC01 with anAccounting-ReadMe.txtfile inside, and shared the folder as Accounting, which gives the UNC path\\DC01\Accounting.Layer Granted to Permission SMB share CORP\DL-AccountingShare-ModifyChange + Read NTFS (Security) CORP\DL-AccountingShare-ModifyModify (no Full Control) Left intact SYSTEM and administrative entries Existing 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 mattersThe 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.
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 showingAccounting-ReadMe.txt.Effective access pathCORP\mchen→GG-Accounting→DL-AccountingShare-Modify→ SMB share permission + NTFS Modify →\\DC01\AccountingWhy it mattersEnd-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
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 setting Value Interactive logon: Message title for users attempting to log on ShamarLab Authorized Use Interactive logon: Message text for users attempting to log on Training 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 mattersThe 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.
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\Accountingas 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 andAccounting-ReadMe.txtavailable from the mapped drive.Computer vs. user policyCORP - 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.
- corp.shamarlab.test
- Builtin, Computers, Domain Controllers, Users (defaults)
- Corp
- Users
- Accounting CORP - Accounting Drive (user)
- Maya Chen (mchen)
- IT
- Taylor Brooks (tbrooks)
- Sales
- Jordan Ellis (jellis)
- Accounting CORP - Accounting Drive (user)
- Groups
- GG-Accounting global → member of DL-AccountingShare-Modify
- GG-IT global
- GG-Sales global
- DL-AccountingShare-Modify domain local
- Workstations CORP - Workstation Baseline (computer)
- CLIENT01
- Servers
- Users
Final configuration checklist
corp.shamarlab.testforest 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\Accountingthrough 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
| Skill | What I demonstrated |
|---|---|
| AD DS deployment | Installed AD DS and created a new Windows forest and domain |
| AD-aware DNS | Configured client DNS to use DC01 and validated A and SRV service discovery |
| OU administration | Designed OU scope for departments, groups, workstations, and servers |
| Identity management | Created domain users and performed a password reset, disable/enable, and membership changes |
| Security groups | Used Global and Domain Local security groups with nested membership (AGDLP) |
| Domain membership | Joined Windows 11 to the domain and verified CORP domain authentication |
| Authorization | Implemented SMB and NTFS access through a nested AD group path |
| Group Policy | Applied computer settings by workstation OU and user settings by department OU |
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
| Domain | corp.shamarlab.test |
|---|---|
| NetBIOS domain | CORP |
| Domain controller | DC01 |
| Domain member workstation | CLIENT01 |
| DC01 IPv4 | 10.77.0.10 |
| CLIENT01 IPv4 | 10.77.0.20 |
| Default gateway | 10.77.0.10 |
| Client DNS | 10.77.0.10 |
| Top-level OU | Corp |
| Department users | Maya Chen (mchen), Jordan Ellis (jellis), Taylor Brooks (tbrooks) |
| Global groups | GG-Accounting, GG-Sales, GG-IT |
| Resource group | DL-AccountingShare-Modify |
| Accounting UNC path | \\DC01\Accounting |
| Workstation GPO | CORP - Workstation Baseline |
| Accounting drive GPO | CORP - Accounting Drive |
| Mapped drive | Accounting (A:) → \\DC01\Accounting |
Screenshot evidence index 14 figures
- Clean DC01 and CLIENT01 VMs before AD configuration
- corp.shamarlab.test visible in Active Directory Users and Computers after promotion
- AD-integrated DNS zone and DC01 A records
- Corp OU structure with department OUs
- Taylor Brooks domain user inside the IT OU
- GG-Accounting nested inside DL-AccountingShare-Modify
- CLIENT01 IPv4/DNS configuration plus AD DNS and SRV discovery
- CORP\mchen authenticated on CLIENT01
- CLIENT01 computer object inside Corp\Workstations
- Jordan Ellis domain account disabled in ADUC
- NTFS Modify permission for DL-AccountingShare-Modify
- Maya accessing the Accounting network share on CLIENT01
- Workstation logon-banner GPO configuration and the resulting client banner
- Accounting drive-map GPO and the resulting A: mapped drive on CLIENT01