Help us understand the problem. What is going on with this article?

EC2へのElastic IP(固定IP)の割り当てとDDNS

More than 1 year has passed since last update.

[自分用メモ] EC2へのElastic IP(固定IP)の割り当てとDDNS

  • 本ページはEC2への固定IP割り振りを忘れないように作成した自分用のメモです。
  • EC2インスタンスは作成済みで、IPv4パブリックIPが割り振られた状態から説明を開始します。
  • Qiitaの書き方の勉強も兼ねてます。
  • 一部、ID等を記載したままの部分がありますが、この環境は削除済みです。

~目次~
1, IPv4パブリックIPの確認 >>> 開放 >>> 再割当
1-1, IPv4パブリックIPの確認
1-2, IPv4パブリックIPの開放 (EC2インスタンスの停止)
1-3, IPv4パブリックIPの再割当 (EC2インスタンスの起動)
2, Elastic IP(固定IP)の割り当て
2-1, Elastic IP(固定IP)の作成
2-2, Elastic IP(固定IP)をインスタンスへ割り当てる
3, Elastic IPの確認 >>> EC2の停止 >>> 変わらないことの確認
3-1, Elastic IPおよびIPv4パブリックIPの確認
3-2, EC2インスタンスの停止とIPの確認
3-3, EC2インスタンスの起動とIPの確認
4, DDNS(DynamicDNS, 動的DNS)
4-1, DDNSサーバ(no-ip)へ登録する
4-2, AWS Amazon Linux AMIでの設定
4-3, DDNSの動作状態確認
4-4, EC2インスタンスの停止 >>> 起動 >>> 確認
4-5, おまけ


1, IPv4パブリックIPの確認 >>> 開放 >>> 再割当

  • IPv4パブリックIPは、再起動や停止の度に変わるもの。と思ってたら違いました。
    再起動の場合は基本的に、IPv4パブリックIPは変更されません。再起動時にインスタンスは同じ物理ホスト上で保持されるためデータも保持されるとのことです。ということは、物理の移動が発生するような再起動では変わるということですね。
    https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-instance-reboot.html

  • EC2インスタンスのパブリックIP変更について、AWSの方が回答しているものを見つけたのでリンクを貼ります。
    https://forums.aws.amazon.com/thread.jspa?messageID=235216


1-1, IPv4パブリックIPの確認

  • EC2ダッシュボード >>> 左のリストから「インスタンス」を選択

  • 赤枠部分のIPv4パブリックIPが割り当てられていることを確認

    • IPv4パブリックIP = 10.179.51.123
01_before.png


1-2, IPv4パブリックIPの開放 (EC2インスタンスの停止)

  • 対象のインスタンスを右クリック >>> インスタンスの状態 >>> 停止

  • インスタンスの停止を確認されるので「停止する」をクリック

  • 数分待つ >>> インスタンスの状態が「stopped」になり、IPv4パブリックIPが消えたこと確認

02_stop_no-publicIP.png


1-3, IPv4パブリックIPの再割当 (EC2インスタンスの起動)

  • 対象のインスタンスを右クリック >>> インスタンスの状態 >>> 開始

  • インスタンスの開始を確認されるので「開始する」をクリック

  • 赤枠部分から”さっきと違うIPv4パブリックIP”が割り当てられたことを確認。

    • IPv4パブリックIP = 10.179.51.123 ※ さっき
    • IPv4パブリックIP = 13.230.28.163 ※ 今
03_start_publicIP.png




2, Elastic IP(固定IP)の割り当て

個人的に気になることはやはり料金ですね。。。

  • Elastic IPで料金が発生しないパターン
    • 1つのEC2インスタンスに、1つのElasticIPを割り当て、そのインスタンスを起動している。
  • Elastic IPで料金が発生するパターン
    • 発生しないパターンで書いたインスタンスが停止している。
    • 関連付けしていないで放置しているElastic IP。
    • 2つ目以降のElastic IP。   等

※Elastic IP(固定IP)の料金をわかりやすくまとめているサイトがあったのでリンクを貼ります。
EIPで料金発生するパターンとしないパターン #AWS


