‹ Sid Verma

Tags / Programming


I have a nice little computer in my house which hosts a bunch of services I use. It sits behind a NAT, so I can’t connect directly to it via my public IP address. Hence, I use a cheap cloud instance on DigitalOcean to act as the gateway for my home-server to the internet.

My previous setup was basically a VPN tunnel between a cloud server and my home server, where the cloud server forwarded TCP traffic to my home server, which served all my services.

Lately, I’ve been rebuilding this infrastructure, and one of the things I was due for, is to have all my devices (my cloud server, home server, laptop, phone, etc) connected to each other all the time. Also, it needed to be in a mesh instead of hub-and-spoke, as there was no need for data to go over the internet if I’m home, on the same physical network as my home-server.

I spent a good amount of time trying out a bunch of methods, until settling on one. This post runs through all the options I found, and why I chose what I chose. I won’t go into how to set it up - there should be plenty of articles and documentation on the internet. TLDR: I now use tailscale with a headscale server.

Post #1 in the Meta:Programming series.

I’m hoping to write a blog series for my younger self. He is someone who used to look at a service and say - “I could build that over a weekend”. This is also someone who would look at a company with a small product, which rarely gets any new features, and wonder why that product needs 10 developers working fulltime on it.

I don’t plan on writing about the philosophical aspects of those questions. Maybe the weekend hack would come out better. Maybe that company is bad at resource utilization. Maybe capitalism is the root of all evil. I am taking the current state and processes at face value, and try to commentate on how and why this usually comes to be.

I hope that these posts don’t require a lot of technical knowledge, and are easily readable by beginners, or maybe non-technical folk.

  1. Decision making while writing software

Do keep in mind that these articles are restricted by my experience and perspective. If you feel that I might be wrong somewhere or am missing something important, feel free to suggest updates. The good thing about writing on the internet is that I can always update my old content.

Next : Decision making while writing software

« Older posts Newer posts »