Ubuntu Weekly Recipe

第334回 Route 53でダイナミックDNSを運用する

この記事を読むのに必要な時間:およそ 6 分

梅雨も明け,本格的な夏を迎えましたが,皆様のサーバーはお元気にお過ごしでしょうか。

VPSやクラウドサービスが気軽に使えるようになりましたが,ファイルサーバーのように,自宅内に置いておく必要のあるサーバーもまだまだありますよね。筆者も自宅に,Ubuntu Serverを何台か動作させています。そしてモバイル全盛のこの時代,インターネットからアクセスできないのでは,自宅サーバーの魅力も半減というものです。そのため,SSHの踏み台サーバーなどを用意して,インターネットから自宅内へアクセスできるように設定している方も多いのではないでしょうか。

インターネットから自宅内部へアクセスするためには,アクセス先としてブロードバンドルーターなどに割り振られたグローバルIPアドレスを知っておく必要があります。ここで問題になるのが,プロバイダから割り振られるグローバルIPアドレスが,常に一定であるとは限らないということです。現在の日本では,ネット回線は繋ぎっぱなしが当たり前になっているため,IPアドレスは大昔のダイアルアップ時代に比べれば,そうそう頻繁に変わることはなくなりました。しかしたとえばルーターを再起動したタイミングなど,ある日突然変化する可能性は存在します注1)⁠

そこで登場するのがダイナミックDNSです。ダイナミックDNSは,動的に変化したIPアドレスをDNSサーバーに登録することができるサービスです。ダイナミックDNSを利用すれば,IPアドレスの変化を気にすることなく,決まったドメイン名でいつでも自宅にアクセスすることが可能になります。

注1)
プロバイダの固定IPアドレスサービスなどを契約している方もいらっしゃるでしょうが,あくまで一般的なご家庭の話ですので,ご了承ください。

Route 53でダイナミックDNS

ダイナミックDNS自体は,それほど珍しいサービスではありません。最近の家庭用ブロードバンドルーターには,メーカーやプロバイダの運営するダイナミックDNSサービスに,自身のIPアドレスを登録する機能が実装されているものもあります。しかしこれらはお手軽ではあるものの,

  • 決められたドメインのサブドメインとして登録されるため,自分のドメインが使えない
  • それなりにお金がかかる(場合がある)注2

というデメリットもあります。

そこで筆者はAWSのDNSサービスであるRoute 53を使い,自宅サーバー用のレコードを動的に登録することにしました注3)⁠

注2)
筆者が調べたところ(無料のものもありましたが)年間2~3,000円前後かかることがあるようです。対してRoute 53であれば,1ゾーンあたり月額0.5ドルとお求めやすい価格となっています。名前解決のクエリごとに別途課金されますが,100万クエリあたり0.5ドル(それに満たない場合は割られます)ですので,自宅サーバーのレベルであれば気にしないで良いでしょう。実際に筆者の支払い情報を見たところ,月あたり10,000クエリ未満で,支払い額は0.01ドルでした。
注3)
ここでは新規のドメインを取得した状態であることを前提に説明しますが,実際は筆者が今まで利用していたレジストラのDNSサービスの使い勝手が悪く,Route 53への引越ししようとした事が発端です。

ゾーンの作成

まずドメインのゾーンを作成しましょう。既存のドメインのサブドメインとして運用する場合のように,既にRoute 53上にゾーンが存在し名前解決ができるようになっている場合は,ゾーンIDの確認のみ行ってください。

AWSにログインし,Console Homeから「Route 53」を開きます。次に「Create Hosted Zone」をクリックし,右側のペインにドメイン名を入力したら「Create」をクリックしてください。これでゾーンが作成されます。作成されたゾーンには,自動的に「Hosted Zone ID」というユニークなIDが割り振られています。これは後で使用しますので,どこかに控えておきましょう。また自動的にNSレコードが作成され,ネームサーバーが割り当てられています。このネームサーバーを,ドメインの権威サーバーとして登録しておいてください注4)⁠これで,レコードを登録する準備が整いました。

図1 ゾーンが作成され,レコードを登録する準備が整った

図1 ゾーンが作成され,レコードを登録する準備が整った

注4)
ネームサーバー変更の申請手順はレジストラごとに異なるため,詳細は割愛します。詳しくはドメインを取得したレジストラにご相談ください。また前述の通り,筆者はレジストラのDNSサーバーで対象ドメインを既に運用していたため,既存のレコードをRoute 53のゾーンにも設定したり,引越し元のNSレコードを云々したりといった作業があったのですが,それはそれとしておきます。

ユーザーの作成とポリシーの定義

AWSのAPIを叩くには,適切な権限が与えられたユーザーアカウントが必要です。AWS Identity and Access Management(IAM)を使い,Route 53の特定のゾーンにのみ変更を加えられる,最小限のアカウントを作成しましょう。

Console Homeから「IAM」を開きます。左ペインの「Users」をクリックすると,現在のユーザー一覧が表示されます。ここで「Create New Users」をクリックします。作成したいユーザー名を入力し,⁠Generate an access key for each User」にチェックを入れて「Create」をクリックしてください。ユーザーが作成され「Access Key ID」「Secret Access Key」が表示されました。このタイミングでホームディレクトリに「.aws-secrets」というファイルを作成し,以下を参考にIDを記述してください。また他人から中身を見られないよう,ファイルのパーミッションは600にしておいてください。

%awsSecretAccessKeys = (
   "任意の名前" => {
      id => "アクセスキーID",
      key => "シークレットキーID",
   },
);

図2 ユーザーが作成され「Access Key ID」「Secret Access Key」が表示された

図2 ユーザーが作成され「Access Key ID」と「Secret Access Key」が表示された

作成したばかりのユーザーには,権限が付与されていません。⁠Permissions」タブ内の「Attach User Policy」をクリックすると,ポリシーを設定するダイアログが開き,テンプレートからポリシーを選択したり,あるいはカスタマイズしたポリシーを作成することができます。Route 53にフルアクセスできるポリシーと,読み取り専用アクセスのポリシーがテンプレートに存在するのですが,どちらも今回の目的には合いませんので,ここでは「Policy Generator」で作成することにします。

「Policy Generator」では,必要な項目を選択するだけでポリシーを生成してくれます。特定のDNSゾーンに対するリソースの読み取りと変更を可能にするためには,以下の内容を設定してください。指定したゾーンにおいて,レコードの一覧表示とレコードの変更が可能になります。

EffectAllow
AWS ServiceRoute 53
ActionsChangeResourceRecordSets, ListResourceRecordSets
ARNarn:aws:route53:::hostedzone/ゾーン作成時にメモしたゾーンID

「Add Statement」をクリックしてポリシーを追加したら,⁠Continue」をクリックします。作成したポリシーは,⁠Simulate Policy」でテストすることができます。必要な権限が付与されているか,また不要な権限が許可されていないか,チェックしておくと良いでしょう。

図3 ⁠Permissions」タブ内の「Attach User Policy」をクリックする

図3 「Permissions」タブ内の「Attach User Policy」をクリックする

図4 必要な権限が付与されているか,また不要な権限が許可されていないかをチェックする

図4 必要な権限が付与されているか,また不要な権限が許可されていないかをチェックする

著者プロフィール

水野源(みずのはじめ)

Ubuntu Japanese Teamメンバー。理想のフリーデスクトップ環境を求めて東へ西へ……のはずが,気がついたら北の大地で就職していたインフラ寄りのエンジニア。株式会社インフィニットループ所属。

コメント

コメントの記入