2-1, Elastic IP(固定IP)の作成

  • EC2ダッシュボード >>> 左のリストから「Elastic IP」を選択

  • 「新しいアドレスの割り当て」をクリック

2-1_create.png
  • 特に何も指定せずに「割り当て」をクリック
2-1_create2.png
  • Elastic IP(固定IP)が割り当てられますので、確認したら「閉じる」をクリック
2-1_create3.png


2-2, Elastic IP(固定IP)をインスタンスへ割り当てる

  • Elastic IPのページを確認すると、先ほど作成されたElastic IPが一覧へ表示
2-2_1.png
  • リスト上部から、アクション >>> アドレスの関連付け
    • リソースタイプ : インスタンス(デフォルト)
    • インスタンス  : Elastic IPを割り当てたいEC2インスタンスを選択
    • プライベートIP : ※空白のままでOK。自動で上記インスタンスが反映
    • 再関連付け   : レ点無し(デフォルト)
2-2_2.png
  • 「関連付け」をクリックし、アドレスの関連付けが成功することを確認して閉じる
2-2_3.png
  • インスタンス列に指定したインスタンスが追加されていることを確認
2-2_4.png


3, Elastic IPの確認 >>> EC2の停止 >>> 変わらないことの確認


3-1, Elastic IPおよびIPv4パブリックIPの確認

  • EC2ダッシュボード >>> 左のリストから「インスタンス」を選択

  • 赤枠部分からElastic IPがIPv4パブリックIPへ割り当てられていることを確認

    • Elastic IP & IPv4パブリックIP = 52.197.210.34
3-1.png


3-2, EC2インスタンスの停止とIPの確認

  • 対象のインスタンスを右クリック >>> インスタンスの状態 >>> 停止

  • インスタンスの停止を確認されるので「停止する」をクリック

  • 数分待つ >>> インスタンスの状態が「stopped」になっても、
    Elastic IPおよびIPv4パブリックIPが消えないことを確認

3-2.png


3-3, EC2インスタンスの起動とIPの確認

  • 対象のインスタンスを右クリック >>> インスタンスの状態 >>> 開始

  • インスタンスの開始を確認されるので「開始する」をクリック

  • 赤枠部分から”Elastic IPおよびIPv4パブリックIP”が変わらないことを確認

    • Elastic IP & IPv4パブリックIP = 52.197.210.34 ※さっき
    • Elastic IP & IPv4パブリックIP = 52.197.210.34 ※今
3-3.png


4, DDNS(DynamicDNS, 動的DNS)

Elastic IP(固定IP)を割り当ててる時にふと思いました。
「AWS で DDNS(DynamicDNS) は使えるのか?」

EC2インスタンスを作成する際にパブリックDNSというのが割り当てられますが(VPCの設定による)、こちらはDNS名内にパブリックIPが入るため、パブリックIPが変更する度にパブリックDNSも変更されます。
  例) ec2-203-0-113-25.compute-1.amazonaws.com
これでは停止の度にIPもDNSも変わってしまい使いづらい。。。無料のDDNSサービスを使って、IPの変更を気にせずに運用したい。。。。。


DDNSをざっくり説明すると、

  • IPアドレスが変動するものへ接続したい場合等に使用する
    • 自宅サーバへアクセスしたいけど固定IPアドレスをもらってない
    • 自宅のペットカメラでペットの様子を見たいけど固定うんぬん
    • Webサーバのくせに変動IPアドレス
  • 接続される側が、IPアドレスが変わる度にDDNSサーバへ伝える
  • DNSへ登録するドメイン名は固定だがIPアドレスは変わる
    • とある日:www.test-aws.co.jp = 1.2.3.4
    • 別の日 :www.test-aws.co.jp = 9.8.7.6
  • 無料で使えるサービスもいっぱいある

でもデメリットもあって、

  • IPアドレスの変更を登録し直してから、それがインターネット全体へ反映されるまでに時間がかかる。
    ※DDNSサービスによりける。数十分?数時間?
  • IPアドレスの変更タイミングは環境によりけり。

