Home Lab Setup
Omdat ik toch iets meer wil focussen op mijn home lab dacht ik dat het een goed plan is om een uit eenzetting neer te schrijven van mijn home lab. Het is niet de meest uitgebreide maar het is toch mijn speeltuin.
Zoals het hoort draait mijn home lab op Linux.
Hardware:
Hosts
Voor mijn hosts ben ik gegaan voor materiaal dat ik thuis nog had of kon meekrijgen van het werk. Dit wil zeggen dat mijn originele PVE host al meer dan 10 jaar oud is (aankoopdatum 1 juli 2014). Ik heb dan maar beslist 2 jaar geleden dat mijn originele PVE host een andere taak mag gaan uitvoeren binnen mijn home lab. Dus heb ik hier mijn back up storage van gemaakt door er TrueNAS scale op te installeren. Echter had ik dan wel een nieuwe PVE host nodig. Hiervoor heb ik dan een oude workstation gebruikt een kwestie van het materiaal een 2de leven te geven.
PVE02:
- CPU: 8 x Intel(R) Xeon(R) CPU E5-1620 v4 @ 3.50GHz (1 Socket)
- RAM:79GB
- Storage:
- Boot disk: 256GB NVME SSD
- DataStore: 3TB x2 in RAID 1
TrueNAS:
- CPU: Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
- RAM: 16GB
- Storage:
- Boot disk: 256GB sata SSD
- Datastore: 3TB x4 in RAIDZ1
Firewall
Mijn eerste firewall was een oude fortigate 60D die ik van een collega heb gekregen voor mijn eindwerk. Deze heb ik in juli 2024 vervangen door een fortigate 60E. Dit omdat mijn 60D geen updates meer kreeg.
Ik maak ook gebruik van verschillende VLAN’s:
- Guest > 192.168.1.0/24
- IOT (Ongebruikt) > 172.16.6.0/24
- Main > 172.16.1.0/24
- MGMT > 172.16.4.0/24 (management)
- SRV > 172.16.3.0/24
Ik maak ook voor elke VM een MAC reservation. Het IP van de VM is ook altijd de ID van de VM. Mijn MGMT netwerk benader ik via mijn eigen Desktop. Dit doe ik door alleen mijn IP van mijn desktop & laptop toe te laten naar bepaalde netwerken wegens gebrek aan een betere manier. Ik had ook nog een SSL VPN via mijn firewall maar deze heb ik uitgeschakeld toen ik mijn 60D nog gebruikte dit vanwagen de vele Common Vulnerabilities and Exposures CVE’s dat het al had verzameld. 😅. Deze VPN gaat ook niet snel terug komen. Optermijn zou ik wel een Open VPN willen gaan gebruiken dit omdat het een product/ project is dat zijn waarden & veiligheid in het verleden al heeft bewezen. Deze open VPN zou ik dan wel willen draaien op een pfsense firewall.
Switchen
Mijn switchen zijn hetzelfde verhaal als mijn firewall & mijn hosts. Ik heb ze gekregen op mijn werk. Dit zijn zeer oude toestellen. Ik vermoed van sommige of ze nog gediend hebben voor Napoleon. Het vreemde dat ik ook heb met deze oude HP/ HPE switchen is dat ik ze niet in mijn management netwerk krijg. Dus het is altijd een hele uitdaging voor hier aanpassingen aan te doen. Mogelijks is het ook meer een ik probleem dan de switchen. Op termijn zou ik ook deze swithen willen vervangen door Unifi switchen. Cisco of Ruckus is wat duur.
| Switch | Device name | IP | Location |
|---|---|---|---|
| hpe 1800-24 (J9028B) | SW01.local.sysadminnotes.be | 172.16.4.3 | Server room |
| hpe 1810 - 24 (J9803A) | SW02.local.sysadminnotes.be | 172.16.4.4 | Berging |
Access points
Ik gebruik momenteel Unifi U7 pro access points.
Deze stralen 3 netwerken uit:
- Main: Netwerk waar onze telefoons, Laptops & Apple TV op zitten.
- Guest: Netwerk waar de toestellen van onze gasten en familie op zitren.
- IoT: Wasmachines, ovens, ijskasten en andere dingen die ik niet echt vertrouw.
Iets dat ik wel altijd doe voor ik mijn AP update, is opzoeken wat de reacties zijn voor deze update. Hier is een Reddit bot voor & sub Reddit. In het verleden waren er nog al veel problemen met de updates van Unifi producten.
- U7 pro
Software
Hypervisor
Hier ben ik gegaan voor proxmox. Dit omdat mijn host geen hardware raid controller heeft (hoe zou het toch komen 😅). Voor de rest ben ik eigenlijk vergeten waarom ik proxmox heb gekozen over XCP-NG. Ik maak gebruik van de non production repo. Ik heb hier eigenlijk nog nooit echt problemen mee gehad. Ik heb wel al gehad dat als ik VM’s probeer te verwijderen dat deze wel verdwenen maar dat ik nog apart de lock van de VM conf file moet halen en moet verwijderen en als ik een VM verwijderde dat de disks van deze VM’s niet verwijderd werden.
Storage
Voor Storage heb ik 2 verschillende oplossingen.
TrueNAS Ik heb TrueNAS voor mijn back ups van PBS (Proxmox Back Up Server) & hier is ook de vault van mijn Hyper back up. Ik heb nog wat uitzoekwerk te doen om truenas in de vingers te krijgen maar de delen die ik al heb lukken goed.
Synology: Mijn Synology NAS gebruik ik voor archief doeleinde, storage voor sommige containers zoals Paperless, photo storage via Synology Photos & Back ups van mijn Office 365 omgeving (OneDrive, SharePoint & mail)
Containers
Je zou denken dat mijn containers rechtstreeks op mijn PVE host draaien maar dat doen ze natuurlijk niet. Ik draai mijn containers in een ubuntu VM met docker. Docker lijkt praktisch de standaard te zijn. Hier is veel vraag naar. Ik heb ondertussen ook al de meeste van mijn services ondergebracht in een container waardoor ik echt bijna geen VM’s meer heb draaien. Ik draai al mijn containers op één host. Dit maakt communicatie tussen de verschillende containers net iets makkelijker.
De services die ik heb draaien via docker containers:
- Actual > budget applicatie
- Caddy > reverse proxy
- Gitea > git platform
- Mealie > kookboek web applicatie
- Paperless-ngx > document management
- Minecraft server > Ja, een Minecraft server
- FreshRSS > RSS reader
- Syncthing > File sync tool
- Grocy > Inventory voor het huishouden
- Apache > web server interne journal
- Bookstack > Documentatie voor het huishouden
- Bind9 > Interne DNS
- Navidrome > Muziek streamer
- Termix > Web based SSH client
- DDNS > Dynamic DNS
- Immich > photo hosting
Back ups
Back ups van mijn VM’s gebeuren via Proxmox Back up server (PBS). Er wordt elke avond een back up gemaakt van mijn VM’s. De PBS VM draait op mijn TrueNAS zodat ik niet heel die back up 2 keer over het netwerk moet sleuren.
De back ups van data die te maken hebben met Docker containers gebeuren via restic/ autorestic. Het voordeel van autorestic is dat de config via een yml file werkt en je dut geen volldig script moet schrijven. Je kan net zoals bij Ansible zien wat de yml file doet. Deze data word momenteel alleen maar gebacked up naar Hetzner. De compose files zelf worden opgeslagen in een git repo. De inhoud van mijn .env files sla ik op in mijn bitwarden.
Automation
server install:
De installatie van het server OS (Ubuntu server 24.04 LTS) gebeurd momenteel nog manueel. De algemne installatie (base) gebeurd momenteel via een zelf geschreven Ansible playbook. Een beknopte opsomming kan je hier onder vinden:
- upate apt repo
- creatie Ansible user
- toevoegen van public keys aan authorized_keys file
- toevoegen van sudoers file van Ansible user
- installaties van standaard packages
- net-tools
- unattended upgrades
- Qemu agent
- install cockpit, enable, start service & allow ports in ufw
- toevoegen cofig file voor het tonen van lijn nummers in nano
- toevoegen van custom sshd (limed access to server and disable password authentication)
- enable ufw and allow ssh access
- add config file unattended upgrades
Ik ben ook van plan voor deze of een andere playbook te maken die ik via Ansible pull kan laten lopen zodat als ik algemne config wijzigingen wil aanbrengen ik deze kan laten lopen via Ansible. Hier voor moet alleen nog eens opgesomd worden wat welke server catogorie nodig heeft.
Toekomst plannen:
De basis installatie van mijn servers gaat momenteel redelijk vanzelf. Ik ben ook aan het kijken of ik optermijn de installatie en configuratie van de programma’s kan automatiseren. Dit als ik ooit een server opnieuw moet opzetten van 0 of één extra nodig heb voor een reden dit kan gebeuren via Ansible. De installatie wizard voor het installeren van het OS zelf zou ik ook nog willen weg nemen zodat ik alleen nog de VM zelf zou moeten aanmaken en zelf dit zou misschien nog via Terraform misschien kunnen 😊. Als ik dan nog allemaal in semaphore krijg dan kan het via één klik.
Client install:
De installatie en configuratie van mijn laptop gaat momenteel ook redelijk automatisch via ansible pull. Ik heb een ansible playbook geschreven die alle programma’s installeert die ik gebruik en zo veel mogelijk config voor mij al uitvoert. Er word ook een cron job toegevoegd die om de 10 minuten gaat checken of er een commit is gebeurd op naar de main branch van mijn github repo. Als dit het geval is word de playbook uitgevoerd en dus de config uitgevoerd & installatie.
Reverse proxy
Als reverse proxy maak ik gebruik van Caddy. Dit is erg gebruiksvriendelijk. Deze proxy gebruik ik zowel voor services openbaar te maken naar de buitenwereld als voor intern, wat het leven toch een stukje makkelijker maakt. Er zijn maar een hand vol applicaties die beschikbaar zijn vanaf het internet. Dit omdat deze ook worden gebruikt door mensen binnen mijn familie. Ik heb via cloudflare ingesteld dat deze alleen beschikbaar zijn vanuit België. Dit om het een stuk veiliger te maken. Al de traffic naar mijn services worden ook geproxyed via cloudflare.
Voor vanaf mijn reverse proxy mijn containers te kunnen bereiken, heb ik een apart reverse proxy netwerk aangemaakt en daar alle web servers van mijn services in toegevoegd.
Monitoring
Ik heb gebruik gemaakt van Netdata maar hier was ik niet tevreden omdat dit cloudbased is en een naar mijn mening een te lage limiet had op het vlak van aantal hosts. Het ziet er wel mooi uit. Ik ben aan het plannen om over te stappen naar Zabbix. Hier heb ik al veel goede dingen over gelezen en het voldoet ook aan mijn vereisten.
Monitoren van:
- PVE
- Fortigate firewall
- VM’s
- Containers
- Switches
overige Services
Voor de rest zijn er niet erg veel online services die ik gebruik voor mijn home lab.
SMTP2Go: Ik gebruik dit voor het versturen van e-mails in mijn home lab. Zoals mijn NAS die elke nacht een email stuurt over de status van mijn back up. Op PBS hebt ik dit nog niet werkende gekregen. Hier ben ik wel met bezig.
Microsoft 365: Hier heb ik een Office 365 basic subscription. Ik maak vooral gebruik van Outlook, OneDrive & SharePoint. De rest gebruikte ik ervoor ook maar ik begin steeds meer & meer services zelf te hosten. Zoals van planner naar vikunja & OneNote naar Obsidian. OneDrive naar Nextcloud durf ik tot nu toe niet omdat ik geen off site back up heb voor mijn VM’s. Ik host ook verschillende shared mailboxen via exchange online. Het is altijd leuk om te zeggen aan de kassa dat ze mij mails mogen sturen naar spam@ of nieuwsbrief@ 😂.
Cloudflare: Zoals al eerder vermeld gebruik ik Cloudflare voor mijn DNS. Voor de services die geëxposed zijn naar het internet proxy ik al het verkeer via Cloudflare, zodat mijn WAN-IP niet te gemakkelijk te achterhalen is. Dit maakt het tevens mogelijk om aan de hand van Cloudflare security rules alle landen buiten België te blokkeren. Ook heb ik aan de hand van deze security rules AI crawlers geblokkeerd. Puur omdat het kan.
virtual machines (VM’s)
Voor mijn VM’s gebruik ik standaard Ubuntu server 24.04 LTS. Ik configureer ook standaard automatic security updates. Nano is toch ook altijd handig want VI ligt me niet echt 100%. De Qemu agent is ook altijd aanwezig, zo kan ik bepaalde gegevens uitlezen vanuit mijn VM’s. Mijn DNS is Bind9 hier ben ik erg tevreden van.
Mijn gebruikte VM’s zijn:
- Jump (VM ID 100)
- home-assistant (103)
- Unifi (VM ID 102)
- Docker03 (VM ID 109)
