I’ve been thinking about finally getting myself a proper domain for my server, but a friend told me that to get one I either need a VPS with a public ip (which just takes all the fun out of selfhosting) or purchase a static ip, which is beyond what I’m willing to spend for a hobby. Do I have any good options or should I just let it go?
Also, if this isn’t the correct community for this, I’d appreciate being pointed to the right one, thank you
Update: after reading the comments the two main options I’m considering now are either a cheap VPS to use as proxy for my network via wireguard, or DynamicDNS. I’ll see if I can figure out the rest from here, thank you!
I have the VPS setup, and it’s not bad at all, I pay 3.99 a month and it acts as a gateway into my network filtering any malicious ip by using crowdsec.
I use Pangolin reverse proxy, but you can also use netbird.
I prefer this because on top of the routing options it ads extra security and lets me share subdomains with friends and family without exposing my network to the internet
I have a domain, but all I use it for so far is email (with an email provider, not my own mail server, hosted locally or otherwise). I’d still call that “usable,” though.
I started with dynamic DNS on my home server, then moved to an encrypted tunnel. the issue with ddns is that your provider may block your ports. Mine eventually blocked 80, 443, and the wire guard port.
When I switched to tunnels, with cloudflare as my provider, there was nothing my provider could do about it.
So, I’d recommend tunnels since many providers don’t want residential users hosting servers.
If you already have a domain name and don’t want to switch to something else, know that some DNS registrar have an API to handle the domains. For a short period of time I had to rely on this and had a little python script to get my current IP and apply it to every A record in my DNS zone.
It worked well (but then Itook an arrow in the kneehad static IP)Yeah I still do this. I have a cronjob on one of my servers that runs every five minutes, checks if the upstream DNS IP matches my public IP and, if not, sets it. Adding 60s TTL, this means an average downtime of 3 minutes per change, max 6 minutes.
It’s also possible to use different nameservers than the one the registrar provides, in case the registrar doesn’t have a proper API for DNS.

My dynamic IP rarely changes. When it does, it gets updated by a Docker favonia/cloudflare-ddns image. I have yet to notice downtime.
I’ve been self hosting for 20 years with the same domain(s) and have never owned a static IP. Use a reliable DNS service with simple update tools (curl on a cron job for example).
I believe cloudflare has some sort of tunneling option but I’ve never really looked into it, it might get around that.
It does, yeah. If you aren’t averse to cloudflare then it’s a great option.
From memory I think it’s limited to http/https traffic, but that’s normally not an issue, just have all your services behind a reverse proxy.
I run a variety of self hosted things via my domain on a dynamic IP. I just have dynamic dns set up to check my current public IP periodically, and update the dns entry if it changes.
Our setup uses a domain pointed at a dynamic (but stable) IP with a script to update it periodically
Sure, you can just use your home wifi. Some of them are static, and others don’t change really often, like once a month, so dyndns will work well. You could also use cloudflared that is a proxy you can use even if you can’t open your ports
It is possible to use a dynamic DNS service. They’re typically pretty cheap. I did for several years. It kind of sucked so I rented a VPS.
In what way did it suck?
Keeping hardware running 24/7 cheaply is difficult. Expanding an existing setup is expensive. Consumer grade ISP’s will block unexpected network protocols sometimes seemingly for no reason. Dynamic DNS isn’t super robust, so several times I went on vacation and the DNS service would flake. Maybe it’s better if you pay more for it, but I have no complaints about my VPS. It’s nice to be able to just reliably reach my web stuff and not worry a cat bumped the power cable.
I use OVH for all things DNS, TIL: they have a dynhost thing that will do all the DNS updating for you!
https://help.ovhcloud.com/csm/en-gb-dns-dynhost?id=kb_article_view&sysparm_article=KB0051640
What are you asking? You can just buy a domain whenever you want. You can use it on your server without a VPS or static IP.
Are you asking us how to make your services reachable at that domain publicly over the internet?
You don’t have any great options but you do have some options. You’ll need dynamic DNS, which you can get for free by various providers. This will manage a “dynamic” DNS entry for your occasionally changing, non-static IP at home. The dynamic DNS entry won’t be on your own domain name, it will be on the provider’s domain name. But wait! That’s just step one.
You can still get your own, fully-functional domain name, and you can have all the domains and subdomains you want, and set them up however you want, with one important restriction: You can’t use IP addresses (because yours is dynamic, and changes all the time and you would have to be constantly updating your domain every time it does, and there would be delays and downtime while everything gets updated).
Instead, your personal domains have to use CNAME records. This substitutes the IP from a different domain INTO your domain. So you CNAME every entry on your own fancy domains to point at your dynamic DNS provider, which manages the dynamic part of the problem for you and always gives the real IP you need. Nobody sees the dynamic DNS name, it’s there, but it’s happening behind the scenes, they still see your fancy personalized domain names.
It’s still not going to be perfect, it won’t work well or at all for certain services like email hosting (self-hosting this is not for the faint of heart anyway) that are very strict about how their DNS and IP addresses need to be set up, but it will likely be good enough for 99% of the stuff you want to self-host.









