Windows DNS/DHCP/IIS + Linux NGINX/MariaDB on a segmented, NAT-bridged network.
Verify network
Windows services
Linux services
Cross-VM tests
Foundation from Week 1: ML350p Gen8 · Proxmox VE 8.2.2 live at https://10.10.10.10:8006
Prove the internal network works via the NAT bridge and Jump Box, then stand up the core services both teams depend on downstream.
By Friday, any VM should be able to:
winserver.teamx.local via your own DNScapstone_db from CLIvmbr1| Subnet | 192.168.1.0/24 |
| Gateway (= Proxmox host) | 192.168.1.1 |
| Subnet mask | 255.255.255.0 |
| Upstream DNS (temp) | 8.8.8.8 |
Once your own DNS server is up, clients should point at the Windows server IP instead of 8.8.8.8.
| VM | IP | Role |
|---|---|---|
| Windows Server | 192.168.1.2 | DNS · DHCP · IIS |
| Linux Server (Ubuntu) | 192.168.1.3 | NGINX · MariaDB |
| Jump Box | 192.168.1.4 | RDP/SSH gateway |
| DHCP scope range | 192.168.1.10 – 192.168.1.100 | |
⚠ Don't overlap statics with the DHCP scope — keep .1–.9 reserved.
vmbr1)| From → To | Record |
|---|---|
| Proxmox host → Jump Box | ______ ms |
| Jump Box → Windows VM | ______ ms |
| Jump Box → Linux VM | ______ ms |
# from the Proxmox host shell: ping -c 4 192.168.1.4 # Jump Box ping -c 4 192.168.1.2 # Windows VM ping -c 4 192.168.1.3 # Linux VM
Windows VM cmd:
ping 8.8.8.8 expect < 30 ms replies
Linux VM bash:
curl https://ifconfig.me → returns your school's public IP
If this fails, check: IP forwarding enabled on host (sysctl net.ipv4.ip_forward), iptables MASQUERADE rule present, VM gateway = 192.168.1.1.
| VM | Gateway | VM IP | DNS Server | Working? (Y/N) |
|---|---|---|---|---|
| Windows VM | 192.168.1.1 | 192.168.1.2 | 8.8.8.8 | ___ |
| Linux VM | 192.168.1.1 | 192.168.1.3 | 8.8.8.8 | ___ |
| Jump Box | 192.168.1.1 | 192.168.1.4 | 8.8.8.8 | ___ |
ipconfig /all look for: Default Gateway . . : 192.168.1.1 DNS Servers . . . . : 8.8.8.8
ip route | grep default default via 192.168.1.1 dev eth0 cat /etc/resolv.conf nameserver 8.8.8.8
📸 Screenshot ipconfig /all and ip route + resolv.conf for the report.
teamx.local (replace x with your team letter/number)winserver192.168.1.2nslookup winserver.teamx.local Server: localhost Address: 127.0.0.1 Name: winserver.teamx.local Address: 192.168.1.2
📸 Screenshot the DNS Manager tree showing the zone + A record, and the nslookup output.
| Name | CapstoneScope |
| Start IP | 192.168.1.10 |
| End IP | 192.168.1.100 |
| Subnet Mask | 255.255.255.0 |
| Default Gateway | 192.168.1.1 |
| DNS Server | 192.168.1.2 your own DNS |
| DNS suffix | teamx.local |
| Lease duration | 8 days (default) |
.10–.100Windows client: ipconfig /release ipconfig /renew ipconfig /all Linux client: sudo dhclient -r && sudo dhclient ip -4 addr
📸 Screenshot the DHCP Manager scope + Address Leases panel showing at least 1 active lease.
C:\inetpub\wwwroot\iisstart.htm + iisstart.pngindex.html<html>
<body>
<h1>Welcome to Week 2!</h1>
</body>
</html>
Browser: http://192.168.1.2 Or by hostname (DNS working): http://winserver.teamx.local
You should see Welcome to Week 2! rendered as an H1.
📸 Screenshot the browser showing the welcome page — URL bar visible.
sudo apt update sudo apt install nginx -y sudo systemctl enable nginx sudo systemctl start nginx sudo systemctl status nginx ● nginx.service - A high performance web server Active: active (running)
echo "<h1>Welcome to Linux Week 2</h1>" \ | sudo tee /var/www/html/index.html # confirm file: cat /var/www/html/index.html <h1>Welcome to Linux Week 2</h1>
Browser on Windows / Jump Box: http://192.168.1.3
📸 Screenshot the browser with URL + rendered heading.
If it fails, check: sudo ufw status (allow port 80 if firewall up), NIC IP is actually .3, and gateway is .1.
sudo apt install mariadb-server -y sudo systemctl enable mariadb sudo systemctl start mariadb sudo mysql MariaDB [(none)]>
Optional but recommended: sudo mysql_secure_installation — set root password, remove anon users & test DB.
CREATE DATABASE capstone_db;
CREATE USER 'capuser'@'localhost'
IDENTIFIED BY 'securepass';
GRANT ALL PRIVILEGES ON capstone_db.*
TO 'capuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
mysql -u capuser -p -e "SHOW DATABASES;" password: securepass +--------------------+ | Database | +--------------------+ | capstone_db | | information_schema | +--------------------+
📸 Screenshot the SHOW DATABASES; output with capstone_db listed.
| From → To | Latency |
|---|---|
| Win → Linux | ___ ms |
| Linux → Win | ___ ms |
Win cmd: ping 192.168.1.3 Linux bash: ping -c 4 192.168.1.2
Linux terminal: nslookup winserver.teamx.local Server: 192.168.1.2 Address: 192.168.1.2#53 Name: winserver.teamx.local Address: 192.168.1.2
If this fails but ping 192.168.1.2 works, the client is still pointed at 8.8.8.8 — fix /etc/resolv.conf or renew DHCP.
Spin up a fresh Windows 10/Kali/Ubuntu VM on vmbr1 → set NIC to DHCP.
Record the leased IP: ipconfig /all | findstr IPv4 IPv4 Address . . . . : 192.168.1.11
📸 Screenshot the DHCP Address Leases on the Windows server showing the client's MAC & IP.
| Test | Expected | Actual | Pass / Fail | Screenshot |
|---|---|---|---|---|
| Ping Proxmox host → Jump Box | < 5 ms | ___ ms | ☐ | ☐ |
| Ping Jump Box → Win VM | < 5 ms | ___ ms | ☐ | ☐ |
| Ping Jump Box → Linux VM | < 5 ms | ___ ms | ☐ | ☐ |
| Win VM ping 8.8.8.8 | < 30 ms | ___ ms | ☐ | ☐ |
Linux VM curl ifconfig.me | School public IP | _________ | ☐ | ☐ |
nslookup winserver.teamx.local | 192.168.1.2 | _________ | ☐ | ☐ |
| DHCP lease issued to client | IP in .10–.100 range | _________ | ☐ | ☐ |
Browse http://192.168.1.2 | "Welcome to Week 2!" | rendered Y/N | ☐ | ☐ |
Browse http://192.168.1.3 | "Welcome to Linux Week 2" | rendered Y/N | ☐ | ☐ |
SHOW DATABASES; via capuser | capstone_db listed | _________ | ☐ | ☐ |
SHOW DATABASES; showing capstone_dbvmbr1)?ufw up? → sudo ufw allow from 192.168.1.0/24192.168.1.x IP? (ipconfig/ip a)sysctl net.ipv4.ip_forward should say 1iptables -t nat -L POSTROUTING -n -v192.168.1.1?8.8.8.8 pingable from host)?192.168.1.2 (your Win server)?winserver.teamx.local not just winserver?services.msc or systemctl status)telnet <ip> 80 to confirm listening'capuser'@'localhost'? Remote clients need 'capuser'@'%'FLUSH PRIVILEGES; after GRANT?securepass)?/etc/mysql/mariadb.conf.d/50-server.cnfPhase 0 → 1 → 2 → 3 · screenshot everything · fill the tables
Questions? Back to the retrospective or main guide.