はじめに
Let’s Encrypt の証明書ツールである Certbot は、HTTP / DNS /TLS のいずれかの方法で認証を行う構造となっています。
https://letsencrypt.org/ja/docs/challenge-types/
通常は HTTP が最も簡便ではありますが、ワイルドカード証明書を取得したい場合や、HTTP サーバーを使用できない環境では DNS を使用する必要があります。
しかしながら、DNS の方法はデフォルトでは自動更新ができません。
なぜなら、DNS サーバーに認証用のレコードを書き込む・更新する必要があるにも関わらず、DNS のレコードを自動更新するのは容易ではないためです。多くの場合は管理UIを自動操作するかAPIを使用するプログラムを書く必要があります。大変すぎます。
そのため、certbot には様々な DNS サービスの認証を容易にするプラグインが提供されています。
※ 内部的にはDNS提供会社のAPIを使用する構成となっていることが多いです。
今回、Cloudflare のプラグインで自動更新を試みてみました。
手順
Cloudflare 側の作業
Cloudflare にログイン
まずはCloudflareにログインします。
右上のアイコン→プロフィール

APIトークン → トークンを作成する

ゾーンDNSを編集するテンプレートを選択

ゾーンリソースを指定
セキュリティ対策として、すべてのゾーンではなく、指定ゾーンのみを指定しておきます。

トークンを作成

トークンをコピー
トークンが作成されたらトークンをコピーしてメモしておきます。

サーバー側の作業
サーバー側で以下のコマンドを実行します。
ドメインやAPIトークンなどは適宜書き換えてください。
トークンファイルの作成
sudo mkdir -p /root/.cloudflare
sudo touch /root/.cloudflare/example.com.ini
echo 'dns_cloudflare_api_token=[APIトークン]' | sudo tee /root/.cloudflare/example.com.ini
sudo chmod 700 /root/.cloudflare
sudo chmod 600 /root/.cloudflare/example.com.ini
証明書の更新
sudo certbot certonly \
--dns-cloudflare \
--dns-cloudflare-credentials /root/.cloudflare/example.com.ini \
-d dns.example.com \
-m [自分のメールアドレス] \
--agree-tos \
--non-interactive \
--cert-name dns.example.com
エラーが無ければOKです。
–cert-name を設定しておくと –manual で初回設定した場合でも自動更新に上書きしてくれます。
自動更新になっているかの確認
以下のコマンドを実行すると更新設定を確認できます。
sudo sed -n '1,200p' /etc/letsencrypt/renewal/dns.example.com.conf
以下のように authenticator が dns-cloudflare に設定されていればDNSによる自動更新設定になっています。
authenticator = dns-cloudflare
以上
参考資料
certbotプラグインに対応しているリストは以下のページに掲載されています。
日本企業だとConoHaなどが対応しています。

コメント
差し出がましい指摘で恐縮ではありますが、誤字の指摘です。
誤: Cloudfrare
正: Cloudflare
ブログ記事本文や見出しやURLにある、Cloudflareのスペルを誤っています。
コードに記述されたスペルは正しいです。
なお Flare のスペルは、僕もよく間違えます。音韻体系由来の英単語は、口に出さないと記述を取り違えますよね……。
修正しました!指摘ありがとうございます。