Klik hier voor informatie over de wijziging in de levering van diensten en ondersteuning.

Een portable hostingarchitectuur

sufyan-Waxe7Mv9QVw-unsplash--1080

Al ruim een jaar loop ik met een idee rond: een hostingoplossing die ik zonder gedoe meerdere keren kan uitrollen en die gewoon werkt --- ook achter een internetverbinding met een dynamisch IP-adres of zelfs Carrier-Grade NAT (CGNAT). Geen vast IP, geen inkomende poorten en toch volledige controle over je eigen web- en mailserver.

Het uitgangspunt was verrassend eenvoudig: laat een virtuele machine zelf een WireGuard-tunnel opzetten naar een goedkope VPS en gebruik die VPS als vast publiek eindpunt. Alle inkomende verbindingen worden transparant doorgestuurd naar de VM, terwijl de VM zelf overal kan draaien: in een thuislab, op kantoor of achter vrijwel iedere internetverbinding.

In de praktijk bleek de techniek een stuk uitdagender dan het idee. Om de oorspronkelijke client-IP-adressen te behouden, SYN-floods af te vangen vóór de tunnel en retourverkeer correct terug te sturen zonder masquerading, moest een combinatie van WireGuard, DNAT, SYNPROXY, conntrack, CONNMARK en policy routing samenwerken.

Van idee naar werkende opzet

Inmiddels draait deze architectuur in de praktijk en host ik er op experimentele basis websites en maildiensten mee.

De belangrijkste eigenschappen zijn:

  • Het originele IP-adres van bezoekers blijft behouden. Dankzij transparante DNAT zonder masquerading ziet de backend het echte bronadres. Webservers, mailservers, logging en Fail2Ban werken daardoor alsof de server rechtstreeks op internet is aangesloten.
  • SYNPROXY beschermt de publieke voordeur. Halfopen verbindingen en SYN-floods worden op de VPS afgehandeld voordat er verkeer door de WireGuard-tunnel gaat.
  • Retourverkeer volgt automatisch dezelfde route terug. Met CONNMARK en policy routing blijft de verbinding symmetrisch zonder dat source NAT nodig is.
  • IPv4 én IPv6 worden op dezelfde manier ondersteund.
  • De backend is verplaatsbaar. Zolang de VM een uitgaande verbinding naar de VPS kan maken, blijft dezelfde publieke IPv4- en IPv6-identiteit beschikbaar.

Waarom niet gewoon Tailscale of een Cloudflare Tunnel?

Dat is een terechte vraag. Beide oplossingen lossen het probleem van CGNAT uitstekend op doordat ook zij een uitgaande verbinding opzetten.

Mijn doel was echter iets anders.

Ik wilde volledig begrijpen wat er op netwerkniveau gebeurt en geen afhankelijkheid hebben van een externe dienst. Deze opstelling werkt bovendien transparant op TCP-niveau en is daardoor niet beperkt tot HTTP(S). Websites, SMTP, IMAP en andere TCP-gebaseerde diensten kunnen dezelfde infrastructuur gebruiken zonder applicatiespecifieke aanpassingen.

Een ander belangrijk verschil is dat de backend het oorspronkelijke client-IP rechtstreeks in het IP-pakket ontvangt. Er is geen reverse proxy die headers zoals X-Forwarded-For of CF-Connecting-IP toevoegt; logging, toegangscontrole en Fail2Ban werken daardoor volledig op basis van de originele netwerkverbinding.

Daar staat tegenover dat ik alles zelf moet bouwen en onderhouden. Diensten als Cloudflare bieden DDoS-bescherming op een schaal die ik met een VPS en SYNPROXY niet kan evenaren. Wie snel een interne webapplicatie wil publiceren, is waarschijnlijk beter af met een kant-en-klare oplossing.

Waar dit uiteindelijk om draait

Het interessante aan deze opzet is niet WireGuard zelf, maar de scheiding tussen de publieke netwerkidentiteit en de fysieke locatie van de server.

De VPS bezit het publieke IPv4- en IPv6-adres en vormt een permanent bereikbaar eindpunt. De backend kan ondertussen zonder wijzigingen worden verplaatst naar een andere internetverbinding, een andere locatie of zelfs achter CGNAT. DNS-records blijven ongewijzigd en bezoekers merken niets van de verhuizing.

Dat maakt deze architectuur geschikt als experimenteel platform voor verplaatsbare zelfhosting.

Er zijn nog genoeg verbeteringen mogelijk en het project is nadrukkelijk een work in progress, maar de basis werkt inmiddels betrouwbaar genoeg om er echte websites en maildiensten op te draaien.

Testpagina

De huidige demonstratie draait op https://tethered.gigabitjes.nl.

Neem gerust een kijkje. Misschien verschijnt jouw IP-adres binnenkort in mijn access logs. 😸

Previous Post