Building Out My Network: VPS Experiments, ZeroTier Adventures, and New Uptime Monitoring
This past week has been a deep dive into rebuilding and reorganizing my personal network stack. Nothing corporate, nothing oversized, just a practical and slightly chaotic experiment: how far can I stretch cheap VPS instances, a mesh VPN, Cloudflare Tunnel, and a monitoring layer to create a globally accessible infrastructure that lives comfortably behind NAT, firewalls, and other constraints.
I took a forward-looking approach and rebuilt everything from the ground up. It wasn’t pretty, but it was fun.
The Why
I wanted resilient access to multiple nodes in different locations. Some of these machines sit behind ISP firewalls; others live on budget VPS hardware with throttled CPU and questionable disk I/O. Traditional port-forwarding becomes painful when half the endpoints don’t even have a routable IPv4.
So I combined three ingredients:
- ZeroTier for the overlay network
- Cloudflare Tunnel for global ingress
- Uptime Kuma for external monitoring
The result: a consistent, globally reachable mesh, even for nodes stuck behind CGNAT or IPv6-only environments.
The Network Stack
Each machine now runs two layers:
- ZeroTier Mesh Layer
- ZeroTier provides direct connectivity between nodes regardless of their physical network conditions. Even when a node is hiding behind carrier-grade NAT, it can still talk to others in the mesh without manual routing rules. It’s my private backbone.
- Cloudflare Tunnel Exposure Layer
- Where ZeroTier is inward-facing, Cloudflare Tunnel is the public-facing side. Every node exposes selected internal services via Cloudflare’s edge network, no open ports required. Even on VPS providers that block inbound traffic or impose strict rules, Cloudflare Tunnel punches through cleanly.
Combined, these two layers ensure that:
- Internal services communicate privately through the ZeroTier mesh.
- External access routes through Cloudflare’s global network.
- Everything stays accessible even when the underlying network is hostile, restrictive, or unstable.
The Nodes and Monitoring Pages
To keep track of availability, response times, and behavior across several regions, I set up multiple Uptime Kuma status pages:
- https://uptime.yonathan.id/status/jts-network
- https://uptime.yonathan.id/status/pdg-network
- https://uptime.yonathan.id/status/jtw-network
- https://uptime.yonathan.id/status/cloud-vps
These dashboards form the map of the network. They give a transparent view of uptime trends, outages, or ISP hiccups across all monitored nodes.
Cheap VPS Experiments
A big part of this build revolves around just how far inexpensive hardware can be pushed. I tested and benchmarked a few configurations to find a sweet spot for price-to-performance.
- VPS Type A
- 1 core
1 GB RAM
25 GB storage
IPv4
10 USD per year - A basic instance capable of running ZeroTier, Cloudflare Tunnel, lightweight Docker containers, and a small number of background services. Works best when tuned with swap optimization, lowered swappiness, and minimal overhead.
- 1 core
- VPS Type B
- 2 cores
1 GB RAM
50 GB storage
IPv6 only
12 USD per year - Surprisingly capable despite the lack of native IPv4. With Cloudflare Tunnel, IPv4 becomes irrelevant, and ZeroTier provides all the internal connectivity anyway. Ideal for static sites, sidecar services, and low-resource agents.
- 2 cores
Both of these VPS types are now integrated into the mesh and serve as edge nodes, relay points, or compute units depending on workload. They may not be fast, but they’re reliable enough to stay online 24/7.
Observations and Lessons Learned
- Cloudflare Tunnel completely neutralizes the problem of missing IPv4.
- ZeroTier still struggles with unstable ICMP-blocking networks; adding a relay-capable VPS helps significantly.
- VPS with 1 GB RAM benefits greatly from manual swap configuration and reduced swappiness.
- Even low-end virtual CPUs can sustain multiple small services as long as you avoid unnecessary load.
- Monitoring makes everything less mysterious. You can see which region has packet loss, which node is lagging, and which ISP decides to misbehave at 3 a.m.
Closing Thoughts
This entire setup wasn’t about perfection. It was about building something distributed, lightweight, fault-tolerant, and absurdly cost-effective. It proves that you don’t need enterprise budgets or proprietary tools to run a respectable global network.
ZeroTier ensures the nodes talk to each other.
Cloudflare Tunnel ensures the world can talk to the services.
Uptime Kuma ensures I know when things get cranky.
Cheap VPS instances ensure the whole operation costs less than a cup of coffee per month.
It’s messy, but it works. And it’s flexible enough that I can keep expanding it whenever I feel like pushing the limits again.
Member discussion