this post was submitted on 24 Aug 2023
2 points (100.0% liked)

Selfhosted

39964 readers
403 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:

  1. Be civil: we're here to support and learn from one another. Insults won't be tolerated. Flame wars are frowned upon.

  2. No spam posting.

  3. Posts have to be centered around self-hosting. There are other communities for discussing hardware or home computing. If it's not obvious why your post topic revolves around selfhosting, please include details to make it clear.

  4. Don't duplicate the full text of your blog or github here. Just post the link for folks to click.

  5. Submission headline should match the article title (don’t cherry-pick information from the title to fit your agenda).

  6. No trolling.

Resources:

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

Questions? DM the mods!

founded 1 year ago
MODERATORS
 

[SOLVED] I had to open ports 80 and 443 (maybe 1 was enough, idk) while renewing certs ! Now its time to learn how to do it without opening ports (:

Hey guys, I have nginx proxy manager running in docker container on my home server. I don't have any ports open (other than wireguard) and I was using custom local domain .tride to access my services. Everything works fine, I can use https://portainer.tride, https://homeassistant.tride, etc.

I want to get rid of warnings about the risk that I have to accept to continue. Not a big deal for Firefox on desktop, but its kinda annoying on Android. Also I think it stops me from using some services that require SSL certs (like floccus). I tried to create a LetsEncrypt certificate using DNS challenge and DuckDNS in NPM. I also tried to download certs and import to Android, CA cert is added successfully, but didn't work.

Now I bought example.com domain from porkbun.com and trying to set it up:

  1. Created CNAME on porkbun - *.example.com pointing to my example.duckdns.org
  2. Created cert using same procedure (DNS challenge and DuckDNS in NPM) with hosts *.example.com and example.com
  3. Created Local DNS records in PiHole

Now I get strange behavior, sometimes I can open portainer.example.com with no problem, no warning, perfect. Then sometimes it doesn't load at all and it says "Server Not Found". Some services open normally, but like bookstack.example.com opens broken page and if I click anywhere it redirects me to my old bookstack.tride (still exists in NPM and PiHole) and asking to accept the risk.

I'm trying to use services from local network or wireguard only, at least for now.

I am also using the same domain for my e-mail at mailbox.org if that matters. Not sure what I'm doing wrong, but I'm sure there is something. I'm happy to listen any suggestion, and sorry for being noob <3

you are viewing a single comment's thread
view the rest of the comments
[–] [email protected] 1 points 1 year ago (1 children)

Thank you! It does support porkbun, but I don't have any "porkbun service" running on my server, but I do have duckdns (using it for VPN). Is that kind of service even necessary here? I tried using porkbun api key and it didn't help, but opening ports did. I opened ports 80 and 443 and closed them after cert (with duckdns challenge tho). Also I made A record *.example on porkbun, seems better for my needs.

You can have public dns records point to an internal ip.

I tried pointing *.example.com to my local IP 192.168.0.40 but porkbun doesn't allow me that, maybe I misunderstood this part. I sorted out the problem, thank you anyway <3

[–] [email protected] 2 points 1 year ago* (last edited 1 year ago) (1 children)

So the opening of ports works, but it's not the most secure or best way to do it imo.. what happens is the certbot registers with letsencrypts api and attempts to request a cert via http challenge, it then hosts a small website with a code from letsencrypt to prove that you do in fact own the domain and are who you say you are. Let's encrypt then goes to the url, verifies it sees the text, and issues a cert to the certbot. The problem here is you have to open these ports to the internet, and they need to be open when certificates are renewed (let's encrypt only issues a 90 day cert).. if you want to leave those ports open that's not exactly a safe practice, and manually doing it every 3 months is less than ideal..

With dns challenge, the certbot uses the api of your dns provider (cloudflare or porkbun), the process is similar, it talks with letsencrypt, let's encrypt gives it a string and a dns record it expects to see, then certbot talks to your dns, makes a txt record with the string provided, then let's encrypt checks for that dns record, if it finds it, it issues a cert to the certbot. In this scenario, certbot is connecting out to your dns provider and making the record for you, no opening of ports. And if you leave the api key active, it will auto renew on a schedule so you don't have to really worry about it.

I highly recommend looking into dns challenge some more, watch some videos on it there are lots on YouTube.

As for the dns record, not sure if it's not allowing the wildcard record or what but I wouldn't use *.example.com, make an entry for the actual host/service you are hosting, like portainer.example.com.

[–] [email protected] 1 points 1 year ago (1 children)

Thank you for explaining this, its much more clear now. I'll definitely look more into dns challenge and hopefully be ready before next renewal :D Have a nice day mate

[–] [email protected] 1 points 1 year ago (1 children)

here is a good video on how to do it: https://piped.video/watch?v=qlcVx-k-02E

pretty much exactly what you're trying to do.

[–] [email protected] 1 points 1 year ago

Oh amazing, this is exactly what I need! Im gonna try it today. Thank you again ❤️