AWSのVPCにアサインするアドレス(CIDRブロック)について

 AWSのVPCにアサインするアドレス(CIDRブロック)について纏めます。

原則・前提ルール

  • 以前(VPC登場当初)のルール
    • VPC作成時にCIDRブロックを「/16~/28」の範囲で1つだけ割り当てる
    • 変更できない
  • 2017年8月の拡張以降
    • VPC作成時にCIDRブロックを最低1つ割り当てる。これを「プライマリCIDRブロック」とする
    • 2つ目以降のCIDRブロックを「追加」することが可能→様々な条件があるので、これは後述します
    • プライマリCIDRブロックは変更、削除できない
    • セカンダリCIDRブロックの削除は、使っていなければ可能。変更は削除、追加

VPCに割り当てできるアドレスについて

ソースはこちらです

アドレスの範囲

プライベートアドレスレンジ(RFC1918で定義される)から割り当てることを「推奨」。強制ではありません。

  • 10.で始まるアドレスすべて=10.0.0.0/8(10/8と書く場合があります)
  • 172.16.~172.31.で始まるアドレスすべて=172.16.0.0/12(172.16/12)
    • 時折勢い余って172.32.を社内でアサインされていることがありますねw
  • 192.168.で始まるアドレスすべて=192.168.0.016(192.168/16)

プライベートアドレスレンジ以外、例えばいわゆる「グローバルアドレス」から割り当てることも可能です。組織内では正規に割り当てられた「グローバルアドレス」を使うこともあるでしょうし、非正規の「勝手グローバルアドレス」をやむなく使っている場合もあります。外部との通信に影響が無い限りは問題はありません。

ただし、たとえ自組織に正規に割り当てられたグローバルアドレスであっても、VPCにアサインした場合はそのままインターネットとの通信に使用することはできず、必ずEIP等のAWSからアサインされたアドレスにNATすることになります。VPCにアサインするのはあくまでも、「LAN/プライベートなアドレス空間として使うアドレス」に限ってください。なお、自組織が正規にアサインされたアドレスをAWS内でインターネットに接続するアドレス(EIP等)として使いたい場合は「BYOIP/アドレス持ち込み」を行います。

元々RFC等で用途が決まっている「特殊なアドレス」の中には、VPCにアサインできないアドレスが存在します。纏まって説明されている公式ドキュメントが見当たらないのでリストとしては暫定版でお願いします。Googleクラウドの禁止リストとほぼ同等だろうと思いますので参考にしました。

  • 0.0.0.0/8(範囲はたぶん)
  • ローカルホストアドレス:127.0.0.0/8
  • リンクローカルアドレス:169.254.0.0/16
  • マルチキャストアドレス:224.0.0.0/4

特殊なアドレスのリストとしてはこちらが分かりやすかったですが、上記以外のアドレスはすべてVPCのプライマリアドレスとして作成することはできました。

セカンダリCIDRブロックの範囲

ソースはこちらです。

  • 追加にあたっては前提として以下のような条件があります。下に行くほど限定的な条件下での制限になります
    • 既存のCIDRブロックと重複するCIDRブロックを追加はできません
    • プライマリCIDRブロックは削除も、サイズ変更もできない
    • セカンダリCIDRは使っていなければ削除は可能だが、サイズ変更はできない
    • ルートテーブルのエントリ数の制限までしか追加できません
      • CIDRブロックを追加するとルートテーブルに反映されるため、と思われます
    • VPCに既存のルートテーブルのエントリよりもマスクが短い(サイズが大きい)CIDRブロックは追加できません
      • 理由が分からないなぁ
    • VPCピアリングがある場合、ピアVPCのCIDRブロックと重複するCIDRブロックは追加できません
      • ピアリングのステータスによっても制限があります
    • ダイレクトコネクトゲートウェイでダイレクトコネクト接続している場合、そのダイレクトコネクトゲートウェイに関連付けられたVPC同士で重複するCIDRブロックは追加できません
  • プライマリが10.0.0.0/8 の範囲のときは、以下の範囲は追加できません
    • 172.16.0.0/12の範囲

    • 192.168.0.0/16の範囲

    • プライマリが10.0.0.0/15 の範囲 (10.0.0.0~10.1.255.255) からである場合、10.0.0.0/16 の範囲 (10.0.0.0~10.0.255.255)

    • 198.19.0.0/16 の範囲

  • プライマリが172.16.0.0/12の範囲のときは、以下の範囲は追加できません
    • 10.0.0.0/8の範囲

    • 192.168.0.0/16の範囲

    • 172.31.0.0/16の範囲

    • 198.19.0.0/16 の範囲

  • プライマリが192.168.0.0/16の範囲のときは、以下の範囲は追加できません
    • 10.0.0.0/8の範囲
    • 172.16.0.0/12の範囲
    • 198.19.0.0/16 の範囲
  • プライマリが198.19.0.0/16 の範囲のときは、以下の範囲は追加できません
    • 10.0.0.0/8の範囲
    • 172.16.0.0/12の範囲
    • 192.168.0.0/16の範囲
  • プライマリがプライベートアドレス範囲外のときは、以下の範囲は追加できません
    • 10.0.0.0/8の範囲
    • 172.16.0.0/12の範囲
    • 192.168.0.0/16の範囲
    • 198.19.0.0/16 の範囲

謎制約が散見されますね。いくつか試してみました

  • プライマリをプライベートにしておくとプライベート範囲外の追加は自由ですが、プライベート以外がプライマリだとプライベートの範囲の追加ができません。
  • 172.31.0.0/16の範囲をプライマリにしておくと172.16-172.30までの範囲の追加は可能ですが、逆ができません。

アドレスのサイズ

CIDRブロックのサイズは/16~/28の範囲です。こちらはサブネットでも共通しています。大きく取ったほうが内部で多数のサブネットを作れます。ただ、それだけの範囲を現在のネットワークから取り出せるかどうか確認しなければなりません。また、VPCを追加していく可能性もありますから、1つのVPCにすべての範囲をアサインしていい訳でもありません。

AWSのVPCにアサインするCIDRブロックの範囲を決定して現在のネットワークに反映(管理資料に書くとか、静的ルートを向けるとか)した上で、実際のVPCへのアサインは都度、必要な範囲と拡張余地を考慮して決定していく、ということになりますね

コメント

このブログの人気の投稿

『マルチクラウドネットワークの教科書』 を書きました

【非ドコモユーザの】電波が届かないキャンプ場対策