Route53をなんちゃってダイナミックDNSに仕立てみた
最近、SSL-VPNで使用しているEC2(Linux)にSSHにする際に、毎回変動したIP打ち込むのが怠いと感じてきた
けどON/OFF繰り返すからElastic IPは使えない
なんか良い方法ないかGoogle先生に聞いてみたところ
Route53をなんちゃってダイナミックDNSに仕立てあげる方法があったのでやってみた
構成
EC2が起動するタイミングで、Route53のレコードを更新するAPIを叩くcliをスクリプトで実行させることによって、Route53をなんちゃってダイナミックDNSに仕立てあげる
※構築が終わった後で気が付いたんだけど、わざわざ自分でスプリクト作らなくても、route53ddnsといったスクリプトがリポジトリにあったという
手順
ドメインの取得とゾーンの作成を既に完了している前提で進めます
①Route53のAPIを叩く用のユーザを作成
手順①を参考して下さい
今回設定したユーザは以下となります
ユーザ名:Route53
ポリシー:AmazonRoute53FullAccess
ポリシーは権限が必要最低限になるようにするのがスマートなんでしょうが・・・
②AWS CLIで使うユーザの認証設定する
1.EC2上のLinuxサーバにログイン
2.認証情報の設定
aws configure --profile Route53
AWS Access Key ID [None]: XXXXXXXXXXXXXXXXXXXX
AWS Secret Access Key [None]: XXXXXXXXXXXXXXXXXXXXXXX
Default region name [None]: us-east-1
Default output format [None]:
3.設定の確認
aws configure list --profile Route53
③シェルスクリプトおよび設定ファイルの作成と設定
1.作業ディレクトリを作成
mkdir /home/hayato/Route53
2.jsonファイルを作成
vi /home/hayato/Route53/dyndns.tmpl
{
"Changes":
[
{
"Action": "UPSERT",
"ResourceRecordSet":
{
"Name": "{%HOST%}.raptor-aws.net.",
"Type": "A",
"TTL": 300,
"ResourceRecords":
[
{
"Value": "{%IP%}"
}
]
}
}
]
}
※パラメータ補足
・"Action": "UPSERT"
レコードに対して行うアクションを指定
UPSERT=更新
CREATE=作成
DELETE=削除
・"Name": "{%HOST%}.raptor-aws.net."
FQDNを指定
・"Value": "{%IP%}"
IPを指定
3.シェルスクリプトを作成
vi /home/hayato/Route53/dyndns.sh
#!/bin/bash
#VariableDefine
PROFILE=Route53
ROUTE53_PATH=/home/hayato/Route53/
ZONEID=XXXXXXXXXXX
IP=$(curl -s http://169.254.169.254/latest/meta-data/public-ipv4)
HOSTNAME=$(hostname)
#filecreate
sed -e "s/{%IP%}/${IP}/g;s/{%HOST%}/${HOSTNAME}/g" ${ROUTE53_PATH}dyndns.tmpl > ${ROUTE53_PATH}${HOSTNAME}.json
#CLI
aws route53 change-resource-record-sets --profile ${PROFILE} --hosted-zone-id ${ZONEID} --change-batch file://${ROUTE53_PATH}${HOSTNAME}.json
※変数補足
・PROFILE
CLIで使用するプロファイルを指定
・ROUTE53_PATH
・ZONEID
対象のゾーンIDを指定
・IP
EC2に割り当てられているパブリックIPを指定
・HOSTNAME
サーバ名を指定
④シェルスプリクトの動作確認と自動実行設定
1.シェルスプリクトの動作確認
sh /home/hayato/Route53/dyndns.sh
設定ファイル等に誤りがなければ、次のような結果が返ってきます
{
"ChangeInfo": {
"Status": "PENDING",
"SubmittedAt": "2017-09-06T17:34:26.414Z",
"Id": "/change/C21B4F9LM6BATC"
}
}
しばらくするとRoute53のレコードが更新されます
2.シェルスプリクトの権限設定
sudo chmod 755 /home/hayato/Route53/dyndns.sh
3.cronの設定
cronの時間指定する部分に@rebootと指定してやると
サーバ起動時にスプリクトが実行されます
ただ今回何故かcrontab -eだと上手く設定されなかったので、cronファイルを直接編集しました
ルートに移行し、cronファイルを直接編集
su
vi /var/spool/cron/hayato
cronファイルに下記の一文を追加
結果
EC2のON/OFFを行っても、毎回同じFQDNでsshが出来るようになりました
ちなみにオンプレのサーバとかでも可能なので、他のダイナミックDNSサービスの代用になるかもしれませんね
Route53はそんなに高くないし