DNSimpleでIPアドレスを通知するシェルスクリプト
最近、mydns.jpからdnsimpleへ移行した。
そこで、ipアドレスを自動的に通知するスクリプトを書いた。以下のファイルを/etc/cron.daily/にでも置いて、実行権限をつければ大丈夫だと思う。
また、この記事の下の方で各変数の確認方法を解説する。
[2014/12/2]タイムアウトの設定を追加
#!/bin/sh
echo "Updating ip address for dnsimple"
TOKEN="**ドメインのAPIトークン**"
DOMAIN_ID="**ドメイン名(example.comなど)**"
IPV4_RECORD_ID=("**AレコードのID**" "**二つ目のAレコードのID**" ...)
IPV6_RECORD_ID=(**AAAAレコードのID**" "**二つ目のAAAAレコードのID**" ...)
# 以下のIPアドレスの取得に使うサービスは、自分の信用できるものに書き換えてください。
IPV4="`curl http://ipv4.icanhazip.com -s`"
IPV6="`curl http://ipv6.icanhazip.com -s`"
TIMEOUT=30
for(( I = 0; I < ${#IPV4_RECORD_ID[@]}; ++I))
do
echo "#IPV4.$I $IPV4 -> ${IPV4_RECORD_ID[$I]}"
curl -fs \
-m $TIMEOUT \
-w " Result: %{http_code} Time: %{time_total} Size:%{size_request}\n" \
-o /dev/null \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-DNSimple-Domain-Token: $TOKEN" \
-X "PUT" \
-i "https://api.dnsimple.com/v1/domains/$DOMAIN_ID/records/${IPV4_RECORD_ID[$I]}" \
-d "{\"record\":{\"content\":\"$IPV4\"}}"
done
for(( I = 0; I < ${#IPV6_RECORD_ID[@]}; ++I))
do
echo "#IPV6.$I $IPV6 -> ${IPV6_RECORD_ID[$I]}"
curl -fs \
-m $TIMEOUT \
-w " Result: %{http_code} Time: %{time_total} Size:%{size_request}\n" \
-o /dev/null \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-DNSimple-Domain-Token: $TOKEN" \
-X "PUT" \
-i "https://api.dnsimple.com/v1/domains/$DOMAIN_ID/records/${IPV6_RECORD_ID[$I]}" \
-d "{\"record\":{\"content\":\"$IPV6\"}}"
done
echo "Finished!!"
ドメインのAPIトークンの確認
まず、DNSimpleにログインし、「DOMAINS」から自分のドメインを選択する。
そして、「Settings」を開く。
するとドメインに関する情報がいくつか表示されるので、その中程に表示されている、「API token」とかいてある欄を確認する。
A,AAAAレコードIDの確認
自分のドメインの情報を表示している状態で、「DNS」を開く。
そして、基本的なレコードが表示されているページの下にある、「Manage records」を開く。
詳細なレコードの一覧が表示されるので、そのうち、TypeがA, AAAAとなっているレコードのInfoという項目をマウスオーバーする。
すると表示される7桁ほどの数字が、レコードIDとなる。