this post was submitted on 15 Aug 2026
41 points (95.6% liked)

Selfhosted

61978 readers
1255 users here now

A place to share alternatives to popular online services that can be self-hosted without giving up privacy or locking you into a service you don't control.

Rules:

Detailed Rules Post

  1. Be civil.

  2. No spam.

  3. Posts are to be related to self-hosting.

  4. Don't duplicate the full text of your blog or readme if you're providing a link.

  5. Submission headline should match the article title.

  6. No trolling.

  7. Promotion posts require active participation, with an account that is at least 30 days old. F/LOSS without a paywall has exceptions, with requirements. See the rules link for details. Tags [CBH] or [AIP] are required, see the links in Rule 8 for details.

  8. AI-related discussions and AI-involved promotional posts have additional requirements for tagging, as noted in Rule 7 and the AI & Promotional Post Expanded Rules post, and find example disclosures here.

Resources:

Any issues on the community? Report it using the report flag.

Questions? DM the mods!

founded 3 years ago
MODERATORS
 

I've been using Linux for decades, I've worked as a software engineer/architect/sre for around a decade, but networking has always been my biggest gap in knowledge.

I have a local server, I have caddy spun up, a glinet router running their version of openwrt, and I have a domain name purchased through porkbun.

I am looking to setup "local.domain.com" to point to my local server, ideally without exposing it publicly, and enable devices on my home network to be able to access it from that url. Id also like to be able to access containers running on that server by something like "searxng.local.domain.com" or "local.domain.com/searxng" aka without using the port suffix. Id also like to enable https.

I have read so many guides that have fragments of what I need, but nothing that ties enough together to get it working. And with all the options around different domain registers, let's encrypt, reverse proxies, etc, im struggling just a bit.

Are their any guides (prefer text over YouTube, but beggars cant be choosers) that people recommend that encompass the whole process, instead of just pieces? Id like to understand it instead of just fumble through it.

you are viewing a single comment's thread
view the rest of the comments
[–] d13@programming.dev 20 points 3 weeks ago* (last edited 3 weeks ago) (2 children)

Lots of overcomplicated answers, imo.

Here's what I did:

  1. Set up a DNS server (I just used Pi Hole docker)
  2. Tell router to use the DNS server
  3. Register domain
  4. Set up Caddy with https to use DNS challenge with registrar's API key for Let's Encrypt or similar.
  5. Add subdomain DNS entries to the DNS server for each service. The records point to Caddy's IP (e.g. jellyfin..com)
  6. Add each container to Caddy's list

Now every device at home can hit all services by domain name over https. No need for any manual configuration on any client device (certs, hosts, etc.)

Bonus: Set up split DNS and subnet routing with Tailscale so that it uses the DNS server for that domain. Now any device connecting to the tailnet can connect to the services just like at home. No need to reconfigure apps, etc.

Simple and it works like magic.

[–] dabe@lemmy.zip 4 points 3 weeks ago* (last edited 3 weeks ago)

This is the way. Been running (basically) this for years and genuinely keep my eye out for any simpler suggestions, but nothing comes close.

I do it slightly different where I use an external DNS (bunny) and point the A records to the tailscale IP of the server running Caddy.

The benefits are:

  • I don't force the whole house to rely on my local DNS setup.
  • Nothing breaks when I change routers and mess up IP mappings (which I was doing a lot, but I finally got some nice unifi equipment, so maybe I don't have to worry about that anymore).
  • I don't "leak my LAN configuration" to public DNS but I don't care about that anymore.
  • I can use Tailscale DNS override if I want just my tailnet devices to go through some private/premium DNS resolver.
  • Don't need to set up subnet routing in Tailscale

The downside is it doesn't work at all for devices not on Tailscale. Real bummer when, like, I want my smart TV to just be able to find jellyfin on my LAN with the same domain names. But everything else about it is very convenient.

[–] 123@programming.dev 4 points 3 weeks ago

To further simplify.

For step 1+2 , the router might have a built in DNS resolver which would eliminate the need to maintain another container or service.

For step 5, depending in the router software, with a single target (e.g. a nas running docker services) you might also be able to add a wildcard rule to catch any query for *.local.domain.com to resolve to that machine. This would simplify adding things in the future as the only thing remaining would be the caddy config.