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
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 の設定
- 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/
- 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
-
Cloudflare のマイプロフィールから API トークン を発行する。「ゾーン DNS を編集する」のテンプレートでアクセス許可にDNSの読み取りを追加する
- ddclient をインストールする。
debconf
が呼ばれるので service は other、protocol は cloudflare を選択、 username はtoken
にして password に Cloudflare で発行した API token を入力。 Web-based IP discovery service を選択してDDNSするドメインを入力する$ sudo apt install -y ddclient
- 設定された
/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
- 以下を実行して成功するのを確認する。IPを取得できない場合は
api.ipify.org
をident.me
などの別のIPを確認できるドメインに変更する。 zone が必要とするエラーが発生した場合は/etc/ddclient.conf
の途中にzone=example.com \
の行を追加する。example.com
は利用しているドメインの apex になる$ sudo ddclient -daemon=0 -verbose -force
- 成功した場合は systemd service を再起動しておく
$ sudo systemctl restart ddclient
OPSエージェントのリポジトリの署名鍵を /usr/share/keyrings
に移す
現在の署名鍵は以下
- Rapture Automatic Signing Key (cloud-rapture-signing-key-2022-03-07-08_01_01.pub)
- Fingerprint: A362B822F6DEDC652817EA46B53DC80D13EDEF05
- Artifact Registry Repository Signer <artifact-registry-repository-signer@google.com>
- Fingerprint: 35BAA0B33E9EB396F59CA838C0BA5CE6DC6315A3
/etc/apt/trusted.gpg
に追加されてる鍵は以下のコマンドで確認できる
$ apt-key --keyring /etc/apt/trusted.gpg list
鍵の整理
- 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
arch
とsigned-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
/etc/apt/trusted.gpg
から削除する$ sudo apt-key del 13EDEF05 $ sudo apt-key del DC6315A3
- DEPRECATED の警告が出ないことを確認する
$ sudo apt update