MJHD

エモさ駆動開発

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」を開く。 f:id:wait0000:20150823194601p:plain

するとドメインに関する情報がいくつか表示されるので、その中程に表示されている、「API token」とかいてある欄を確認する。 f:id:wait0000:20150823194611p:plain

A,AAAAレコードIDの確認

自分のドメインの情報を表示している状態で、「DNS」を開く。

f:id:wait0000:20150823194619p:plain

そして、基本的なレコードが表示されているページの下にある、「Manage records」を開く。 f:id:wait0000:20150823194629p:plain

詳細なレコードの一覧が表示されるので、そのうち、TypeがA, AAAAとなっているレコードのInfoという項目をマウスオーバーする。

すると表示される7桁ほどの数字が、レコードIDとなる。

f:id:wait0000:20150823194637p:plain