[GH-ISSUE #5450] Feature Request: Add Let's Encrypt / ACME DNS challenge (DNS-01) support to the Proxy container. #11228

Open
opened 2026-08-05 01:28:59 -04:00 by saavagebueno · 22 comments
Owner

Originally created by @heymoe on GitHub (Feb 25, 2026).
Original GitHub issue: https://github.com/netbirdio/netbird/issues/5450

Is your feature request related to a problem? Please describe.

There could be a deployment scenario where one might not have the ability to make the needed changes to satisfy the requirements to allow the currently supported "tls-alpn-01" and "http-01" challenge methods to be successful. An example might be having an upstream firewall that you don't have to ability to manage that is blocking the inbound ACME connections that are trying to do the verification. Having the ability to use the DNS challenge method (dns-01) would provide an alternative method of getting SSL certs issued.

Updating the Traefik container to use the DNS challenge method was pretty simple. For example to enable DNS challenge using Cloudflare you would modify the commands section in the docker-compose.yml for the Traefik container like so:

#      - "--certificatesresolvers.letsencrypt.acme.tlschallenge=true"
      - "--certificatesresolvers.letsencrypt.acme.dnsChallenge=true"
      - "--certificatesresolvers.letsencrypt.acme.dnsChallenge.provider=cloudflare"
      - "--certificatesresolvers.letsencrypt.acme.dnsChallenge.resolvers=1.1.1.1:53,1.0.0.1:53"

and then add the necessary environment variables required for the specific DNS provider:

    environment:
      - CF_API_EMAIL=<email address>
      - CF_DNS_API_TOKEN=<your token>

There doesn't seem to be a way to make similar changes for the proxy container.

Describe the solution you'd like

Enable the ability to configure use the ACME DNS challenge methods in addition to the already supported "tls-alpn-01" and "http-01" methods. I could see this being implemented by adding 2 additional NB_PROXY environmental variable to configure the DNS challenge (e.g: NB_PROXY_ACME_DNS_CHALLENGE_PROVIDER and NB_PROXY_ACME_DNS_CHALLENGE_RESOLVERS) which can set set as needed in the proxy.env file as well as adding the DNS provider specific variables to the proxy.env file too.

Describe alternatives you've considered

none at the moment

Additional context

none at the moment

Originally created by @heymoe on GitHub (Feb 25, 2026). Original GitHub issue: https://github.com/netbirdio/netbird/issues/5450 **Is your feature request related to a problem? Please describe.** There could be a deployment scenario where one might not have the ability to make the needed changes to satisfy the requirements to allow the currently supported "tls-alpn-01" and "http-01" challenge methods to be successful. An example might be having an upstream firewall that you don't have to ability to manage that is blocking the inbound ACME connections that are trying to do the verification. Having the ability to use the DNS challenge method (dns-01) would provide an alternative method of getting SSL certs issued. Updating the Traefik container to use the DNS challenge method was pretty simple. For example to enable DNS challenge using Cloudflare you would modify the commands section in the docker-compose.yml for the Traefik container like so: ``` # - "--certificatesresolvers.letsencrypt.acme.tlschallenge=true" - "--certificatesresolvers.letsencrypt.acme.dnsChallenge=true" - "--certificatesresolvers.letsencrypt.acme.dnsChallenge.provider=cloudflare" - "--certificatesresolvers.letsencrypt.acme.dnsChallenge.resolvers=1.1.1.1:53,1.0.0.1:53" ``` and then add the necessary environment variables required for the specific DNS provider: ``` environment: - CF_API_EMAIL=<email address> - CF_DNS_API_TOKEN=<your token> ``` There doesn't seem to be a way to make similar changes for the proxy container. **Describe the solution you'd like** Enable the ability to configure use the ACME DNS challenge methods in addition to the already supported "tls-alpn-01" and "http-01" methods. I could see this being implemented by adding 2 additional NB_PROXY environmental variable to configure the DNS challenge (e.g: NB_PROXY_ACME_DNS_CHALLENGE_PROVIDER and NB_PROXY_ACME_DNS_CHALLENGE_RESOLVERS) which can set set as needed in the proxy.env file as well as adding the DNS provider specific variables to the proxy.env file too. **Describe alternatives you've considered** none at the moment **Additional context** none at the moment
saavagebueno added the feature-request label 2026-08-05 01:28:59 -04:00
Author
Owner

@ghazyami commented on GitHub (Feb 25, 2026):

I would prefer dns-01 as well

<!-- gh-comment-id:3962156320 --> @ghazyami commented on GitHub (Feb 25, 2026): I would prefer `dns-01` as well
Author
Owner

@Dalewn commented on GitHub (Feb 26, 2026):

I hit the same roadblock trying to get the proxy to work. This would be a nice feature!

<!-- gh-comment-id:3968375021 --> @Dalewn commented on GitHub (Feb 26, 2026): I hit the same roadblock trying to get the proxy to work. This would be a nice feature!
Author
Owner

@werlitong commented on GitHub (Mar 1, 2026):

i managed to get dns-1 working by setting NB_PROXY_ACME_CERTIFICATES to false and letting traefik generate those certificates. In order to netbird-proxy service get the certificates i pull the acme.json and extract both tls.cert and tls.key.

so the proxy.env will be something like:
NB_PROXY_ACME_CERTIFICATES=false
NB_PROXY_CERTIFICATE_FILE=tls.crt
NB_PROXY_CERTIFICATE_KEY_FILE=tls.key
NB_PROXY_CERTIFICATE_DIRECTORY=/certs/your-proxy-domain.tld

i've also migrated my old netbird deploy with caddy to traefik, so i've added these cmd lines to traefik section in docker-compose.yml:

     volumes:
      [...]
      - traefik_letsencrypt:/letsencrypt
     command:
       [...]
       # Let's Encrypt via DNS-01 Cloudflare
       - "--certificatesresolvers.letsencrypt.acme.email=your-user@your-domain.tld"
       - "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
       - "--certificatesresolvers.letsencrypt.acme.dnschallenge=true"
       - "--certificatesresolvers.letsencrypt.acme.dnschallenge.provider=cloudflare"
       - "--certificatesresolvers.letsencrypt.acme.dnschallenge.resolvers=1.1.1.1:53,8.8.8.8:53"
     environment:
       - CF_DNS_API_TOKEN=${CF_DNS_API_TOKEN}

also add a cert-dumper to docker-compose.yml, this guy will use traefik volume and then he will run a script too dump the cert and key from the acme.json (stored in traefik's volume).

  certs-dumper:
    image: python:3-alpine
    container_name: certs-dumper
    restart: unless-stopped
    entrypoint: sh -c 'python3 /scripts/dump.py'
    volumes:
      - traefik_letsencrypt:/letsencrypt:ro
      - netbird_proxy_certs:/output
      - ./certs-dump.py:/scripts/dump.py:ro
    networks: [netbird]
    logging:
      driver: "json-file"
      options:
        max-size: "500m"
        max-file: "2"
# certs-dump.py
import json, base64, os, time, hashlib

ACME = "/letsencrypt/acme.json"
DOMAIN = "your-proxy-domain.tld"
OUT = f"/output/{DOMAIN}"
last_hash = None

os.makedirs(OUT, exist_ok=True)

while True:
    try:
        with open(ACME) as f:
            raw = f.read()
        h = hashlib.md5(raw.encode()).hexdigest()
        if h != last_hash:
            data = json.loads(raw)
            for cert in data.get("letsencrypt", {}).get("Certificates", []):
                if cert["domain"]["main"] == DOMAIN:
                    crt = base64.b64decode(cert["certificate"])
                    key = base64.b64decode(cert["key"])
                    if len(crt) > 100 and len(key) > 100:
                        open(f"{OUT}/tls.crt", "wb").write(crt)
                        open(f"{OUT}/tls.key", "wb").write(key)
                        print(f"[OK] Cert: {len(crt)}B crt, {len(key)}B key", flush=True)
            last_hash = h
    except Exception as e:
        print(f"[ERR] {e}", flush=True)
    time.sleep(60)
<!-- gh-comment-id:3980853001 --> @werlitong commented on GitHub (Mar 1, 2026): i managed to get dns-1 working by setting NB_PROXY_ACME_CERTIFICATES to false and letting traefik generate those certificates. In order to netbird-proxy service get the certificates i pull the acme.json and extract both tls.cert and tls.key. so the proxy.env will be something like: NB_PROXY_ACME_CERTIFICATES=false NB_PROXY_CERTIFICATE_FILE=tls.crt NB_PROXY_CERTIFICATE_KEY_FILE=tls.key NB_PROXY_CERTIFICATE_DIRECTORY=/certs/your-proxy-domain.tld i've also migrated my old netbird deploy with caddy to traefik, so i've added these cmd lines to traefik section in docker-compose.yml: ``` volumes: [...] - traefik_letsencrypt:/letsencrypt command: [...] # Let's Encrypt via DNS-01 Cloudflare - "--certificatesresolvers.letsencrypt.acme.email=your-user@your-domain.tld" - "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json" - "--certificatesresolvers.letsencrypt.acme.dnschallenge=true" - "--certificatesresolvers.letsencrypt.acme.dnschallenge.provider=cloudflare" - "--certificatesresolvers.letsencrypt.acme.dnschallenge.resolvers=1.1.1.1:53,8.8.8.8:53" environment: - CF_DNS_API_TOKEN=${CF_DNS_API_TOKEN} ``` also add a cert-dumper to docker-compose.yml, this guy will use traefik volume and then he will run a script too dump the cert and key from the acme.json (stored in traefik's volume). ``` certs-dumper: image: python:3-alpine container_name: certs-dumper restart: unless-stopped entrypoint: sh -c 'python3 /scripts/dump.py' volumes: - traefik_letsencrypt:/letsencrypt:ro - netbird_proxy_certs:/output - ./certs-dump.py:/scripts/dump.py:ro networks: [netbird] logging: driver: "json-file" options: max-size: "500m" max-file: "2" ``` ```python # certs-dump.py import json, base64, os, time, hashlib ACME = "/letsencrypt/acme.json" DOMAIN = "your-proxy-domain.tld" OUT = f"/output/{DOMAIN}" last_hash = None os.makedirs(OUT, exist_ok=True) while True: try: with open(ACME) as f: raw = f.read() h = hashlib.md5(raw.encode()).hexdigest() if h != last_hash: data = json.loads(raw) for cert in data.get("letsencrypt", {}).get("Certificates", []): if cert["domain"]["main"] == DOMAIN: crt = base64.b64decode(cert["certificate"]) key = base64.b64decode(cert["key"]) if len(crt) > 100 and len(key) > 100: open(f"{OUT}/tls.crt", "wb").write(crt) open(f"{OUT}/tls.key", "wb").write(key) print(f"[OK] Cert: {len(crt)}B crt, {len(key)}B key", flush=True) last_hash = h except Exception as e: print(f"[ERR] {e}", flush=True) time.sleep(60) ```
Author
Owner

@renne commented on GitHub (Mar 12, 2026):

LEGO can be integrated into the Netbird reverse-proxy for the ACME DNS01-challenge.

<!-- gh-comment-id:4047788682 --> @renne commented on GitHub (Mar 12, 2026): [LEGO](https://github.com/go-acme/lego) can be integrated into the Netbird reverse-proxy for the ACME DNS01-challenge.
Author
Owner

@GEAR-IT-UP commented on GitHub (Mar 12, 2026):

was hoping this would be added as the DNS-01 challenge as the OP says, means all instances and records can be proxied fully behind the provider, thus not exposing the origin IP address (in this case a home lab). Hopefully this is something that is added soon/when the reverse proxy intergration is considered stable

<!-- gh-comment-id:4051778533 --> @GEAR-IT-UP commented on GitHub (Mar 12, 2026): was hoping this would be added as the DNS-01 challenge as the OP says, means all instances and records can be proxied fully behind the provider, thus not exposing the origin IP address (in this case a home lab). Hopefully this is something that is added soon/when the reverse proxy intergration is considered stable
Author
Owner

@wolfnacht44 commented on GitHub (Mar 22, 2026):

+1 on DNS-01 Challenges as well.
Bonus points for allowing it to be done with in the dashboard.

<!-- gh-comment-id:4105653886 --> @wolfnacht44 commented on GitHub (Mar 22, 2026): +1 on DNS-01 Challenges as well. Bonus points for allowing it to be done with in the dashboard.
Author
Owner

@SamB-GB commented on GitHub (Apr 1, 2026):

+1 for DNS-01 challenge

<!-- gh-comment-id:4173115266 --> @SamB-GB commented on GitHub (Apr 1, 2026): +1 for DNS-01 challenge
Author
Owner

@kejar31 commented on GitHub (Apr 5, 2026):

Yes, please… I would love to be able to geo block everything other than my country but you can’t do that with TLS-ALPN-01 as letsencrypt doesn’t and shouldn’t list their ip address or regions.. using DNS-01 solves this

<!-- gh-comment-id:4189377660 --> @kejar31 commented on GitHub (Apr 5, 2026): Yes, please… I would love to be able to geo block everything other than my country but you can’t do that with TLS-ALPN-01 as letsencrypt doesn’t and shouldn’t list their ip address or regions.. using DNS-01 solves this
Author
Owner

@kejar31 commented on GitHub (Apr 5, 2026):

While native DNS-01 support in the proxy would be ideal, there's a working workaround today using the wildcard certificate feature merged in #5583 (NB_PROXY_WILDCARD_CERT_DIR).

The approach: Use Traefik (already in the NetBird Docker stack) to issue a wildcard cert via DNS-01, extract it to PEM files, and point netbird-proxy at the directory. The proxy serves the wildcard cert for all matching domains and skips ACME entirely.

Step 1 — Enable DNS-01 in Traefik

As the original poster noted, enabling DNS-01 in Traefik is straightforward. In docker-compose.yml:

# Comment out tls challenge
# - "--certificatesresolvers.letsencrypt.acme.tlschallenge=true"

# Add DNS challenge
- "--certificatesresolvers.letsencrypt.acme.dnschallenge=true"
- "--certificatesresolvers.letsencrypt.acme.dnschallenge.provider=cloudflare"
- "--certificatesresolvers.letsencrypt.acme.dnschallenge.resolvers=1.1.1.1:53,8.8.8.8:53"

Add your DNS provider credentials to the environment:

environment:
  - CF_DNS_API_TOKEN=your-token

Traefik supports many DNS providers — see the [Traefik DNS provider docs](https://doc.traefik.io/traefik/https/acme/#providers) for your provider's required environment variables.

Step 2 — Request the wildcard cert via Traefik

Add to traefik-dynamic.yaml:

http:
  routers:
    wildcard-cert:
      rule: "Host(`yourdomain.com`)"
      entryPoints:
        - websecure
      service: noop
      tls:
        certResolver: letsencrypt
        domains:
          - main: "yourdomain.com"
            sans:
              - "*.yourdomain.com"

  services:
    noop:
      loadBalancer:
        servers:
          - url: "http://localhost"

Traefik will issue the wildcard cert via DNS-01 and store it in acme.json. Verify it was issued:

docker exec netbird-traefik cat /letsencrypt/acme.json | jq -r '.letsencrypt.Certificates[] | .domain'

Step 3 — Extract cert to PEM files

Create an extraction script:

#!/bin/bash
DEST=/path/to/netbird/wildcard-certs/

docker exec netbird-traefik cat /letsencrypt/acme.json | \
    jq -r '.letsencrypt.Certificates[] | select(.domain.main=="yourdomain.com") | .certificate' | \
    base64 -d > ${DEST}yourdomain.com.crt

docker exec netbird-traefik cat /letsencrypt/acme.json | \
    jq -r '.letsencrypt.Certificates[] | select(.domain.main=="yourdomain.com") | .key' | \
    base64 -d > ${DEST}yourdomain.com.key

echo "Cert extracted $(date)"

Run once manually to verify it works, then add a daily cron job so renewals are picked up automatically:

0 3 * * * /path/to/extract-cert.sh >> /var/log/cert-extract.log 2>&1

Step 4 — Configure netbird-proxy to use the wildcard cert

Create the cert directory and mount it in docker-compose.yml under the proxy service:

volumes:
  - /path/to/netbird/wildcard-certs:/wildcard-certs:ro

Add to and comment out proxy.env:

# NB_PROXY_ACME_CHALLENGE_TYPE=tls-alpn-01
NB_PROXY_WILDCARD_CERT_DIR=/wildcard-certs

Restart the stack:

docker compose restart

Result

On startup you should see:

wildcard certificate loaded: *.yourdomain.com (from yourdomain.com.crt)
watching certificate files in /wildcard-certs

The proxy loads the wildcard cert, serves it for all *.yourdomain.com services, and never attempts ACME for those domains. The proxy watches the directory and hot-reloads automatically when the cert files are updated — so the daily cron job combined with Traefik's automatic DNS-01 renewal handles everything.

This is a workable bridge until native DNS-01 support lands in the proxy. When it does, you simply remove the extraction script and point the provider credentials directly at the proxy.

<!-- gh-comment-id:4189678895 --> @kejar31 commented on GitHub (Apr 5, 2026): While native DNS-01 support in the proxy would be ideal, there's a working workaround today using the wildcard certificate feature merged in #5583 (`NB_PROXY_WILDCARD_CERT_DIR`). **The approach:** Use Traefik (already in the NetBird Docker stack) to issue a wildcard cert via DNS-01, extract it to PEM files, and point netbird-proxy at the directory. The proxy serves the wildcard cert for all matching domains and skips ACME entirely. ## Step 1 — Enable DNS-01 in Traefik As the original poster noted, enabling DNS-01 in Traefik is straightforward. In `docker-compose.yml`: ```yaml # Comment out tls challenge # - "--certificatesresolvers.letsencrypt.acme.tlschallenge=true" # Add DNS challenge - "--certificatesresolvers.letsencrypt.acme.dnschallenge=true" - "--certificatesresolvers.letsencrypt.acme.dnschallenge.provider=cloudflare" - "--certificatesresolvers.letsencrypt.acme.dnschallenge.resolvers=1.1.1.1:53,8.8.8.8:53" ``` Add your DNS provider credentials to the environment: ```yaml environment: - CF_DNS_API_TOKEN=your-token ``` Traefik supports many DNS providers — see the [[Traefik DNS provider docs](https://doc.traefik.io/traefik/https/acme/#providers)](https://doc.traefik.io/traefik/https/acme/#providers) for your provider's required environment variables. ## Step 2 — Request the wildcard cert via Traefik Add to `traefik-dynamic.yaml`: ```yaml http: routers: wildcard-cert: rule: "Host(`yourdomain.com`)" entryPoints: - websecure service: noop tls: certResolver: letsencrypt domains: - main: "yourdomain.com" sans: - "*.yourdomain.com" services: noop: loadBalancer: servers: - url: "http://localhost" ``` Traefik will issue the wildcard cert via DNS-01 and store it in `acme.json`. Verify it was issued: ```bash docker exec netbird-traefik cat /letsencrypt/acme.json | jq -r '.letsencrypt.Certificates[] | .domain' ``` ## Step 3 — Extract cert to PEM files Create an extraction script: ```bash #!/bin/bash DEST=/path/to/netbird/wildcard-certs/ docker exec netbird-traefik cat /letsencrypt/acme.json | \ jq -r '.letsencrypt.Certificates[] | select(.domain.main=="yourdomain.com") | .certificate' | \ base64 -d > ${DEST}yourdomain.com.crt docker exec netbird-traefik cat /letsencrypt/acme.json | \ jq -r '.letsencrypt.Certificates[] | select(.domain.main=="yourdomain.com") | .key' | \ base64 -d > ${DEST}yourdomain.com.key echo "Cert extracted $(date)" ``` Run once manually to verify it works, then add a daily cron job so renewals are picked up automatically: ``` 0 3 * * * /path/to/extract-cert.sh >> /var/log/cert-extract.log 2>&1 ``` ## Step 4 — Configure netbird-proxy to use the wildcard cert Create the cert directory and mount it in `docker-compose.yml` under the proxy service: ```yaml volumes: - /path/to/netbird/wildcard-certs:/wildcard-certs:ro ``` Add to and comment out `proxy.env`: ``` # NB_PROXY_ACME_CHALLENGE_TYPE=tls-alpn-01 NB_PROXY_WILDCARD_CERT_DIR=/wildcard-certs ``` Restart the stack: ```bash docker compose restart ``` ## Result On startup you should see: ``` wildcard certificate loaded: *.yourdomain.com (from yourdomain.com.crt) watching certificate files in /wildcard-certs ``` The proxy loads the wildcard cert, serves it for all `*.yourdomain.com` services, and never attempts ACME for those domains. The proxy watches the directory and hot-reloads automatically when the cert files are updated — so the daily cron job combined with Traefik's automatic DNS-01 renewal handles everything. This is a workable bridge until native DNS-01 support lands in the proxy. When it does, you simply remove the extraction script and point the provider credentials directly at the proxy.
Author
Owner

@hektyc commented on GitHub (Apr 18, 2026):

  • 1 for DNS-01 challenge. I made my first attempt at installing Netbird on my unRAID servers using the installer script. That has not gone well and I have wasted too much time trying to get Netbird working.

Netbird Proxy fails to start upon first install. Traefik fails to obtain an SSL certificate for my domain due to ports 80 and 443 not being opened on my firewall plus I am behind CGNAT so opening the ports wouldn't work in my case anyway.

I see that some people have managed to get DNS-01 working. However, I will just stick with my current setup instead of jumping through hoops to get DNS-01 working and give Netbird another try if/when DNS-01 is available.

I would like to add a suggestion if by chance the Netbird team is considering adding DNS-01 challenge support. When a user installs Netbird using the installer please provide them an option to choose which method they prefer to use as their DNS challenge option.

<!-- gh-comment-id:4275015030 --> @hektyc commented on GitHub (Apr 18, 2026): + 1 for DNS-01 challenge. I made my first attempt at installing Netbird on my unRAID servers using the installer script. That has not gone well and I have wasted too much time trying to get Netbird working. Netbird Proxy fails to start upon first install. Traefik fails to obtain an SSL certificate for my domain due to ports 80 and 443 not being opened on my firewall plus I am behind CGNAT so opening the ports wouldn't work in my case anyway. I see that some people have managed to get DNS-01 working. However, I will just stick with my current setup instead of jumping through hoops to get DNS-01 working and give Netbird another try if/when DNS-01 is available. I would like to add a suggestion if by chance the Netbird team is considering adding DNS-01 challenge support. When a user installs Netbird using the installer please provide them an option to choose which method they prefer to use as their DNS challenge option.
Author
Owner

@nz2o commented on GitHub (Apr 27, 2026):

Thank you for the workaround. Some kind of UI would be amazing for this.

I'm finding myself having trouble with TLS and HTTP methods, seemingly all the time.

<!-- gh-comment-id:4326915804 --> @nz2o commented on GitHub (Apr 27, 2026): Thank you for the workaround. Some kind of UI would be amazing for this. I'm finding myself having trouble with TLS and HTTP methods, seemingly all the time.
Author
Owner

@osos commented on GitHub (Apr 30, 2026):

Please ensure that an implementation of this is not Traefik only.

I am currently using nginx-proxy (which actually does support tls-passthrough) and, thus, would like to able to use other means of wildcard-certificate generating than Traefik.

Also: this PR seems to aim for a fix: https://github.com/netbirdio/netbird/pull/6009

<!-- gh-comment-id:4355668507 --> @osos commented on GitHub (Apr 30, 2026): Please ensure that an implementation of this is not Traefik only. I am currently using nginx-proxy (which actually does support tls-passthrough) and, thus, would like to able to use other means of wildcard-certificate generating than Traefik. Also: this PR seems to aim for a fix: https://github.com/netbirdio/netbird/pull/6009
Author
Owner

@hektyc commented on GitHub (Apr 30, 2026):

@osos i have not seen any indication of their intent or planning to add DNS-01 support.

<!-- gh-comment-id:4355701137 --> @hektyc commented on GitHub (Apr 30, 2026): @osos i have not seen any indication of their intent or planning to add DNS-01 support.
Author
Owner

@WolfspiritM commented on GitHub (Apr 30, 2026):

I'm hoping for a wildcard cert for exposed services aswell. The reason is security. When you expose a local service for a short moment to the internet with a random id you don't expect people to easily find it but as there are certs generated for each exposed service bots probably watch the transparency logs and start scans on every newly generated cert. I noticed that whenever I expose a local http server I end up getting scanned.

<!-- gh-comment-id:4356486135 --> @WolfspiritM commented on GitHub (Apr 30, 2026): I'm hoping for a wildcard cert for exposed services aswell. The reason is security. When you expose a local service for a short moment to the internet with a random id you don't expect people to easily find it but as there are certs generated for each exposed service bots probably watch the transparency logs and start scans on every newly generated cert. I noticed that whenever I expose a local http server I end up getting scanned.
Author
Owner

@nz2o commented on GitHub (Apr 30, 2026):

Yeah um....I had to give up on the project... I had a rather weird up/down issue with the reverse proxy. Couldn't get it working from scratch either.

DNS-01 would have been a win. Looks like it's not especially easy in any reverse proxy.

Sent from my Verizon, Samsung Galaxy smartphone
Get Outlook for Androidhttps://aka.ms/AAb9ysg


From: Adrian @.>
Sent: Thursday, April 30, 2026 5:06:43 PM
To: netbirdio/netbird @.
>
Cc: Casey Benefield, NZ2O @.>; Comment @.>
Subject: Re: [netbirdio/netbird] Feature Request: Add Let's Encrypt / ACME DNS challenge (DNS-01) support to the Proxy container. (Issue #5450)

[https://avatars.githubusercontent.com/u/5904171?s=20&v=4]WolfspiritM left a comment (netbirdio/netbird#5450)https://github.com/netbirdio/netbird/issues/5450#issuecomment-4356486135

I'm hoping for a wildcard cert for exposed services aswell. The reason is security. When you expose a local service for a short moment to the internet with a random id you don't expect people to easily find it but as there are certs generated for each exposed service bots probably watch the transparency logs and start scans on every newly generated cert. I noticed that whenever I expose a local http server I end up getting scanned.


Reply to this email directly, view it on GitHubhttps://github.com/netbirdio/netbird/issues/5450#issuecomment-4356486135, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AMI4ZVTIEDWGUSGVOIVTDFD4YPE7HAVCNFSM6AAAAACV7SBAS6VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHM2DGNJWGQ4DMMJTGU.
Triage notifications on the go with GitHub Mobile for iOShttps://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Androidhttps://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.
You are receiving this because you commented.Message ID: @.***>

<!-- gh-comment-id:4356648754 --> @nz2o commented on GitHub (Apr 30, 2026): Yeah um....I had to give up on the project... I had a rather weird up/down issue with the reverse proxy. Couldn't get it working from scratch either. DNS-01 would have been a win. Looks like it's not especially easy in any reverse proxy. Sent from my Verizon, Samsung Galaxy smartphone Get Outlook for Android<https://aka.ms/AAb9ysg> ________________________________ From: Adrian ***@***.***> Sent: Thursday, April 30, 2026 5:06:43 PM To: netbirdio/netbird ***@***.***> Cc: Casey Benefield, NZ2O ***@***.***>; Comment ***@***.***> Subject: Re: [netbirdio/netbird] Feature Request: Add Let's Encrypt / ACME DNS challenge (DNS-01) support to the Proxy container. (Issue #5450) [https://avatars.githubusercontent.com/u/5904171?s=20&v=4]WolfspiritM left a comment (netbirdio/netbird#5450)<https://github.com/netbirdio/netbird/issues/5450#issuecomment-4356486135> I'm hoping for a wildcard cert for exposed services aswell. The reason is security. When you expose a local service for a short moment to the internet with a random id you don't expect people to easily find it but as there are certs generated for each exposed service bots probably watch the transparency logs and start scans on every newly generated cert. I noticed that whenever I expose a local http server I end up getting scanned. — Reply to this email directly, view it on GitHub<https://github.com/netbirdio/netbird/issues/5450#issuecomment-4356486135>, or unsubscribe<https://github.com/notifications/unsubscribe-auth/AMI4ZVTIEDWGUSGVOIVTDFD4YPE7HAVCNFSM6AAAAACV7SBAS6VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHM2DGNJWGQ4DMMJTGU>. Triage notifications on the go with GitHub Mobile for iOS<https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675> or Android<https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub>. You are receiving this because you commented.Message ID: ***@***.***>
Author
Owner

@GEAR-IT-UP commented on GitHub (Apr 30, 2026):

What i got working (at least) is proxed cloudflare instances (orange cloud). I just downloaded the cert, added it and no issues or timeouts with the wireguard network etc etc..

But of course yeah the simple challenge is easier for sure. Now to hope the other reverse proxies on different sites improve and il be set!

<!-- gh-comment-id:4356719718 --> @GEAR-IT-UP commented on GitHub (Apr 30, 2026): What i got working (at least) is proxed cloudflare instances (orange cloud). I just downloaded the cert, added it and no issues or timeouts with the wireguard network etc etc.. But of course yeah the simple challenge is easier for sure. Now to hope the other reverse proxies on different sites improve and il be set!
Author
Owner

@nz2o commented on GitHub (Apr 30, 2026):

What I liked about netbird was the prospect of tunnels or server groups, policy based management.

Then the ISP handoff was nice. I was combining netbird with authentik for RDP access proxying....like what Teleport or StrongDM might do

Sent from my Verizon, Samsung Galaxy smartphone
Get Outlook for Androidhttps://aka.ms/AAb9ysg


From: Andrew Moore @.>
Sent: Thursday, April 30, 2026 5:56:39 PM
To: netbirdio/netbird @.
>
Cc: Casey Benefield, NZ2O @.>; Comment @.>
Subject: Re: [netbirdio/netbird] Feature Request: Add Let's Encrypt / ACME DNS challenge (DNS-01) support to the Proxy container. (Issue #5450)

[https://avatars.githubusercontent.com/u/29341253?s=20&v=4]GEAR-IT-UP left a comment (netbirdio/netbird#5450)https://github.com/netbirdio/netbird/issues/5450#issuecomment-4356719718

What i got working (at least) is proxed cloudflare instances (orange cloud). I just downloaded the cert, added it and no issues or timeouts with the wireguard network etc etc..

But of course yeah the simple challenge is easier for sure. Now to hope the other reverse proxies on different sites improve and il be set!


Reply to this email directly, view it on GitHubhttps://github.com/netbirdio/netbird/issues/5450#issuecomment-4356719718, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AMI4ZVTUTCDDBZBYL25YSVT4YPK2PAVCNFSM6AAAAACV7SBAS6VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHM2DGNJWG4YTSNZRHA.
Triage notifications on the go with GitHub Mobile for iOShttps://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Androidhttps://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.
You are receiving this because you commented.Message ID: @.***>

<!-- gh-comment-id:4356757377 --> @nz2o commented on GitHub (Apr 30, 2026): What I liked about netbird was the prospect of tunnels or server groups, policy based management. Then the ISP handoff was nice. I was combining netbird with authentik for RDP access proxying....like what Teleport or StrongDM might do Sent from my Verizon, Samsung Galaxy smartphone Get Outlook for Android<https://aka.ms/AAb9ysg> ________________________________ From: Andrew Moore ***@***.***> Sent: Thursday, April 30, 2026 5:56:39 PM To: netbirdio/netbird ***@***.***> Cc: Casey Benefield, NZ2O ***@***.***>; Comment ***@***.***> Subject: Re: [netbirdio/netbird] Feature Request: Add Let's Encrypt / ACME DNS challenge (DNS-01) support to the Proxy container. (Issue #5450) [https://avatars.githubusercontent.com/u/29341253?s=20&v=4]GEAR-IT-UP left a comment (netbirdio/netbird#5450)<https://github.com/netbirdio/netbird/issues/5450#issuecomment-4356719718> What i got working (at least) is proxed cloudflare instances (orange cloud). I just downloaded the cert, added it and no issues or timeouts with the wireguard network etc etc.. But of course yeah the simple challenge is easier for sure. Now to hope the other reverse proxies on different sites improve and il be set! — Reply to this email directly, view it on GitHub<https://github.com/netbirdio/netbird/issues/5450#issuecomment-4356719718>, or unsubscribe<https://github.com/notifications/unsubscribe-auth/AMI4ZVTUTCDDBZBYL25YSVT4YPK2PAVCNFSM6AAAAACV7SBAS6VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHM2DGNJWG4YTSNZRHA>. Triage notifications on the go with GitHub Mobile for iOS<https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675> or Android<https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub>. You are receiving this because you commented.Message ID: ***@***.***>
Author
Owner

@speedbirdone commented on GitHub (May 16, 2026):

Is there like any update if that's being worked on officially? I don't need an ETA, just some kind of confirmation that it's on the list as I'm still evaluating netbird and a solution for this would be absolutely pro netbird.

<!-- gh-comment-id:4467136726 --> @speedbirdone commented on GitHub (May 16, 2026): Is there like any update if that's being worked on officially? I don't need an ETA, just some kind of confirmation that it's on the list as I'm still evaluating netbird and a solution for this would be absolutely pro netbird.
Author
Owner

@GEAR-IT-UP commented on GitHub (May 16, 2026):

Is there like any update if that's being worked on officially? I don't need an ETA, just some kind of confirmation that it's on the list as I'm still evaluating netbird and a solution for this would be absolutely pro netbird.

Sort of...

The latest update has a "bring your own proxy" (just the building blocks though). So not a full feature yet. Though my understanding is Netbird, will "control" your external proxy with Netbird via dashboard, as if it was an internal one. No idea what is supported but give the internal proxy used, I would suggest that in the first instance.

As if its an external proxy (aka normal Traefik), then it will support DNS-01 requests. So roundabout way but I think will work well as you can then just plug Netbird into your setup, then go from there.

<!-- gh-comment-id:4468712851 --> @GEAR-IT-UP commented on GitHub (May 16, 2026): > Is there like any update if that's being worked on officially? I don't need an ETA, just some kind of confirmation that it's on the list as I'm still evaluating netbird and a solution for this would be absolutely pro netbird. Sort of... The latest update has a "bring your own proxy" (just the building blocks though). So not a full feature yet. Though my understanding is Netbird, will "control" your external proxy with Netbird via dashboard, as if it was an internal one. No idea what is supported but give the internal proxy used, I would suggest that in the first instance. As if its an external proxy (aka normal Traefik), then it will support DNS-01 requests. So roundabout way but I think will work well as you can then just plug Netbird into your setup, then go from there.
Author
Owner

@DaAwesomeP commented on GitHub (May 24, 2026):

@kejar31 I tried modifying getting-started.sh with your steps, and it looks like Netbird/Traefik is fetching a wildcard cert in addition to the non-wildcard one (but now using DNS-01). Is there a way to get it to only use the wildcard cert for everything? I don't want the non-wildcard cert in the Certificate Transparency public record.

Note that I also needed these:

      - "--certificatesresolvers.letsencrypt.acme.dnschallenge.propagation.disableChecks=true"
      - "--certificatesresolvers.letsencrypt.acme.dnschallenge.propagation.delayBeforeChecks=60"

This was my attempt to stop the non-wildcard cert (did not work):

      - "--entrypoints.websecure.http.tls.domains[0].main=example.com"
      - "--entrypoints.websecure.http.tls.domains[0].sans=*.example.com"
<!-- gh-comment-id:4530634311 --> @DaAwesomeP commented on GitHub (May 24, 2026): @kejar31 I tried modifying `getting-started.sh` with [your steps](https://github.com/netbirdio/netbird/issues/5450#issuecomment-4189678895), and it looks like Netbird/Traefik is fetching a wildcard cert _in addition_ to the non-wildcard one (but now using DNS-01). Is there a way to get it to only use the wildcard cert for everything? I don't want the non-wildcard cert in the Certificate Transparency public record. Note that I also needed these: ```yaml - "--certificatesresolvers.letsencrypt.acme.dnschallenge.propagation.disableChecks=true" - "--certificatesresolvers.letsencrypt.acme.dnschallenge.propagation.delayBeforeChecks=60" ``` This was my attempt to stop the non-wildcard cert (did not work): ```yaml - "--entrypoints.websecure.http.tls.domains[0].main=example.com" - "--entrypoints.websecure.http.tls.domains[0].sans=*.example.com" ```
Author
Owner

@alanb2 commented on GitHub (Jun 5, 2026):

@DaAwesomeP Could you share the modified script?

<!-- gh-comment-id:4630660193 --> @alanb2 commented on GitHub (Jun 5, 2026): @DaAwesomeP Could you share the modified script?
Author
Owner

@s-wighton commented on GitHub (Aug 1, 2026):

This fix needs to hurry up and be prioritised over the AI feature slop they've added recently.

I'm really annoyed Netbird reverse proxy is leaking my internal subdomain names, the access log is full of foreign countries probing each of them. (One for the SEO)

Moving back to NginxProxyManager is a very high probability if the next feature release doesn't include this bug fix.

Using https://www.certkit.io/tools/ct-logs is quite an eye opener to what has been exposed since moving across.

<!-- gh-comment-id:5150676357 --> @s-wighton commented on GitHub (Aug 1, 2026): This fix needs to hurry up and be prioritised over the AI feature slop they've added recently. I'm really annoyed Netbird reverse proxy is leaking my internal subdomain names, the access log is full of foreign countries probing each of them. (One for the SEO) Moving back to NginxProxyManager is a very high probability if the next feature release doesn't include this bug fix. Using https://www.certkit.io/tools/ct-logs is quite an eye opener to what has been exposed since moving across.
Sign in to join this conversation.
No Label feature-request
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: DYNR/netbird#11228