«前の日記(2016-08-06) 最新 次の日記(2016-09-13)» 編集

meta's blog - The Power To Serve

筆者について - No Unix, No Life

日本xrdpユーザ会発起人。

とある元大学院生の UNIX 系日記。FreeBSDを通じてOSSに囁かな貢献を。 FreeBSD ports contributor やってます。

For non Japanese native people:
If you are interested in my articles, please leave comments. I will do my best to give you articles in English.


2016-09-12 オンプレミスでも自分の IP アドレスを OS 起動時に Route 53 に登録したい [長年日記]

オンプレミスでも自分の IP アドレスを OS 起動時に Route 53 に登録したい

やること

タイトルの通り。OS 起動時に自分の IP アドレスを Route 53 に登録する。IP アドレスは特定のインターフェイスについているものを使う。

必要なもの

オンプレミスなので OS が Amazon Linux ではなく、AWS Tools はインストールされていないので、これらを使わずなるべく小さいフットプリントで済ませる方向で行きます。別にインストールしてもいいんですが、OS によってインストール方法が異なったり、Python2 一式インストールしたり、いろいろめんどくさいのでやらなくていいことはやらない方向で。

  • Route 53 へのアクセス権を持ったアクセスキー
  • cli53

cli53 は以前は Python2 で書かれていたみたいですが、今は Go で書かれていてコンパイル済みの実行バイナリを配布しているので、CLI から Route 53 をあれこれするのに1ファイルだけダウンロードして設置すればよくてたいへん助かります。

後で使うスクリプトは FQDN が host01.west.example.jp. だった場合、 west.example.jp. ゾーンに host01 が登録されるという構造を前提にしています。example.jp. ゾーンに host01.west を登録するなどのゾーン構造を持つ場合、スクリプトの修正が必要です。

環境

とりあえず Scientific Linux 7.2 で。route53 というユーザを作ってそれを使います。他の OS は適当にお好みで改変してください。

準備

Scientific Linux 7.2 の場合、$HOME/.local/bin にパスが通っているので、諸々そこに置くことにします。

置き場のディレクトリを作って、cli53 をダウンロードして実行権をつける。

$ mkdir -p ~/.local/bin
$ curl -L https://github.com/barnybug/cli53/releases/download/0.8.3/cli53-linux-amd64 > cli53
$ chmod +x ~/.local/bin/cli53

AWS のアクセスキーを置いておく。~/.aws/credentials を以下のような感じに。ここで例示しているアクセスキーは無効化したものです。

[default]
aws_access_key_id = AKIAINLJV4YYBZPML3CA
aws_secret_access_key = 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

インターフェイスに付いている IP アドレスを取得して Route 53 に登録するスクリプトを ~/.local/bin/update-route53 として保存して実行権をつけておきます。

インターフェイスに IP アドレスがついていなかったら RR を削除するようになっています。当然、ネットワークに繋がっていなければ更新できないので、IPv4 または IPv6 アドレスのみがついていた場合に、もう片方を削除するという想定です。

実験

インターフェイス名を引数に実行してみます。

$ update-route53 enp3s0
Created record: 'example.vmeta.jp. 60 IN A 192.168.3.34'

セット

準備ができたら crontab に仕込みます。~/.local/bin/ 以下に置いた cli53 とスクリプトが実行できるように、

$ printenv PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/route53/.local/bin:/home/route53/bin

の結果を crontab にも書いておきます。

PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/route53/.local/bin:/home/route53/bin
@reboot update-route53 enp3s0

こんな感じ。これだと OS 起動時にしか実行されないので、OS 起動以外のタイミングで IP アドレスが変わったのに追従したければ、定期的に実行するなり /etc/network-scripts/ifup-* の中に仕込むなりお好みで。

まとめ

以下の4ファイルを準備すればOK。awscli がインストールされていない環境になんやらかんやらをあーしてこーしてやるより多少は楽なんじゃないでしょうか。

  • ~/.local/bin/cli53
  • ~/.local/bin/update-route53
  • ~/.aws/credentials
  • crontab