よくAWSの試験で出題される　Site to Site VPN 、BGP 経路制御

よくAWSの試験で出題される
Site to Site VPN 、BGP 経路制御、
に関する情報を整理しました。
--

__サイト間VPNとは、2つの異なる物理的な場所にあるネットワークを仮想的に接続する技術です。__
AWSは、サイト間VPNを構築するための仮想プライベートネットワーク（VPN）を提供しています。サイト間VPNを利用することで、安全で暗号化されたトンネルを通じて、オンプレミスのデータセンターやオフィスとAWSクラウド間でデータを転送できます。

サイト間VPN環境構築手順
--
__1).__ オンプレミス側にVPN接続をサポートするハードウェアまたはソフトウェアを用意し、
VPN接続用の __パブリックIPアドレスを取得__ します。
__2).__ AWSコンソールで、VPCを作成し、VPC内にサブネットを作成します。
また、 __Virtual Private Gateway（VGW）を作成してVPCにアタッチ__ します。

VPNを終端するエンドポイントは、あくまでVGWです。
全く同じIPアドレスをもった2つのシステムを別のVPCに用意して
A面/B面として切り替えて利用する事も出来ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920213/29535129-423b-f5ad-5d11-b7036d547205.png)
__3).__ AWSコンソールで、__サイト間VPN接続を作成__ します。
VPN接続には、VPN GatewayとCustomer Gatewayが必要です。VPN GatewayはVGWを指します。
__4).__ __Customer Gatewayを作成__ し、
先ほど取得したオンプレミス側のパブリックIPアドレスを使用して、設定を行います。
この際、オンプレミス側のVPN接続の設定も合わせて行う必要があります。
__5). VPN接続をアタッチし、ルーティングを設定__ します。
AWS側のルートテーブルにVPN接続で接続されるオンプレミス側のネットワーク情報を追加することで、
VPC内のリソースがオンプレミスネットワークに到達できるようになります。
__6).VPN接続の状態を確認__ し、接続が正常に機能していることを確認します。

__余談ですが、DirectConnectでは、CGWを定義する必要はなく、
代わりにVIF仮想インターフェースを作成します。__


Site to Site VPNおよびDirectConnectで、
重複するルートが存在する場合、
どのような優先順位でルートを決めているのか?
--

__1.ロンゲストマッチ（宛先ネットワークがより詳細に絞り込まれているルート）__

例）
192.168.0.0/16 より 192.168.1.0/24 より 192.168.1.1 が優先される。

__2.DirectConnectとSite to Site VPNではDirectConnectが優先__

__3.Site to Site VPNで静的ルートとBGPルートでは、静的ルートが優先__

__4.BGPルートの中ではAS PASHが最短のものが優先__

BGPプロトコルにおいて、AS PATHは、BGP経路の優先度を決定するための
重要なメトリックの1つです。
AS PATHは、パケットが経由するAS番号のシーケンスを示します。
AS PATHの長さが短いほど、経路が直接的であることを示し、BGPルートの優先度が高くなります。

例）
AS PATHが短いルートが最優先されるため、2つのBGP経路が存在する場合、
AS PATHが1つしかないルート（path 65000）が、
AS PATHが3つあるルート（path 64800 64999 65000）よりも優先されます。
結果として、「10.0.0.3」eth1を経由する通信経路を取ります。
~~~
show ip bgp 192.168.0.0/24
~~~

