Lab_AD_Complet/docs/etudiant/en/06-join-windows-client.md
Corentin 8e1b06e090 Initial lab release: Docker-based Active Directory lab
Complete Active Directory teaching environment based on dockurr/windows:
- Windows Server domain controller, Windows 11 client, Debian 12 client
- docker-compose orchestration, env-driven configuration
- Bilingual documentation (FR + EN) for students
- Dual approach (GUI + PowerShell) in every procedure
- Instructor course plan and reference scripts
- RDP launcher scripts for Linux, macOS and Windows

Made by AcadéNice - https://acadenice.fr/
2026-04-17 11:29:49 +02:00

155 lines
3.9 KiB
Markdown

# Join the Windows client to the domain
Goal: start the `pc01` container, install Windows 11, then join the machine
to `corp.lab`.
## Start the container
```
docker compose up -d pc01
```
Windows 11 installs unattended, same as `DC01`. Allow 20 to 40 minutes. Track
via:
- [http://localhost:8009](http://localhost:8009)
- `docker compose logs -f pc01`
Once the desktop is available:
```
./scripts/rdp-client.sh
```
Local credentials: `LocalAdmin` / `AD_ADMIN_PASSWORD` (same value as DC01 in
this lab).
## Step 1: prepare the client
### Rename
Fresh dockurr installs ship with an auto-generated hostname (`WIN-xxxxxxx`).
Rename before joining. GUI: `Settings > System > About > Rename this PC`. Or
PowerShell:
```
Rename-Computer -NewName "PC01" -Restart
```
### Point DNS to the DC
Without correct DNS, the join fails. PC01 must query DC01 to resolve
`corp.lab` and AD SRV records.
GUI: `Settings > Network > Network adapter properties > Edit DNS settings`.
PowerShell:
```
Get-NetAdapter | Format-Table Name, Status
Set-DnsClientServerAddress -InterfaceAlias "Ethernet" -ServerAddresses <DC_IP>
```
See the docker specifics block below to pick the IP.
### Docker lab specifics
`dockurr/windows` runs Windows inside a VM with internal NAT. The DC
advertises its internal VM IP in DNS, which is not routable from `PC01`. But
the DC container has a DNAT rule forwarding all ports to its VM.
Solution: use the DC **container** IP (visible via `docker inspect lab-dc01`)
and add a `hosts` entry so name resolution lands on it.
In PowerShell on PC01:
```
# Replace <DC_CONTAINER_IP> with the value from:
# docker inspect lab-dc01 --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'
Add-Content C:\Windows\System32\drivers\etc\hosts "`n<DC_CONTAINER_IP> corp.lab dc01.corp.lab dc01"
ipconfig /flushdns
```
Test:
```
Test-NetConnection -ComputerName corp.lab -Port 389
nslookup corp.lab
```
## Step 2: join the domain
### GUI
1. `Settings > System > About > Join a domain`
2. Or `sysdm.cpl > Change`
3. Enter `corp.lab`, confirm
4. Enter `CORP\Administrator` credentials
5. Restart when prompted
### PowerShell
Key cmdlet: `Add-Computer`.
```
$pass = ConvertTo-SecureString "AdminP@ss!2026" -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential("CORP\Administrator", $pass)
Add-Computer -DomainName corp.lab -Credential $cred -Restart
```
## Step 3: allow an AD user to RDP
By default, only local `Administrators` can RDP. After joining, the local
`Administrators` contains `CORP\Domain Admins`, so a domain admin can RDP.
Standard users must be explicitly added.
### GUI
1. Right-click `This PC > Properties > Remote Desktop settings`
2. `Select users` > add `CORP\pmartin` (or an AD group)
### PowerShell
```
Add-LocalGroupMember -Group "Remote Desktop Users" -Member "CORP\pmartin"
```
In practice, create a dedicated AD group (e.g. `GG_RDPUsers`) and push it via
GPO to the local group on every machine.
## Step 4: test with an AD user
From Linux/macOS host:
```
xfreerdp3 /v:127.0.0.1:3391 /u:pmartin /d:CORP /p:'<pwd>' /cert:ignore +clipboard /size:1600x900 /dynamic-resolution
```
On Windows, use `mstsc` with `CORP\pmartin`.
Once logged in, validate:
```
whoami
whoami /groups
Get-ComputerInfo | Select CsDomain, CsDomainRole
```
You should see `CORP\pmartin`, AD groups, and `CsDomainRole : MemberWorkstation`.
## Notes
- An account with "must change password at next logon" cannot RDP via NLA.
Either unset the flag on the DC
(`Set-ADUser -ChangePasswordAtLogon $false`) or force `/sec:rdp` to get the
change-password screen.
- If `Add-Computer` hits `The mapping between account names and SIDs was not
done`, the PC is in a broken domain state. Switch to workgroup
(`Add-Computer -WorkgroupName "WORKGROUP" -Force`) then retry.
- Clean up stale computer accounts in `CN=Computers` when you recreate a
client.
## Next
`07-join-linux-client.md` for the Linux side.