安定した接続は望めないですね。タダで自宅にアクセス出来ればいいや、くらいの感じで使うものだと思ってます。

■参考にさせていただいたサイトのURL
Linux インスタンスの動的な DNS のセットアップ

no-ip Knowledge Base / How to Install the Dynamic Update Client on Linux

長生村本郷Engineers'Blog / no-ipでAWSインスタンスの動的ip更新対応 ~いつも同じドメイン名でアクセスしたい~


4-1, DDNSサーバ(no-ip)へ登録する

  • no-ip へアクセスし「Sign UP Now」をクリック
4-2.png
  • 以下の情報を入力し画面下方の「Free Sign Up」をクリック
    • 登録用のe-mailアドレス ※後で確認用のメールが届きます
    • パスワード
    • ドメイン名に使うホスト名 ※今回は「awsddns.hopto.org」にしました
    • 広告メール不要の場合は「Email Opt-in」のチェックを外す
4-3.png
4-5.png
  • 登録したメールアドレスへ確認用のメールが届くので「Confirm Account」をクリック
4-6.png


4-2, AWS Amazon Linux AMIでの設定

試験のため、さっき設定したEC2インスタンスのElastic IPを解除します。
・EC2ダッシュボード >>> Elastic IP >>> 対象のElastic IPで右クリック >>> アドレスの関連付けの解除
・確認が出るので「アドレスの関連付けの解除」をクリック
・EC2ダッシュボード >>> インスタンス
・Elastic IPが消えたことを確認

ターミナルソフトで対象のEC2インスタンスへアクセスしてコマンド入力します。
僕が使用しているEC2インスタンスのAMIは、
「Amazon Linux 2 AMI (HVM), SSD Volume Type 64bit」です。

  • コマンド操作
    ※見るサイト、見るサイトでコマンドラインが違ってて混乱しながらやったため一部抜けてます、、、あくまでも参考程度に見てください・・・。
DDNS(no-ip)登録のコマンド一覧
; Extra Packages for Enterprise Linux (EPEL) リポジトリを有効化
; ※noip2 クライアントにアクセスするため
sudo su
sudo yum-config-manager --enable epel

; noipのサイトからパッケージをダウンロード
cd /usr/local/src
wget http://www.no-ip.com/client/linux/noip-duc-linux.tar.gz
tar xzf noip-duc-linux.tar.gz
cd noip-2.1.9-1
    ; 他のサイトは「cd noip-2.1.9」と記載。cd の前に ls で確認してください。

; noipパッケージのインストール
yum install gcc
    ; 自分はmakeの時に「gcc(コンパイラ)が無い」と言われたため先に入れました
make
make install
    ; noipで登録した「Login email / Password」を聞かれます。

; アクセス権の設定
cp redhat.noip.sh /etc/init.d/noip
chmod 755 /etc/init.d/noip

; noipの起動設定と開始
/sbin/chkconfig noip on
/etc/init.d/noip start

; 起動設定の確認
chkconfig --list noip


4-3, DDNSの動作状態確認

  • no-ipのサイトで確認する

Dynamic DNS このリンクから入って >>> Login >>> 左のリストの「Dynamic DNS4-3_6.png

  • IP/TargetにEC2インスタンスのパブリックIPが表示されていること
4-3_2.png
  • WindowsPCのnslookupコマンドで正引きを実行する
nslookup(正引き)
C:\>nslookup awsddns.hopto.org 8.8.8.8
サーバー:  google-public-dns-a.google.com
Address:  8.8.8.8

権限のない回答:
名前:    awsddns.hopto.org
Address:  18.179.208.41


C:\>
  • 逆引きをすると、AWSのパブリックDNSが表示されるようです。
nslookup(逆引き)
C:\>nslookup 18.179.208.41 8.8.8.8
サーバー:  google-public-dns-a.google.com
Address:  8.8.8.8

名前:    ec2-18-179-208-41.ap-northeast-1.compute.amazonaws.com
Address:  18.179.208.41


