IPv6 Onlyでインターネット公開するAWSのEC2

Page content

1.目的

AWSにおいて2024年2月1日よりパブリックIPが課金対象となることから、パブリックIP/Elastic IPを使わない構成として、IPv6 Onlyでインターネット公開するEC2を構築したいです。

なお、パブリックIPは1IPで1時間あたり0.005ドルであることから、24時間365日利用すると年間43.8ドルとなり日本円で6,570円(為替150円/ドルの場合)の費用がかかるので、個人には痛い出費に。。。

2.想定読者

  • AWS初心者(コンソールからEC2インスタンスを立ち上げることができる)
  • ネットワーク初心者(IPv6についての最低限の理解がある)
  • サーバ初心者(SSHでログインができる)

3.環境

4.手順

a)VPC作成

  1. VPCダッシュボードから[VPCを作成]

  2. リソースを作成

    • “作成するリソース"では[VPCなど]を選択することで、サブネットなど一括で作成できるので便利
    • “名前タグ"はデフォルトでもよいし、自分の好きな文字列にしてもよい
    • “IPv4 CIDRブロック"はデフォルトでもよいし、利用予定のサブネットを設定してもよい
    • “IPv6 CIDRブロック"は[Amazon 提供のIPv6 CIDRブロック]を選択

    • “アベイラビリティゾーン (AZ) の数"は1にする(検証で使うだけなので)
    • “パブリックサブネットの数"は1にする(検証で使うだけなので)
    • “プライベートサブネットの数"は0にする(検証で使うだけなので)
    • “VPC エンドポイント"は0にすることにより、EC2とインターネットの通信がIPv6であることを確実に確認する

    • [VPCを作成]を実行後、右下の[VPCを表示]

b)サブネットの確認

  1. Subnetsメニューから作成したサブネットを選択

  2. 各設定状況を確認

    • “IPv6 CIDR"が割り当てられていることを確認
    • “パブリック IPv4 アドレスを自動割り当て"が[いいえ]であることを確認

c)ルートテーブルの確認

  1. Route tablesメニューから作成した経路情報を選択

  2. “ルート"タブで経路設定の内容を確認

    • IPv6のデフォルトルート(送信先が::/0の行)のターゲットがInternet Gateway(igw-で始まる)になっていること

d)インターネットゲートウェイの確認

  1. Internet Gatewayメニューにて、今回作成したインターネットゲートウェイを選択

    • 今回作成したVPCに[Attached]となっていることを確認

e)セキュリティグループの作成

IPv6でEC2に対してSSH接続を許可するセキュリティグループを作成します。

  1. VPCダッシュボードの"Security groups"メニューを開き、[セキュリティグループを作成]

  2. セキュリティグループ名と説明、適用するVPCを指定

  3. インバウンドルール編集

    ここでは「IPv6のすべてのICMP」とIPv6のSSHを許可します。IPv6のSSHではソースを指定するのですが、ここでIPv6の落とし穴があります。一時IPv6アドレスを指定してしまうと、後で接続できなくなりますのでご注意ください。

  4. アウトバウンドルール

    ここはすべて許可します。なおIPv6 Onlyですので、EC2からインターネットへの通信において、インターネット側のサーバもIPv6対応している必要があります。IPv4では通信できません。

  5. セキュリティグループを作成

  6. セキュリティグループ確認

    作成したセキュリティグループの内容が間違いないことを確認します。

f)EC2インスタンスの起動

今回作成したVPCにEC2インスタンスを立ち上げます。

  1. EC2ダッシュボードのインスタンスメニュー

  2. 任意の名前でAmazonLinxu2023を作成

  3. インスタンスタイプは無料枠のt2.micro、キーペアはテスト用に作成しておいたものを使います

  4. ネットワーク設定は「編集」から赤枠のように、今回作成したVPC/サブネット/セキュリティグループを割り当てます。

    ※「パブリックIPの自動割り当て」は必ず無効化します

  5. ストレージやインスタンス数は任意の値を指定します

  6. インスタンス起動待ちです

  7. 起動後にIPv6アドレスを確認します

g)接続確認

TeratermからEC2にIPv6で接続してみます。TeratermでIPv6を使う場合は [ ] でIPv6アドレスを囲む必要があります。

  1. IPアドレス入力

  2. 鍵ファイルを指定

  3. ログイン成功を確認

UbuntuからEC2にIPv6で接続してみます。秘密鍵ファイルはopenssh形式に変換したものを使います。

  ```
  $ ssh -i aws-mykey-ed25519_openssh.ppk ec2-user@2406:da14:df6:a400:b018:c9a2:83f6:8342
    ,     #_
    ~\_  ####_        Amazon Linux 2023
    ~~  \_#####\
    ~~     \###|
    ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
    ~~       V~' '->
      ~~~         /
        ~~._.   _/
          _/ _/
        _/m/'
  Last login: Fri Oct 27 04:19:22 2023 from 240d:1a:4f6:c400:a560:c6cc:4998:fb0f
  [ec2-user@ip-10-0-2-199 ~]$
  ```

無事に接続することができました。セキュリティグループでhttpやhttpsを許可することで、Webページの公開も可能です。

5.デメリット

IPv6 OnlyでEC2を構築したものの、EC2から外部への通信にかなり大きい制約(※)が出てしまうことがわかりました。

なので、結論としてはIPv4とIPv6のデュアルスタック構成の方が現実的であると思いました。

※)接続先のインターネットサーバ(サービス)がIPv6対応していないと通信できない