🔥
flarectl で DDNS する
お家の検証サーバ用の備忘録です。基本 root です。
前提
Zero Trust Access Tunnel あれば要らんやんという話もありつつ flarectl
を使ってみる感じで。
flarectlをインストール
dnf -y install go
go install github.com/cloudflare/cloudflare-go/cmd/flarectl@latest
./go/bin/flarectl --version
# => flarectl version dev
API Token を取得
Cloudflare に登録しているゾーンの編集権限のあるトークンを発行します。
https://dash.cloudflare.com/profile/api-tokens
一旦シェル変数に保存しておきます。
read -p 'CF_API_TOKEN?>' CF_API_TOKEN
レコードIDを確認
ゾーンの名前を指定します。
read -p 'ZONE?>' ZONE
A レコードのレコードIDを確認します。
export CF_API_TOKEN
/root/go/bin/flarectl --json dns list --zone ${ZONE} --type A | jq -r .[].ID
レコードIDが一意であればシェル変数に入れておきます。
RECID=$(/root/go/bin/flarectl --json dns list --zone ${ZONE} --type A | jq -r .[].ID)
更新スクリプト作成
グローバルIPが変わったらDNSレコードを更新するシェルスクリプトを作ります。
cat << EOF > MyDDNS.sh
#!/bin/bash
IPFILE="GLOBAL_ADDRESS"
CF_API_TOKEN=${CF_API_TOKEN}
zone=${ZONE}
recname=${ZONE}
recid=${RECID}
GLOBAL_ADDRESS=\$(curl -s https://checkip.amazonaws.com)
BEFORE_ADDRESS=\$(cat \${IPFILE})
if [ "\$GLOBAL_ADDRESS" != "\$BEFORE_ADDRESS" ]; then
echo "\${GLOBAL_ADDRESS}" > \${IPFILE}
echo "\$(date '+%F %T') \${BEFORE_ADDRESS} > \${GLOBAL_ADDRESS}" > /root/MyDDNS.log
export CF_API_TOKEN
/root/go/bin/flarectl dns update --zone \${zone} --id \${recid} --name \${recname} --content \${GLOBAL_ADDRESS}
fi
EOF
ちゃんとスクリプトができたか確認して実行権限を付与します。GLOBAL_ADDRESS
は、IP アドレスを覚えておくためのファイルです。
cat MyDDNS.sh
chmod +x MyDDNS.sh
touch GLOBAL_ADDRESS
crontab に登録
5分毎に動くようにします。
echo '*/5 * * * * bash /root/MyDDNS.sh' >> /var/spool/cron/root
以上
Discussion