C:\>
  • 実際にドメイン名でEC2インスタンスへログインしてみる(TeraTerm使用)
4-3_3.png
4-3_4.png
4-3_5.png

接続出来たぁ!!!


4-4, EC2インスタンスの停止 >>> 起動 >>> 確認

  • EC2インスタンスの停止 >>> 起動をして、パブリックIPを変更してみました。
    • 停止前のIPv4パブリックIP : 18.179.208.41
    • 起動後のIPv4パブリックIP : 18.179.208.65
4-3_7.png
  • no-ipサイトで変更を確認
4-3_6.png
  • WindowsPCのnslookupコマンドで正引きを実行する
nslookup(正引き)
C:\>nslookup awsddns.hopto.org 8.8.8.8
サーバー:  google-public-dns-a.google.com
Address:  8.8.8.8

権限のない回答:
名前:    awsddns.hopto.org
Address:  18.179.208.65


C:\>

パブリックIPが変更されても問題なくDDNSで反映されているようです。


4-5, おまけ

ログイン確認ついでにTeraTermマクロを作成したので載せてみます。
★のところを変えれば他の環境でも使えます。

awsddns_login-macro_20180918.ttl
;; ■概要
;;   AWSの勉強用で、EC2インスタンス(AmazonLinux)へログインするTeraTermマクロです。
;;   ログは以下の場所へ出力されます。
;;     'C:\teraterm\HOSTNAME_YYYYMMDD_HHMMSS.log'
;;
;; ==============================================
;; ★変数やパスの定義(接続先毎にパラメータが変わる)
AWS_DDNS = 'awsddns.hopto.org'   ; IPaddressでも可
HOSTNAME = 'ec2-user'
KEY_FILE = '★自分の秘密鍵ファイル名'
KEY_PATH = '★秘密鍵を置いてるフォルダ'

;; ==============================================
;; ■変数やパスの定義(各装置共通)
;; ログ保存先指定
LOG_FILE = 'C:\teraterm'

;; ログファイル名の設定
getdate DATETIME '_%Y%m%d_%H%M%S.log'
FULLPATH = LOG_FILE
strconcat FULLPATH '\'
strconcat FULLPATH HOSTNAME
strconcat FULLPATH DATETIME

;; プロンプトの作成
PP_LINUX = '^\[.+\][$#]'

;; SSH接続コマンド作成(鍵認証)
COMMAND = AWS_DDNS
strconcat COMMAND ':22 /ssh /2 /auth=publickey /user='
strconcat COMMAND HOSTNAME
strconcat COMMAND ' /keyfile='
strconcat COMMAND KEY_PATH
strconcat COMMAND KEY_FILE

;; ==============================================
;; ■マクロの実働~終了
;; ログ保存先のフォルダが無ければ作成。失敗したら終了。
foldersearch LOG_FILE
if result = 0 then
    foldercreate LOG_FILE
    if result <> 0 then
        messagebox 'Folder Error'
        end
    endif
endif


;; SSH接続
connect COMMAND

;; 接続判定(接続が出来たか確認。)
if result <> 2 then
    messagebox 'Connection Error'
    end
endif

;; 接続判定(5秒以内にプロンプトが表示されないと終了)
timeout = 5
wait '$' '#'
if result = 0 then
    disconnect
    end
endif

;; ログの取得開始(ログが取得されているかの確認)
loginfo logfilename
if result <> -1 then
   ;; ログが取得中→ログ停止して再度ログ取得を開始
   logclose
   logopen FULLPATH 0 1
else
   ;; ログが未取得→ログ取得を開始
   logopen FULLPATH 0 1
endif
sendln ''

;; コマンドの実行
waitregex PP_LINUX
pause 1
sendln ''
sendln 'date'

waitregex PP_LINUX
pause 1
sendln ''
sendln 'uname -a'

;; 接続先に接続したままにするため、SSH接続とログはそのまま

;; マクロ終了
end

DDNSが思った以上に面倒でグダグダになってしまいましたが、以上です。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away