~~~
BGP routing table entry for 192.168.0.0/24, version 12
Paths: (2 available, best #2, table default)
  Not advertised to any peer
  65000
    10.0.0.1 from 10.0.0.1 (172.31.45.31)
      Origin IGP, metric 0, localpref 100, valid, external
      path 64800 64999 65000
      metric 100
      via 10.0.0.2, eth0
  65000
    10.0.0.1 from 10.0.0.1 (172.31.45.31)
      Origin IGP, metric 0, localpref 100, valid, external
      path 65000
      metric 200
      via 10.0.0.3, eth1
~~~

__5.AS PATHが同じ場合はMED（Multi-Exit Discriminator）が最小のものが優先__
例）
AWS BGPで、ルートのMED値を表示するには、SHOW IP BGPコマンドを使用します。
例えば、以下のコマンドを実行すると、AS 65000からのBGP経路が表示され、
そのうちの一つのルートのMED値が100であることが示されます。
結果として、「10.0.0.2」 eth0を経由する通信経路を取ります。
~~~
show ip bgp 192.168.0.0/24
~~~

~~~
BGP routing table entry for 192.168.0.0/24, version 12
Paths: (2 available, best #2, table default)
  Not advertised to any peer
  65000
    10.0.0.1 from 10.0.0.1 (172.31.45.31)
      Origin IGP, metric 0, localpref 100, valid, external
      path 64800 64999 65000
      metric 100
      via 10.0.0.2, eth0
  65000
    10.0.0.1 from 10.0.0.1 (172.31.45.31)
      Origin IGP, metric 0, localpref 100, valid, external
      path 64800 64999 65000
      metric 200
      via 10.0.0.3, eth1
~~~

__余談ですが、AWS MED属性　 Local Preference属性　どちらが優先されるのか？__
AWSでBGPルーティングを構成する場合、Local Preference属性が優先されます。つまり、BGPルーターはLocal Preference属性が最も高い経路を選択します。ただし、同じLocal Preference属性値を持つ場合、次にMED属性が考慮されます。MED属性は、同じAS内で複数のルーターが同じ宛先ネットワークに到達可能な場合に使用される属性です。したがって、MED属性は、異なるAS間のルート選択には影響を与えません。

AWSでサイト間VPNを設定する場合のBGPの設定方法
--
__AWS側のBGP設定手順__
1.AWSコンソールにログインし、VPCのダッシュボードを開きます。
2.左側のメニューから「Virtual Private Network (VPN)」をクリックします。
3.「Site-to-Site VPN Connections」タブを選択し、「Create VPN Connection」をクリックします。
4.「Create VPN Connection」ページで、以下の情報を入力します。
「Name tag」で、VPN接続の名前を入力します。
「Virtual Private Gateway」で、VPN接続に使用するVPGを選択します。
「Customer Gateway」で、カスタマーサイトのVPNデバイスの情報を入力します。
「Routing Options」で、「Dynamic Routing」を選択し、「BGP」を選択します。
「BGP ASN」で、AWS側のBGP ASNを入力します。
「BGP Hold Time」で、BGPホールドタイムを設定します。
「BGP Keepalive」で、BGPキープアライブを設定します。
「BGP IP Address」で、AWS側のBGP IPアドレスを入力します。
「Create VPN Connection」ページの下部にある「Create VPN Connection」をクリックして、VPN接続を作成します。

__カスタマー側のBGP設定手順__
1.カスタマーサイトのVPNデバイスにログインします。
2.BGPの設定を開始します。
3.「neighbor」コマンドを使用して、AWS側のBGP IPアドレスとASNを指定します。
4.「network」コマンドを使用して、カスタマーサイト内のローカルネットワークを指定します。
5.BGPの設定を保存して適用します。

__1.AWS側のBGP設定例__
~~~
router bgp 65000
 bgp log-neighbor-changes
 neighbor 169.254.0.2 remote-as 7224
 neighbor 169.254.0.2 ebgp-multihop 3
 network 10.1.0.0/16
 network 10.2.0.0/16
 network 10.3.0.0/16
~~~

ここで、neighborコマンドでVPN接続相手のIPアドレスとリモートAS番号を指定しています。
ここでは、カスタマーサイトのIPアドレスを169.254.0.2としています。
また、remote-asコマンドを使用して、カスタマーサイトのAS番号を7224に設定しています。

さらに、ebgp-multihopコマンドを使用して、AS番号が異なる場合に複数のホップを跨ぐことができるように設定しています。ここでは、3ホップまで跨ぐことができるように設定しています。
ebgp-multihopオプションは、ホップ数が3以上ある場合に使用します。

最後に、networkコマンドを使用して、AWS側のBGPで配布するネットワークアドレスを指定しています。
ここでは、10.1.0.0/16、10.2.0.0/16、10.3.0.0/16の3つのネットワークアドレスを配布するように設定しています。

__2.VPN接続相手側のBGP設定例__
~~~
router bgp 7224
 bgp log-neighbor-changes
 neighbor 169.254.0.1 remote-as 65000
 network 192.168.1.0/24
~~~
neighborコマンドでVPN接続相手のIPアドレスとリモートAS番号を指定しています。
networkコマンドでBGPで広告するネットワークを指定します。

router bgp 7224
BGPプロトコルのルーティングプロセスを有効にするために、BGP AS番号7224でルーターにBGP機能を設定します。

bgp log-neighbor-changes
BGP隣接関係の変更をログに記録するように設定します。

neighbor 169.254.0.1 remote-as 65000
AWS側のBGPルーターのIPアドレスである169.254.0.1とeBGP隣接関係を確立するための設定を行います。
remote-asは相手側のBGP AS番号を指定します。

network 192.168.1.0/24
BGPルーティング情報として送信するローカルネットワークの範囲を指定します。
この例では、192.168.1.0/24ネットワークに接続されたサブネットのルーティング情報をAWS側に通知することができます。

__3.ルーティング設定例__
VPN接続相手側のBGPで広告されたネットワークに対するルーティング設定を行います。

AWS側の設定
~~~
ip route 192.168.1.0/24 Tunnel1
~~~
このコマンドは、192.168.1.0/24の宛先アドレスに対してTunnel1を介してルーティングするようにAWSのルーティングテーブルに静的ルートを追加するものです。ここで、Tunnel1はAWSの仮想プライベートゲートウェイとVPN接続の間で作成されたIPsecトンネルの名前です。これにより、192.168.1.0/24の宛先アドレスへのトラフィックは、VPN接続を介して相手先のネットワークに到達できます。

VPN接続相手側の設定
~~~
ip route 10.1.0.0/16 Tunnel0
ip route 10.2.0.0/16 Tunnel0
ip route 10.3.0.0/16 Tunnel0
~~~
この設定は、VPN接続相手側のルーターで、AWS側のVPC内にある10.1.0.0/16、10.2.0.0/16、10.3.0.0/16に属するネットワークへのアクセスに必要なルーティングを設定しています。具体的には、これらのネットワークへのトラフィックはTunnel0と呼ばれるトンネルインターフェースを介して伝送されるようになっています。つまり、VPN接続相手側のルーターは、これらのネットワークの宛先アドレスを持つパケットをTunnel0に転送し、Tunnel0を通じてAWSのVPCに接続することができます。

__■AS番号の指定とは？__
--

AS番号の指定とは、BGPにおいて自身が所属するAS番号を指定することを指します。
AS番号はグローバルに一意である必要があるため、自身のAS番号を正しく指定することが重要です。
AWSにおいては、VPN接続においてAS番号を指定する必要はありません。
__AWSのVPN Gatewayは、自動的にローカルAS番号を割り当てます。__
__ただし、Direct Connectを使用する場合には、ローカルAS番号を指定する必要があります。__
これは、BGP ASNと異なる値にする必要があるため、AWSはローカルASNの割り当てを提供していません。
代わりに、お客様が自分でASNを取得し、使用する必要があります。

自分でASNを取得する必要があります。
__AS番号は、グローバルに一意である必要があります。__
ASNを取得するには、以下の手順に従います。
◆適切なRIRのウェブサイトにアクセスします。
•	RIPE NCCの場合：https://www.ripe.net/
•	ARINの場合：https://www.arin.net/
•	APNICの場合：https://www.apnic.net/
◆ASNの取得に必要な情報を収集します。
•	組織の種類や所在地、IPアドレスブロックなど、ASN取得に必要な情報を収集します。
•	ASNの取得には、組織がIPアドレスを使用する理由が必要である場合があります。
このため、申請時には、IPアドレスの使用計画を提供する必要がある場合があります。
◆ASNの申請手順に従って、ASNを取得します。
•	ASNの取得には、申請書の提出や手数料の支払いが必要な場合があります。
•	RIRによっては、ASNの取得に数週間から数か月を要する場合があります。


少しでも、学習の参考にして頂ければ、と思います。
--