Skip to main content

certbot-dns-local

Domain registrar agnostic authenticator plugin for certbot

An authenticator plugin for certbot to support Let's Encrypt DNS challenges (dns-01) for domains managed by any registrar.

Why use this authenticator plugin?

  • There is no other authenticator plugin for your domain registrar.
  • Some domain registrars do not support fine-grained API permissions. Storing domain registrar credentials in a file on a web server might pose a security risk to all your domains.
  • Migrating from one domain registrar to another does not require a new authenticator plugin.

Installation

  1. Optionally install the netfilter_queue library and iptables. On Debian-based systems, run:

    apt install libnetfilter-queue-dev iptables build-essential
    

    These dependencies enable support for DNS challenge authentication if UDP port 53 is already occupied.

  2. Plugin installation:

    • If you are using certbot from your distribution repository or from the Python Package Index:
      pip install certbot-dns-local[netfilter]
      
    • If you are using certbot-auto, clone the repository, cd into the folder and run:
      /opt/eff.org/certbot/venv/bin/pip install certbot-dns-local[netfilter]
      

    If you do not need the netfilter feature, you can install the plugin through pip install certbot-dns-local without the [netfilter] suffix specifying optional dependencies.

  3. Set up a DNS NS record for _acme-challenge.yourdomain.com pointing to the server which certbot is running on.
    For example:

    _acme-challenge.yourdomain.com. 300 IN NS yourdomain.com.
    

    Such a record has to be created for each subdomain which you want to obtain a certificate for.

Usage

A new certificate can be requested as follows:

certbot certonly -a dns-local -d yourdomain.com -d '*.yourdomain.com'

Older versions of certbot may require you to use the plugin legacy name as follows:

certbot certonly -a certbot-dns-local:dns-local -d yourdomain.com -d '*.yourdomain.com'

Renewals will automatically be performed using the same authenticator by certbot.

By default, the authenticator will attempt to resolve the challenge domain's nameserver IP addresses and bind sockets to these addresses. This is done to prevent listening on 0.0.0.0 or ::, which may result in collisions with services like systemd-resolved. This behavior can be overridden by specifying one or multiple bind addresses manually using the --dns-local-listen <address> parameter, e.g. in cases where certbot is running behind NAT.

Docker Container

You can also use the Docker container as follows:

docker run -it --name certbot-dns-local -v /etc/letsencrypt:/etc/letsencrypt --rm --net=host ghcr.io/blechschmidt/certbot-dns-local:latest certonly -d yourdomain.com -d '*.yourdomain.com'

Behind the curtain

Behind the curtain, the plugin will open a UDP server on port 53 in order to serve the DNS validations. In case binding to port 53 fails because it is already occupied by another application, it will fall back to packet interception using the netfilter_queue library.

Metadata

Release files for certbot-dns-local 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for certbot-dns-local 1.0.0
File Size Uploaded
certbot_dns_local-1.0.0.tar.gz 10.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for certbot-dns-local 1.0.0
File Interpreter ABI Platform
certbot_dns_local-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 21.2 kB

Release files / certbot_dns_local-1.0.0.tar.gz

Download URL certbot_dns_local-1.0.0.tar.gz
Size 10.2 kB
Tags Source
SHA-256 checksum
How to use checksums
623209e6363f53a0b42bd4774d4be841b4f440b6c2e1282d32c6290433abcbe9
BLAKE2b-256 checksum
How to use checksums
25c25934a5ea108d65b668019125ce9a470caae9a53e79532dfd7ab37e975b24
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 26, 2025.

Transparency log

Release files / certbot_dns_local-1.0.0-py3-none-any.whl

Download URL certbot_dns_local-1.0.0-py3-none-any.whl
Size 11.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
965d10373c30cef5a204a9ac7a35d4765cf133fb4afca9d455182dddebd3dd99
BLAKE2b-256 checksum
How to use checksums
454d363c0ee58aedfb474db465e00cb755d1040a4fee688438a26dc060c1656f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 26, 2025.

Transparency log

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files

0.1.4

1 release file

0.1.3

1 release file

0.1.2

1 release file

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page