Google Cloud の Compute で Ubuntu 22.04 (minimal) + ddclient + Cloudflare のセットアップ

ddclient と Cloudflare を使う時に Global API Key を使わずに設定する

ほとんどOracle Cloud Infrastructure に Ubuntu 20.04 (minimal) をセットアップした時の nftables 以外をやるだけだったけど、OPSエージェントのリポジトリが apt-key(8) によって /etc/apt/trusted.gpg に鍵を追加する形式なので apt update に警告が出ることを解消することと無料枠のIPアドレスがエフィメラルなので ddclient を使ってDDNSすることが必要だったので、それらを記録しておく

Table of Contents
  1. ddclient 3.10.0+
  2. OPSエージェントのリポジトリの署名鍵を /usr/share/keyrings に移す
    1. 鍵の整理

ddclient 3.10.0+

Cloudflare で「APIトークン」を使えるようになったのは 3.10.0 からなので 3.9.1 以下の場合アップデートする必要がある。 Ubuntu 23.04 以上の場合は Ubuntu の公式リポジトリで配信されてるので最新のLTSが22.04の今だけ必要になるPPAリポジトリを追加する。 add-apt-repository コマンドを入れるために minimal に余計なパッケージを入れたくないので使わずに設定する。23.04以上の場合は飛ばして 3 から ddclient の設定

  1. ddclient ppa repository の “Technical details about this PPA” を展開して Fingerprint をコピーして gnupg で keyserver.ubuntu.com から --recv-key する。執筆時点の 34B532FAB83CF75BCECB610F0F15765E8982661B から変わっていた場合は置き換える
    $ gpg --keyserver keyserver.ubuntu.com --no-default-keyring --keyring ddclient-ppa-keyring.gpg --recv-key 34B532FAB83CF75BCECB610F0F15765E8982661B
    $ sudo mv ddclient-ppa-keyring.gpg /usr/share/keyrings/
    
  2. ppa repository で確認できるリポジトリ (https://ppa.launchpadcontent.net/ddclient/ppa/ubuntu) を /etc/apt/sources.list.d へ追加する
    $ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ddclient-ppa-keyring.gpg] https://ppa.launchpadcontent.net/ddclient/ppa/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/ddclient.list > /dev/null
    $ sudo apt update
    
  3. Cloudflare のマイプロフィールから API トークン を発行する。「ゾーン DNS を編集する」のテンプレートでアクセス許可にDNSの読み取りを追加する

  4. ddclient をインストールする。 debconf が呼ばれるので service は other、protocol は cloudflare を選択、 username は token にして password に Cloudflare で発行した API token を入力。 Web-based IP discovery service を選択してDDNSするドメインを入力する
    $ sudo apt install -y ddclient
    
  5. 設定された /etc/ddclient.conf を確認する。 example.com の部分が利用しているドメインになる
    $ sudo cat /etc/ddclient.conf
    # Configuration file for ddclient generated by debconf
    #
    # /etc/ddclient.conf
       
    protocol=cloudflare \
    use=web, web=https://api.ipify.org/ \
    login=token \
    password='<API token>' \
    sub.example.com
    
  6. 以下を実行して成功するのを確認する。IPを取得できない場合は api.ipify.orgident.me などの別のIPを確認できるドメインに変更する。 zone が必要とするエラーが発生した場合は /etc/ddclient.conf の途中に zone=example.com \ の行を追加する。 example.com は利用しているドメインの apex になる
    $ sudo ddclient -daemon=0 -verbose -force
    
  7. 成功した場合は systemd service を再起動しておく
    $ sudo systemctl restart ddclient
    

OPSエージェントのリポジトリの署名鍵を /usr/share/keyrings に移す

現在の署名鍵は以下

/etc/apt/trusted.gpg に追加されてる鍵は以下のコマンドで確認できる

$ apt-key --keyring /etc/apt/trusted.gpg list

鍵の整理

  1. OPSエージェントのリポジトリに使われてる鍵を /usr/share/keyrings に保存する
    $ curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/kubernetes-archive-keyring.gpg
    
  2. archsigned-by を google-cloud-ops-agent のリポジトリに追加する
    $ sed "s#deb#& [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg]#" /etc/apt/sources.list.d/google-cloud-ops-agent.list
    
  3. /etc/apt/trusted.gpg から削除する
    $ sudo apt-key del 13EDEF05
    $ sudo apt-key del DC6315A3
    
  4. DEPRECATED の警告が出ないことを確認する
    $ sudo apt update