I have been running a personal VPN for about two years now and the complexity has slowly grown. I will describe my current setup and I am curious how others have solved similar problems.
Current topology:
- Hub: 2 vCPU / 2GB VM at OVHcloud (KVM, not that OpenVZ nonsense—virtualization tax on OpenVZ is unacceptable for custom kernels)
- Spokes: three home routers, one laptop, one phone
- All spokes connect to hub, no spoke-to-spoke
The hub runs Debian with WireGuard in kernel module. I use iptables for forwarding, not nftables yet. Each spoke has its own /24 from 10.200.0.0/16. I static route everything through the hub because I want to filter at one point.
Problems I see:
- Hairpin latency when two home networks want to talk (traffic goes to OVHcloud and back)
- Hub is single point of failure
- I am paying for bandwidth I do not use most of the time
I considered full mesh but that is 10 tunnels to manage and my phone battery would suffer. I considered two hubs in different regions but then I need some way to sync WireGuard keys and firewall rules.
What do you run? Is anyone doing actual dynamic routing over WireGuard, or is that overkill for personal use? I am specifically interested if anyone has gotten BGP working at low-end price points without burning through the CPU quota.