始めに
Amazon VPCのルートテーブルの送信先とターゲット。この2つの用語は意味合いが似ていて、混乱することはないでしょうか。
私も頻繁にわからなくなり、その度に調べ直すことがありました。
今回は自身の備忘のためにも、VPCのルートテーブルが何であるかを解説しつつ、「送信先」と「ターゲット」の意味について解説したいと思います。
忙しい人向けに結論
送信先とターゲットはそれぞれ以下の意味となります。
ルートテーブルの役割
VPCには論理的なルータが内部的に存在しています。
このルータは物理的なハードウェアではなく、VPC内のサブネット間での通信のルーティングを担当する仮想的な存在です。
このルータはVPC内部および外部との通信において適切な経路を決定するためにルートテーブル情報が必要です。
次にルートテーブルの役割を説明する上での例として、VPCにパブリック用とプライベート用のサブネットが作成されていることとします。
さて、この状態で通信パターンを考えてみましょう。
まず同じサブネット内の通信ですが、この場合は同じネットワークセグメント内の通信であるため、ルータを経由する必要がありません。
次に送信元の所属するサブネット外との通信ですが、こちらは逆にルータを経由しての通信が必要となり、このときにルータはサブネットに紐付けられたルートテーブルを参照してルーティングを行います。
実はサブネットを作成すると、下の図のようにVPC作成時に作られるデフォルトルートテーブルが自動で紐付けられます。
加えて、このルートテーブルにはローカルルートと呼ばれるルート情報がデフォルトで含まれています。
上図のデフォルトルートテーブルのローカルルート情報を見ていきましょう。
ここでようやく送信先とターゲットというキーワードが出てきました。
それぞれ下記のような意味を持ちます。
- 送信先(Destination):
ルーティング対象のIPアドレス範囲、すなわちCIDRブロックを指します。デフォルトルートテーブルでは、送信先としてVPCのCIDRブロック(例: 10.0.0.0/16)がlocalルートとして設定されています。このルートはVPC内のリソース間の通信を許可するためのものです。 - ターゲット(Target):
送信先ネットワークにトラフィックを送信するためのゲートウェイやインターフェイスを指します。デフォルトルートテーブルにおいて、ターゲットとして指定されているのはlocalです。これは外部のゲートウェイやインターフェイスを経由せずに直接ルーティングされることを意味します。
つまり、上記のデフォルトルートテーブルの意味は、 VPC内のネットワークを経由(ターゲット)して、同じVPCである[10.0.0.0/16] 宛(送信先)にトラフィックを送信するということになります。
[補足]インターネットと通信をするためには?
上記ではサブネット間での通信を題材に紹介しましたが、
サブネットからインターネットに出るためのルートテーブルの設定も見ていきたいと思います。
下記のようにパブリックサブネットからインターネットにアクセスしたい要件があったとします。
先に紹介した通り、インターネットとアクセスさせるためには、ルートテーブルに経路を追加する必要があります。
今回、既存のルートテーブルを編集してしまうと、同一のルートテーブルが紐づいているプライベートサブネットも外部インターネットに通信できるようになってしまうため、新規のルートテーブルを作成します。
次に、新しいルートテーブルを作成し、パブリックサブネットに関連付けます。
作成したルートテーブルには以下のルート情報を追加します。
- 送信先・・・すべてのIPv4の宛先(0.0.0.0/0)
- ターゲット・・・事前に作成したインターネットゲートウェイ(igw-xxxxxx)
※あらかじめ、インターネットゲートウェイを作成しておく必要があります
追加した場合の構成は下記のようになります。
この状態で、パブリックサブネットからインターネットにアクセスをしようとすると、ルータはルートテーブルの送信先エントリの中から、トラフィックの宛先IPアドレスに一致するものを探します。
今回追加したルートの0.0.0.0/0はすべてのIPv4のアドレスを意味するCIDRブロックですので、他に一致するブロックがない場合はこのルートが選択されます。
0.0.0.0/0のターゲットがインターネットゲートウェイに設定されているので、トラフィックはこのゲートウェイを経由してインターネットに接続します。
以上がインターネットに接続するためのルートテーブルの設定についてです。
まとめ
今回、VPCのルートテーブルにおける「送信先」と「ターゲット」の役割を詳しく見てきました。特に、VPC内の通信をスムーズに行う「local」ターゲットや、サブネットとの関連付けについてのポイントを紹介しました。これが皆さんのAWS内の通信の流れや仕組みについての理解の一助となれば幸いです。