AWS VPNとFortiGateをIPsecVPNで接続しBGPで動的ルーティングしてみた

AWS VPNとFortiGateをIPsecVPNで接続しBGPで動的ルーティングしてみた

目次

    概要

    クラウドインテグレーション部クラウドソリューション2課の川井です。

    今回は、AWSの Sit-to-Site VPN(以降、AWS VPN)と VPNデバイスの FortiGateを使用して、IPsecVPNで 両サーバー間の接続をさせてみようと思います。
    また、ネットワーク間の接続は動的ルーティングのBGPを使用します。
    最後に、テスト検証として AWS側に仮想PCとしてWindowsサーバを立てて、そこから FortiGate内のInternalのIPアドレスにVPN経由で接続出来るか確認していきます。

    構築する上で、1点注意点がございます。

    FortiGateに関して実機を所持していませんので、Amazon EC2インスタンスのイメージとして、AWSが提供している FortiGateのAMIを使用してEC2を起動して、FortiGateは代用していきます(多少の差異はありますが、殆ど実機と遜色ありませんので問題ないと思います)


    構成

    構成は以下の通りとなります。 
    202411_Connecting_AWS_VPN_and_FortiGate_with_IPsecVPN_01-1

    本来であれば、プライベートサブネットに仮想PCを配置し接続させるべきですが、
    今回は検証なので、全てのリソースをパブリックサブネットに配置させていただきます。

    各サーバの配置箇所は FortiGateインスタンスを東京リージョンに、AWS VPNをバージニア北部に配置していきます。
    また、バージニア北部には 仮想PCに見立てた Windowsサーバも配置して、VPNを通って FortiGateインスタンスに接続できるか試していきます。

    それでは、まずFortiGateインスタンスの構築をしていきます。

    構築(FortiGateインスタンス)

    ○ FortiGateのEC2インスタンスをデプロイ

    ※VPC、サブネット、インターネットゲートウェイ、セキュリティグループなどの作成は省略致します。

    1. FortiGateインスタンスの構築

    1. 1 FortiGate AMIの選択

    AWS マネジメントコンソールにログインし、EC2ダッシュボードに移動し、「インスタンスの起動」をクリックします。
    AmazonマーケットプレイスからFortiGateの仮想ファイアウォールのAMIを検索します。
    例: 「FortiGate」または「Fortinet」で検索して、FortiGateのイメージを選択します。(ARM64/Gravitonの方が値段が安いのでおすすめです) 
    202411_Connecting_AWS_VPN_and_FortiGate_with_IPsecVPN_02

    1. 2 インスタンスタイプの選択

    FortiGateのパフォーマンスに合ったインスタンスタイプ(例: c5.largeなど)を選択します。
    FortiGateの推奨インスタンスタイプに従ってください。
    今回は「t4g.large」にしましたが、スペックが低いため CPU使用率が高騰し、操作性が低下していました。
    快適に使用するためには、最低でも「c6g.large」以上を選択することをお勧めします。

    202411_Connecting_AWS_VPN_and_FortiGate_with_IPsecVPN_03

    1. 3 キーペアの選択

    OSの中に入ることはないので「キーペアはなし」を指定します。

    202411_Connecting_AWS_VPN_and_FortiGate_with_IPsecVPN_04

    1. 4 ネットワーク設定

    ネットワーク設定には以下の情報を入力します。

    VPCやサブネット:FortiGateインスタンスが配置されるネットワークセグメントを指定します。
    ※パブリックサブネットに配置します。

    パブリックIPアドレスの自動割り当て:有効にします

    セキュリティグループ:作成したものを選択します(ログインするためのインターフェイスなので、セキュリティグループの受信許可ポートは80番と443番だけで問題ありません)

    202411_Connecting_AWS_VPN_and_FortiGate_with_IPsecVPN_05

    1. 5 インスタンスの起動

    それ以外の設定値はDefaultのものを設定しています。またVPNの接続のためにしか使用しないので、
    IAMロールの付与もしていません。これでインスタンスを起動します。

    ※補足
    EC2を起動した際に作成されるインターフェイスにも「Elastic IP」を付与する事をおすすめします。
    一旦EC2を停止した後に起動すると、追加したインターフェースにElastic IPが付与されている場合、既存のインターフェイスにパブリックIPが付与されなくなってしまいます。

     

    2. 追加ネットワークインターフェイス(NIC)の作成

    次に、FortiGateインスタンスに VPN用のインターフェイスを追加するため、新しいネットワークインターフェイスを作成します。EC2インスタンスが起動した際に自動で作成されるインターフェイスはログインの際に使用しているため、別途VPN用のインターフェイスを作成します。

    2. 1 新しいネットワークインターフェイスを作成

    EC2ダッシュボードに移動し、左側メニューの「ネットワークインターフェイス」をクリックします。
    「ネットワークインターフェイスの作成」をクリックし、以下の情報を入力します。

    サブネット: FortiGateの追加インターフェイスを接続するサブネットを選択します。
    ※先程作成したFortiGateインスタンスと同じサブネット指定します。

    プライベートIPアドレス: 自動割り当てを選択します(カスタムでも問題ありません)

    後はDefault値で設定しています。

    202411_Connecting_AWS_VPN_and_FortiGate_with_IPsecVPN_06

    2. 2 ネットワークインターフェイスをEC2インスタンスにアタッチ

    作成したネットワークインターフェイスをFortiGateインスタンスにアタッチします。
    作成したFortiGateインスタンスを選択し、「アクション」 > 「ネットワーキング」 > 「インターフェースをアタッチ」を選択します。

    202411_Connecting_AWS_VPN_and_FortiGate_with_IPsecVPN_07

    FortiGateインスタンスを選択して、作成したインターフェイスをアタッチします。

     

    3. Elastic IPの割り当て

    次に、追加したインターフェイスにElastic IPを割り当てます。 AWS側でオンプレ側のグローバルIPアドレスを指定するので、
    「グローバルの"固定"IPアドレス」が必要になります。
    したがって、VPN用に追加したインターフェースにはElastic IPを割り当てます。

    3. 1 Elastic IPの作成

    EC2ダッシュボードの左側メニューから「Elastic IP」を選択し、「Elastic IPの割り当て」をクリックします。
    必要項目を入力して割り当てをクリックすると、Elastic IPが作成されます。
    ※Nameタグをつけて作成すると自分が作ったものがどれか判別しやすいのでおすすめです。

    3. 2 Elastic IPをネットワークインターフェイスに関連付ける

    割り当てたElastic IPを選択し、「アクション」 > 「アドレスの関連付け」をクリックし、以下の情報を入力します。

    リソースタイプ:「ネットワークインターフェース」を選択します
    ネットワークインターフェース:先程作成したネットワークインターフェイスを選択します

    プライベートIPアドレス:好きなIPアドレス指定します。

    そして、「関連付け」をクリックして、Elastic IPをネットワークインターフェイスに関連付けます。

    202411_Connecting_AWS_VPN_and_FortiGate_with_IPsecVPN_08

    これでFortiGateインスタンスの構築は完成です。

    ※補足
    VPN側で使用するインターフェイスのセキュリティグループについてですが、AWS VPNの外部IPアドレスとBGPピアで使用するIPアドレスの許可が最低限必要です。
    そのため、一旦広い範囲で許可設定したセキュリティグループを付与していただき、AWS VPNの外部IPアドレスとBGPピアで使用するIPアドレス分かり次第、許可範囲絞っていただければと思います。どちらも、この後の「VPN 接続の構築」が完了すれば確認できます。

     

    4. FortiGateインスタンス接続

    作成したFortiGateインスタンスに、パブリックIPでFortiGateのダッシュボードへ接続します。

    https://[パブリックIPアドレス]

    この構成ですと パブリックIPが2つ付与されていますので、EC2インスタンスのインスタンス概要画面で「パブリック IPv4 アドレス」に記載されている方のIPアドレスで接続します。基本的には、EC2を起動した際に自動的に付与されるインターフェイスのパブリックIPが選択されているはずです。

    まず、接続すると このような画面になりますが FortiGateにインストールされている ローカルCA証明書が信頼できるものと認識出来ないために表示されるものです。表示させたくない場合は、FortiGateからローカルCAのルート証明書をPCにインポートしてください。

    「詳細設定」をクリックすれば、「パブリックIPアドレスに進む」で表示されるのでクリックします。

    202411_Connecting_AWS_VPN_and_FortiGate_with_IPsecVPN_09

    接続すると、username と password を求められるので、

    202411_Connecting_AWS_VPN_and_FortiGate_with_IPsecVPN_10

     

    username:admin(全員共通)
    password:インスタンスID(作成したEC2インスタンスのインスタンスIDをそのまま入力)

    202411_Connecting_AWS_VPN_and_FortiGate_with_IPsecVPN_11

    問題なくログインが出来れば、初期パスワード変更や初期セットアップ画面になるので実施していきますと、
    無事FortiGateのダッシュボードにログインできます。

    202411_Connecting_AWS_VPN_and_FortiGate_with_IPsecVPN_12

    以降では、AWS VPNの構築をしていきます。


    構築(AWS VPN)

    ※VPC、サブネット、インターネットゲートウェイなどの作成は省略致します。

     

    ○ AWS カスタマーゲートウェイとは

    AWSの「カスタマーゲートウェイ」とは、AWSにおいて、オンプレミスのVPNデバイス(今回で言えばFortigateインスタンス)の情報を登録するエンティティとして機能するものです。カスタマーゲートウェイをAWSに設定することで、AWS側はオンプレミスのどのデバイス(IPアドレス)とVPN接続を行うかを認識できるようになり、これにより、オンプレミス側のデバイスがAWSの仮想プライベートゲートウェイと安全に接続できるようになります。

    少し勘違いしやすいですが、AWSの「カスタマーゲートウェイ」は物理的なハードウェアではなく、AWS側に論理的に定義された設定項目であり、オンプレミスのデバイスを指し示すためのものです。この設定をAWS上に作成することで、オンプレミスのVPNデバイスがAWS側で認識され、相互に通信するためのトンネルが設定されます。

     

    ○ AWS 仮想プライベートゲートウェイとは

    AWSの「仮想プライベートゲートウェイ」とは、AWS Virtual Private Cloud(VPC)とオンプレミスのネットワーク間でVPN接続を確立するためのゲートウェイです。 仮想プライベートゲートウェイの役割は、AWSのVPCにおけるネットワークトラフィックの入口・出口の役割を果たします。オンプレミスや他のネットワークからAWSのVPCにトラフィックをルーティングする際に、仮想プライベートゲートウェイがその中継ポイントとして機能します。

    次からは、AWS VPNに必要な各リソースの構築をしていきます。


     

    ○ AWS カスタマーゲートウェイの構築

    AWS カスタマーゲートウェイを設定するための手順は以下の通りです。

    1. AWS カスタマーゲートウェイの準備

    まず、AWSとVPN接続を確立するために、オンプレミスのルーターやファイアウォールなどのデバイスを準備します。今回はFortiGateインスタンスがその役割を担います。このデバイスがカスタマーゲートウェイとして機能します。

    サポートされているデバイスは、Cisco、Juniper、FortinetなどのVPN対応の物理デバイスや仮想アプライアンスが使用できます。また、カスタマーゲートウェイには、インターネット経由でアクセスできる固定のグローバルIPアドレスが必要です。このIPアドレスは、カスタマーゲートウェイの設定時に指定します。

     

    2. AWS カスタマーゲートウェイの設定

    AWSコンソールにログインし、VPCダッシュボードに移動します。 左メニューから「カスタマーゲートウェイ」を選択し、「カスタマーゲートウェイを作成」ボタンをクリックします。そして以下の設定項目を入力します。

    名前: カスタマーゲートウェイの名前を入力します。
    BGP ASN: オンプレ側で使用するBGP(Border Gateway Protocol)のAS番号を指定します。
    IPアドレス: オンプレミス側(Fortigateインスタンス)の固定グローバルIPアドレスを入力します。
    デバイス:デバイス名入力します(好みで好きなように入力)

    202411_Connecting_AWS_VPN_and_FortiGate_with_IPsecVPN_13

    問題なく作成されると、状態が「利用可能」になります。

    202411_Connecting_AWS_VPN_and_FortiGate_with_IPsecVPN_14

     

    ○ AWS 仮想プライベートゲートウェイの構築

    AWS 仮想プライベートゲートウェイを設定するための手順は以下の通りです。

    1. AWS 仮想プライベートゲートウェイの設定

    次に、AWS側でVPN接続を確立するためのエンドポイントである仮想プライベートゲートウェイを作成します。 VPCダッシュボードの左側メニューから「仮想プライベートゲートウェイ」を選択し、「仮想プライベートゲートウェイの作成」ボタンをクリックします。そして以下の設定項目を入力します。

    名前:仮想プライベートゲートウェイの名前を入力します。
    自律システム番号 (ASN):AWS側で使用するAS番号を入力します(デフォルトでも問題ありません)

    202411_Connecting_AWS_VPN_and_FortiGate_with_IPsecVPN_15

    2. AWS 仮想プライベートゲートウェイをVPCにアタッチ

    作成した仮想プライベートゲートウェイを選択し、「アクション」 > 「VPCへアタッチ」を選択します。
    続いて、仮想プライベートゲートウェイを配置するVPCを選択します。

    202411_Connecting_AWS_VPN_and_FortiGate_with_IPsecVPN_16

    アタッチされると状態が「アタッチ済み」になります。 202411_Connecting_AWS_VPN_and_FortiGate_with_IPsecVPN_17

     

    ○ VPN 接続の構築

    1. VPN 接続の設定

    次は、オンプレミスの機器と VPC 間の安全な接続確立するためのリソースを作成します。
    VPCダッシュボードの左側メニューから「Site-to-Site VPN 接続」 > 「VPN接続を作成する」を選択します。
    そして以下の設定項目を入力します。

    名前:AWS VPN接続の名前を入力します。

    ターゲットゲートウェイ: 仮想プライベートゲートウェイ選択します。
    ※先程作成した仮想プライベートゲートウェイを選択します。

    カスタマーゲートウェイ: 既存を選択して、先程作成したカスタマーゲートウェイを選択します。
    ルーティングオプション: 動的(BGP が必要)を選択します。

    ローカルIPv4 ネットワーク CIDR:カスタマーゲートウェイ側の IPv4 CIDR 範囲を指定します。
    リモートIPv4 ネットワーク CIDR:AWS側の IPv4 CIDR 範囲を指定します。
    トンネル オプション:VPNで使用するIP、事前共有キー、暗号化方式などの指定します。

    ※今回は検証なので、許可したいIPの制限や指定したい暗号化方式などはないので、ネットワークCIDRやトンネルオプションは全てDefault値を使っていきます

    202411_Connecting_AWS_VPN_and_FortiGate_with_IPsecVPN_18

    作成には少し時間を要しますが、問題なく作成されると状態が「利用可能」になります。 

    202411_Connecting_AWS_VPN_and_FortiGate_with_IPsecVPN_19

    現状のVPNのTunnel状態を確認する為、先程作成した「vpn接続」を選択して「トンネルの詳細」をクリックします。

    Tunnel:冗長の為、2本のトンネルが作成されています。
    外部IPアドレス:AWS側がIPsec終端で使用するIPアドレスです(下記の画像ではマスキングしているため見えていません)

    内部 IPv4 CIDR:BGPピアのIPアドレスで使用されるIP範囲です。
    カスタムで指定したい場合は、下記のドキュメントを参考にして使用出来るIP範囲と値を確認して下さい。
    https://docs.aws.amazon.com/ja_jp/vpn/latest/s2svpn/VPNTunnels.html

    ステータス:FortiGate側でIPsecの設定をしていないので「ダウン」の状態になっています。
    詳細:こちらも同様にFortiGate側の設定をしていないので「IPSEC IS DOWN」になっています。

    202411_Connecting_AWS_VPN_and_FortiGate_with_IPsecVPN_20

    2. ルートテーブルの設定

    ルートの学習はBGPを使用しますので、ルートテーブルにてルート伝播の設定を行います。

    この設定を行うと、仮想プライベートゲートウェイがオンプレ側のルート情報をBGPで学習した後に、仮想プライベートゲートウェイからルートテーブルにルート情報が伝播され、自動的にルーティング先が学習されます。

    個人的には実際の物理サーバでどういう設定がされているのかが気になりました。ルート伝播の有効化をするだけでBGPのルートが学習できるというのは、プレフィックスリストで許可設定が行われているからなのでしょうか。

    話はそれましたが、ルートテーブルのルート伝播の設定は、VPCでもサブネットでも問題ありません。
    BGPのルートを学習させたい場所に関連付けられているルートテーブルを選択して、 「アクション」 > 「ルート伝播の編集」を選択します。そして以下の箇所を「有効化」します。

    202411_Connecting_AWS_VPN_and_FortiGate_with_IPsecVPN_21

    これで基本的にはAWS VPN側の設定は終了です。続いてはFortiGate側の設定を行っていきます。


    設定(FortiGateインスタンス)

    ※注意点として、今回はVPNで接続ができ、BGPでルートが学習できる最低限の設定をしていきます。
    なので、DNS、NAT変換、リンクモニター、プレフィックスリストやASパスリスト DHCPやデフォルトゲートウェイ、UTMなどの
    設定は行いませんのでご了承ください。

    また、FortiGateの構築は GUIベースではなく FortiGateのCLIコンソールを使用して構築していきます。

     

    1. VPN接続の設定情報をダウンロード

    FortiGateインスタンス側の設定を行いますが、その前にAWS側で各ベンダーのサンプルコンフィグファイルをダウンロードできますので、VPN接続の設定情報をダウンロードして、こちらの情報を基にオンプレミス側のデバイスを設定を行います。

    AWSのVPN接続ページから「設定をダウンロード」をクリックし、デバイスごとの設定ガイドをダウンロードします。
    FortiGateの場合は 下記の項目で問題ありません。

    202411_Connecting_AWS_VPN_and_FortiGate_with_IPsecVPN_22

    サンプルコンフィグを使用して設定を行っても問題ありませんが、環境に応じた多少の改変が必要だと思います。
    そのため、今回サンプルコンフィグで確認するのは「事前共有キーの値」と「BGPピアのIPアドレス」だけです。設定の参考にはなりますので、FortiGateの設定に慣れてない方はこれを参考に設定を行っていただければ思います。
    サンプルコンフィグの具体的な説明については省略させていただきます。

     

    2. インターフェースの設定

    FortiGateインスタンスにログインした後、左側メニューから「インターフェイス」を選択します。 使用できるインターフェイスは、
    以下のPort1と2の2つだけです。これは、EC2起動時に作成されたものと今回VPN用に作成したインターフェイスしかないので当然ですね。
    Port2の方をVPNで使用します。そのため、Port2にIPsecの設定を行います。 

    202411_Connecting_AWS_VPN_and_FortiGate_with_IPsecVPN_23

    2. 1 IPsecの設定

    IPsecの設定GUIベースでは、左側メニューから「VPN」 > 「IPsecトンネル」を選択しますが、
    先程も記載した通り、今回はCLIベースで作成していきますので、FortiGateのCLIコンソールを使用して構築していきます。

    FortiGateのCLIコンソールは右上の下記の赤枠をクリックすれば起動します。 

    202411_Connecting_AWS_VPN_and_FortiGate_with_IPsecVPN_24

    では、Port2に IPsecとTunnelインターフェイスの設定を一気にいれていきます。細かい詳細は省いていきますが、
    確認が必要なところはコメントをいれています。また、以下のコマンドは1つのトンネルに対してのIPsecVPNの設定になりますので、2つ目のトンネル作成したい場合は、同様にもう一つIPsecVPNの設定を追加する必要があります。

    以下のコマンドは、AWS側で言うと「Tunnel1」にIPsecVPNを接続させる設定です。 Tunnelごとに外部IPアドレスや事前共有キー、BGPピアのIPアドレスが異なりますので「Tunnel2」用に設定する際はご注意ください。また「Tunnel2」用の設定について省略しています。

    ## IPsecのフェーズ1の設定
    config vpn ipsec phase1-interface
    edit "Tunnel1"
    set interface "port2" # Port2を指定します
    set ike-version 2 # IKEはバージョン2を選択します
    set keylife 28800
    set peertype any
    set net-device disable
    set authmethod psk
    set proposal aes256-sha256 # 暗号化方式に関して対抗のAWS VPNにあるものを指定します
    set dhgrp 2 # DHグループは2を指定します
    set nattraversal disable
    set remote-gw ××.××.××.×× # AWS VPNの外部IPアドレスを記載します
    set packet-redistribution disable
    set psksecret "*********************" # サンプルコンフィグに記載あり
    next
    end

    ## IPsecのフェーズ2の設定
    config vpn ipsec phase2-interface
    edit "Azure-VPN-GW-Primary"
    set phase1name "Tunnel1" # 1つ前に作成したフェーズ1を指定します
    set proposal aes256-sha256 # 暗号化方式に関して対抗のAWS VPNにあるものを指定します
    set pfs disable
    set auto-negotiate enable
    set keylifeseconds 27000
    set src-subnet 0.0.0.0 0.0.0.0 # 制限を掛ける訳ではないのでDefault値を指定します
    set dst-subnet 0.0.0.0 0.0.0.0 # 制限を掛ける訳ではないのでDefault値を指定します
    next
    end

    ## Tunnelインターフェイスの設定
    config system interface
    edit "Tunnel1"
    set vdom "root"
    set ip 169.254.151.210 255.255.255.255 # サンプルコンフィグに記載あり
    set type tunnel # インスタンスタイプはTunnelを指定します
    set remote-ip 169.254.151.209 255.255.255.255 # サンプルコンフィグに記載あり
    set interface "port2" # Port2を指定します
    next
    end

    ちなみに、事前共有キーは「VPN トンネルオプションを変更」からも確認はできます。また、 IPアドレスは トンネルの詳細から「内部 IPv4 CIDR」を確認して、基本的には若い番号をAWS側が使用します。
    例えば、「169.254.140.28/30」だった場合、AWS側は「169.254.140.29」、オンプレ側は「169.254.140.30」を使用することになります。

    ※ IPsecを接続する上で注意することは、IKEのバージョンや暗号化方式、DHグループなどを対抗のAWS VPNと合わせる必要があることです。
    ただし、今回はAWS VPN側のトンネル オプションはDefault値を使用しているため、 以下の画像からもわかる通り、ほぼ網羅されています。
    そのため、設定が合わないことでトンネルが接続されないということはないとは思いますが、設定の際にはAWS側に設定された項目を確認していただくようご注意ください。

    202411_Connecting_AWS_VPN_and_FortiGate_with_IPsecVPN_25

    作成されると以下のように、IPsec Tunnelが作成されます。ステータスはまだダウン状態です。 

    202411_Connecting_AWS_VPN_and_FortiGate_with_IPsecVPN_26

    また、インターフェイス画面で確認すると Port2にトンネルインターフェイスの設定が入っています。 

    202411_Connecting_AWS_VPN_and_FortiGate_with_IPsecVPN_27

    2. 2 Firewall の設定

    IPsecトンネルの設定だけでは まだVPNの開通はしません。Firewallの設定を入れないと疎通が取れませんので、
    Firewallポリシーを設定していきます。

    GUIベースでは、「ポリシーオブジェクト」 > 「ファイアウォールポリシー」を選択します。CLIベースでは以下のコマンドを入れていきます。
    今回、TunnelインターフェースとPort1で疎通が取れるように設定いれていきます。接続確認の際にFortiGateのPort1に設定しているInternalのIPアドレスに接続させるので、ここの疎通を許可しています。

    config firewall policy
    edit 1
    set status enable
    set name "LAB-1-to-AWS(Main)"
    set srcintf "port1"
    set dstintf "Tunnel1" # Tunnel1のトンネルインターフェイスを指定
    set action accept
    set srcaddr "all"
    set dstaddr "all"
    set schedule "always"
    set service "ALL"
    set logtraffic all
    next
    edit 2
    set status enable
    set name "AWS(Main)-to-LAB1"
    set srcintf "Tunnel1" # Tunnel1のトンネルインターフェイスを指定
    set dstintf "port1"
    set action accept
    set srcaddr "all"
    set dstaddr "all"
    set schedule "always"
    set service "ALL"
    set logtraffic all
    next
    end

    ※補足
    この設定は、先程も記載した通り「Tunnel1」側だけの設定なので、「Tunnel2」用のFirewall設定も同様に追加する必要があります。

    おそらく、これでステータスが変更されるはずです。アップされれば以下のようにステータスが「アップ」と表示されます。

    202411_Connecting_AWS_VPN_and_FortiGate_with_IPsecVPN_28

    これで繋がらない場合は、AWS側の外部IPアドレスや事前共有キー、BGPピアのIPアドレスが間違っていないかを確認してください。
    その辺りも間違っていない場合は、下記のVPNトラブルシュートのコマンドをCLIコンソールで入力してエラー箇所を確認してください。

    diag vpn ike log 
    diag debug app ike -1
    diag debug enable

    ちなみにAWS側は、まだステータスが「アップ」になっていないと思います。BGPの設定が完了すればステータスアップに変わるばずです。


    3. BGPの設定

    最後にBGPの設定をしていきます。
    GUIベースでは、「ネットワーク」 > 「BGP」を選択します。CLIベースでは以下のコマンドになります。

    config router bgp
    set as 65000 # Fortigate側で使用するAS番号(カスタマーゲートウェイで指定のと合わせる)
    config neighbor
    ## AWS VPNのTunnel1 の設定
    edit "169.254.151.209" # AWS VPN側のBGPピアのIPアドレス
    set soft-reconfiguration enable
    set remote-as 65010 # AWS VPN側で仮想プライベートゲートウェイで指定したもの
    set update-source "Tunnel1" # Tunnel1のトンネルインターフェイスを指定
    next
    end
    ## 全てのルートをBGPで送る設定
    config network
    edit 1
    set prefix 0.0.0.0 255.255.255.255
    next
    end
    end

    ※補足
    この設定は、先程も記載した通り「Tunnel1」側だけの設定なので「Tunnel2」用もBGP設定を入れる際には、IPアドレスなどを変えて同じように設定を入れる必要があります。

    これで全ての設定が完了しましたので、ステータス確認をしていきます。


    ステータス確認(AWS VPNとFortiFate)

    FortiGateインスタンスで「Tunnel1」と同様に「Tunnel2」のIPsecVPNの設定を行えば、以下の画像のように両トンネルでステータスが「アップ」になることが確認できます。 

    202411_Connecting_AWS_VPN_and_FortiGate_with_IPsecVPN_29

    またBGPの設定がされていれば、AWS側もステータスが「アップ」になっているのが確認出来ると思います。また、詳細の箇所では「3 BGP ROUTES」となっており、オンプレ側からBGPで3つのルートが学習されている事が確認できます。 

    202411_Connecting_AWS_VPN_and_FortiGate_with_IPsecVPN_30

    FortiGate側でも、BGPが問題なく設定されているか確認していきます。まずは、BGPテーブルから確認です。
    AWS側のVPC「10.3.0.0/16」のルートを学習できていますね。 

    202411_Connecting_AWS_VPN_and_FortiGate_with_IPsecVPN_31

    続いて、ルートテーブルを確認していきます。同じくAWS側のVPC「10.3.0.0/16」のルートが学習されています。
    AWS側から伝えられたメトリック値がTunnel2の方が低いので、Tunnel2が優先されるルートとなっているようです。 

    202411_Connecting_AWS_VPN_and_FortiGate_with_IPsecVPN_32

    ここから見てお分かり頂ける通り、FortiGate側からAWS環境への接続は「Tunnel2」が優先経路となっています。
    しかし、このままではFortiGate側でなにも設定していないので、AWS からFortiGate環境方向の VPN通信に優先して使用される
    VPNトンネルは AWS によりランダムに選択されます。

    FortiGateは、Firewallとしても機能するものなので「ステートフルインスペクション」の機能が働きます。
    要するに、行きと戻りのルートが変わると受信データを不正と判断して通信を遮断してしまう可能性があるということです。

    そのため、FortiGateからAWSにアドバタイズするルートに「AS Path属性」や「MED値」の設定を追加する必要があると思います。
    しかし、今回の検証ではFortiGateのInternalのIPアドレスに対してVPNを通って接続出来るかの検証しか行わないので「AS Path属性」等の設定は行いません。

    では、続いてAWS側も確認します。
    ルート伝播を有効にしたルートテーブルを確認すると、ネクストホップが仮想プライベートゲートウェイの宛先「192.168.1.0/24」のルートが学習されています。ただし、169から始まるIPアドレスも一緒に学習されてしまうため、不要なルートはプレフィックスリストで拒否したり、許可するプレフィックス値を設定すればよいですが、今回は検証のため、このままで問題ありません。

    気にはなりますがね… 

    202411_Connecting_AWS_VPN_and_FortiGate_with_IPsecVPN_33

    では、最後に接続確認をしてみます。


    疎通確認(FortiGateと仮想PC)

    AWS側にある仮想PCからFortiGateのInternalのプライベートIPにVPNを通って接続できるのか確認してみます。

    FortiGate側のPort1のプライベートIPは「192.168.1.61」です。 

    202411_Connecting_AWS_VPN_and_FortiGate_with_IPsecVPN_34

    Windows仮想PCのIPアドレスは「10.3.1.45」です。 

    202411_Connecting_AWS_VPN_and_FortiGate_with_IPsecVPN_35

    まずは、Windows仮想PCから「192.168.1.61」にPINGを飛ばしてみます。 

    202411_Connecting_AWS_VPN_and_FortiGate_with_IPsecVPN_36
    問題なくプライベートIPアドレスでFortiGateへ接続出来ていることが確認出来ました。

    TRACERTでも確認します。
    202411_Connecting_AWS_VPN_and_FortiGate_with_IPsecVPN_37
    Windows仮想PCからワンホップで、FortiGateにダイレクトに接続出来ていますね。

    以上で、AWS VPNとFortiGateのIPsecVPNで接続の検証は終了です。


    まとめ

    今回は、AWS VPNとFortiGateインスタンスをIPsecVPNで接続させてみました。

    Azure VPNGatewayは使用したことはありましたが、AWS VPNは初めて使用しました。
    構築の手軽さ簡単さで言えば、AWSの方が圧倒的に簡単です。対抗のオンプレ側の設定もダウンロード出来るので至れる尽くせりだと思います。ただ、AWS環境でBGPテーブルが見られないのは個人的にちょっと不便な気がしますね。BGPテーブルを確認したい場合はAWSサポートに問い合わせしなければならないようです。

    また、FortiGateのAMIも初めて使用しましたが、殆ど実機と遜色なくとても使いやすかったです。

    では、また別の記事を執筆致しますので、引き続きよろしくお願いいたします。


    クラウドインテグレーション部
    クラウドソリューション2課
    川井 康敬

     

    アジアクエスト株式会社では一緒に働いていただける方を募集しています。
    興味のある方は以下のURLを御覧ください。