🤝

Direct Connectまとめ

2024/04/22に公開

はじめに

Direct Connect (DX) に限らずですが、AWSのサービスの基本概念を理解するにはマネコンを触るのが近道です。とはいえ、DXは気軽に試すのが難しいサービスで、自分も机上の知識しかありませんでした。運良く触る機会をいただけたので、DXの構成要素や構成パターンを整理して、典型的な構成パターンをマネコンで作ってみました。

今回作ったのは次の3つの構成。スクショ多めなので、触る環境がない人のお役にたてばうれしいです。

  1. [構成1] Private VIF -> VGW
  2. [構成2] Private VIF -> DXGW -> VGW
  3. [構成3] Transit VIF -> DXGW -> TGW

DXの構成要素

DX_Overview

いきなりですが、DXはオンプレDCとAWSを直結する専用線サービスではありません。オンプレDCとAWSはDX Locationと呼ばれる中継地点を介して接続され、DXはDX LocationとAWS間の接続を提供するサービスです。オンプレDCからDX Locationまでの接続は対象外です。

ルータ

DX Locationには次の2種類のルータが設置されています。

  • Customer Router/Partner Router: ユーザがDX Locationに設置して管理 (コロケ) or DXパートナーが管理
  • DXデバイス (AWS Routerと表記されることも): AWSが管理

VIF (Virtual Interface)

Customer Router/Partner RouterとAWSは、DXデバイスを介して、VIF (仮想インターフェイス) で接続されます。インタフェースという名前から「点」をイメージしがちですが、Private VIFは、Customer Router/Partner RouterとAWS間のトンネルのような「線」だと考えるとわかりやすいと思います。実際、VLAN (802.1Q) のように見えます。

VIFには次の3種類がありますが、今回はPrivate VIFとTransit VIFを扱います。

  • Public VIF: AWSの各リージョンを介したInternet-facingなAWSサービスやインターネットへの接続
  • Private VIF: VPCへの接続
  • Transit VIF: Transit Gatewayへの接続

Connetction (接続)

ここまでで、VIFはふたつの物理的な回線を通ることがわかると思います。

  • Customer Router/Partner RouterとDXデバイス間の回線(=前述のConnection)
  • DXデバイスとAWS間の回線

後者はぶっとい回線をDX Location利用者の各VIFで共有していると思われますが、AWS管理のため詳細不明で意識する必要もありません。前者をConnection (日本語表記だと「接続」) といい、こちらはDXの利用者に複数の選択肢があります。

  • 専用接続 (Dedicated Connection)
    • DX利用者が物理的なConnectionを占有利用(所有者はDX利用者もしくはパートナー)。
    • ポート速度は1Gbps, 10Gbps, 100bps。
    • AWSの承認を得て、LOA-CFAを提示すると配線してもらえる。
    • VIFを自由に払い出し可能(ただし、Transit VIFは4つまで)。
  • ホスト型接続 (Hosted)
    • DXパートナーが専用接続を所有。
    • DX利用者は仮想的なConnectionを所有し占有するが、専用接続は共有。
    • ポート速度の選択肢が豊富 (50Mbps-10Gbps)。
    • DX利用者はVIFを1つだけ払い出し可能(Transit VIFも利用可能)。
  • Connectionを所有しない(共有型とよばれることも)
    • DX利用者はConnectionを所有しない。
    • DXパートナーが所有する専用接続から、VIFを払い出してもらう。
    • Transit VIFは利用不可。

VIFの終端方式

AWS側のVIFの終端方式もいくつか選択肢があります。

  • Private VIF -> VGW (Virtual Private Gateway)
    • 最もシンプルなVIFをVPCにアタッチしたVGWに直結するパターン。
    • VIFとVPCが1対1になるので、VPCが増えるたびにコストがかさむ。
  • Private VIF -> DXGW (Direct Connect Gateway) -> VGW
    • DXGW経由でVGWに接続することで、VIFとVPCが1:多になり1つのVIFを共有できる。
    • 1つのDXGWと接続可能なVGWは最大20個。
    • VGW直結に比べてメリットしかなく、DXGWの利用を推奨。
      • 1hop増えるように見えるが、オーバヘッドがないように設計されている。
      • SPOFにもならない。
      • 追加費用も不要。
      • DXGWはグローバルリソースなので別リージョンのVGWにも接続可能。
    • DXGWを介したVPC間通信は不可能。
  • Transit VIF -> DXGW -> TGW (Transit Gateway)
    • 最大5000個のアタッチメント(DXGWと接続するためのアタッチメント含む)でVIFを共有可能。
    • TGWを介したVPC間通信も可能。
    • ひとつのDXGWと接続可能なTGWは最大6個。

[構成1] Private VIF -> VGW

PT1

AWS側の設定

  1. VIFを直接VGWに接続するため、まずVGWを作成します。
    ASNはAmazonデフォルトASNを選択すると64512になるようです。
    PT1_VGW1
  2. 作成したVGWをVPCにアタッチします。
    PT1_VGW2
  3. VPCのルートテーブルにオンプレDCへのルートを追加します。
    PT1_RTB1
  4. 作成したVGWとVIFを接続します。
    環境の都合でPrivate VIFは事前に作成済みでしたが、承認待ちになっています。承認した時点から課金が発生するようです。まだ、VIFを接続していないので状態はpending、BGPのステータスもdownになっています。
    PT1_VIF1
    Private VIFなのでDXGWかVGWに接続可能ですが、ここではVGWに直結します。接続先のVGWは先ほど作成したVGWを選択します。
    PT1_VIF2

オンプレ側の設定

本来ならCustomer Routerの設定が必要なのですが、今回利用した環境ではすでに設定済みでしたので、AWS側の設定が終わると自動的にBGPピアが確立され通信可能になります。構成2で同様の設定をしているのでそちらを参照してください。
PT1_VIF3

[構成2] Private VIF -> DXGW -> VGW

PT2

AWS側の設定

  1. DXGWと接続するVGWを作成します。
    PT2_VGW1
  2. 作成したVGWをVPCにアタッチします。
    PT2_VGW2
  3. VPCのルートテーブルにオンプレDCへのルートを追加します。
    静的ルートを追加しても良いのですが、DXGW経由でVGWに伝搬される経路情報を追加するようにします。
    PT2_RTB1
  4. DXGWを作成します。
    ASNが64512とVGWと重複しているのですが、AWS内はASNが重複していても問題ないようです。
    PT2_DXGW1
  5. 作成したDXGWとVGWを関連づけます。
    複数のVGWをまとめて関連づけることもできます。今回は3つのリージョンのVGWを選択しました。
    PT2_DXGW2
  6. DXGWとVIFを接続します。
    環境の都合でPrivate VIFは事前に作成済みでしたが、承認待ちになっています。まだVIFを接続していないので、状態はpending、BGPのステータスもdownになっています。VLAN-IDとAmazonルーターのピアIPは後ほどCustomer Routerの設定時に使用するのでメモしておきましょう。
    PT2_VIF1
    DXGWに接続します。接続先のDXGWは先ほど作成したDXGWを選択します。
    PT2_VIF2
    DXGWとVGWの関連付けには少し時間がかかるようです。関連付けが表示されるまでしばらくかかるので焦らずまちましょう。
    PT2_VIF3

オンプレ側の設定

今回利用した環境ではCustomer RouterにCisco Cloud Service Router (CSR) が使用されていましたので、SSHでCSRの設定を行います。

  1. WANインタフェースの設定
    VLAN-IDはVIFの設定画面でメモしたものです。

    csr#conf terminal
    Enter configuration commands, one per line.  End with CNTL/Z.
    csr(config)#interface GigabitEthernet 1
    csr(config-if)#no shutdown
    csr(config-if)#exit
    csr(config)#interface GigabitEthernet 1.1122
    csr(config-subif)#encapsulation dot1Q 1122
    csr(config-subif)#ip address 169.254.100.6 255.255.255.252
    csr(config-subif)#end
    
  2. 対向ルータ(DXGW)への疎通確認
    pingの接続先はVIFの設定画面でメモしたものです。

    csr#ping 169.254.100.5 rep 10
    Type escape sequence to abort.
    Sending 10, 100-byte ICMP Echos to 169.254.100.5, timeout is 2 seconds:
    !!!!!!!!!!
    Success rate is 100 percent (10/10), round-trip min/avg/max = 2/13/19 ms
    
  3. BGPピアの設定
    対向ルータのIPアドレスはVIFの設定画面でメモしたもの、ASNはDXGW作成時に指定したものです。

    csr#configure terminal
    Enter configuration commands, one per line.  End with CNTL/Z.
    csr(config)#router bgp 65001
    csr(config-router)#neighbor 169.254.100.5 remote-as 64512
    csr(config-router)#neighbor 169.254.100.5 password ***
    csr(config-router)#network 192.168.10.0 mask 255.255.255.0
    csr(config-router)#network 169.254.100.4 mask 255.255.255.252
    csr(config-router)#end
    
  4. BGPピアの状態確認
    BGP stateがEstablishedかどうか確認します。

    csr#show ip bgp neighbors
    BGP neighbor is 169.254.100.5,  remote AS 64512, external link
    BGP version 4, remote router ID 52.95.57.154
    BGP state = Established, up for 00:00:19
    Last read 00:00:19, last write 00:00:19, hold time is 90, keepalive interval is 30 seconds
    Neighbor sessions:
        1 active, is not multisession capable (disabled)
    Neighbor capabilities:
    ・・・
    
  5. BGPの受信ルート確認
    3つのVPCへのルートが確認できます。

    csr#show ip bgp neighbors 169.254.100.5 routes
    BGP table version is 15, local router ID is 192.168.10.30
    Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
                r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
                x best-external, a additional-path, c RIB-compressed,
    Origin codes: i - IGP, e - EGP, ? - incomplete
    RPKI validation codes: V valid, I invalid, N Not found
    
        Network          Next Hop            Metric LocPrf Weight Path
    *   172.16.0.0       169.254.100.5                          0 64512 i
    *>  172.17.0.0       169.254.100.5                          0 64512 i
    *>  172.18.0.0       169.254.100.5                          0 64512 i
    
    Total number of prefixes 3
    
  6. BGPの送信ルート確認
    10.7.0.0/16のルートは今回の環境固有のものなので無視して構いません。

    csr#show ip bgp neighbors 169.254.100.5 advertised-routes
    BGP table version is 8, local router ID is 192.168.10.30
    Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
                r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
                x best-external, a additional-path, c RIB-compressed,
    Origin codes: i - IGP, e - EGP, ? - incomplete
    RPKI validation codes: V valid, I invalid, N Not found
    
        Network          Next Hop            Metric LocPrf Weight Path
    *>  10.7.0.0/16      192.168.10.10           20         32768 ?
    *>  169.254.100.4/30 0.0.0.0                  0         32768 i
    *>  192.168.10.0     0.0.0.0                  0         32768 i
    
    Total number of prefixes 3
    
  7. VIFのステータスを確認します。
    状態がavailable、BGPのステータスもupになってるのが確認できます。ステータスは一定時間毎に更新されるそうなのでラグがあります。
    PT2_VIF4

  8. VPCのルートテーブル確認
    VGWから伝搬したルートが登録されているのが確認できます。
    PT2_RTB2

[構成3] Transit VIF -> DXGW -> TGW

PT3

AWS側の設定

  1. DXGWと接続するTGWを作成します。
    使用した環境の都合で、構成2のCSRに新たなDX接続を追加する形でのお試しとなったので、既存のDXGWとは異なるASNを使用しています。
    PT3_TGW1

  2. TGWアタッチメントを作成してTGWとVPCを接続します。
    検証環境なので、シングルAZ構成、TGWアタッチメントを接続先VPCの他のリソースと同じサブネットに配置しています。本番ではマルチAZ構成にし、TGWアタッチメント専用のサブネットも作りましょう。詳細はTGW設計のベストプラクティス参照。
    PT3_TGW2

  3. DXGWを作成します。
    Transit VIF用に新たにDXGWを作成します。
    PT3_DXGW1

  4. 作成したDXGWとTGWを関連づけます。
    TGWを関連付ける場合はプレフィックスは必須です。VPCのCIDRをオンプレDCにアドバタイズするようにしましたが、絞り込んだり、サマリプレフィックスを指定することも可能です。
    PT3_DXGW2

  5. ルーティングの確認。
    TGWにVPCやDXGWを関連付けると、TGWのルートテーブルにそれぞれからの経路情報が伝搬されるようになります。
    PT3_TGWRTB1

VPCのルーティングテーブルにオンプレ側へのルート(TGW経由)追加が必要かもしれません。(環境の利用期間が終了してしまって確認できずスイマセン。)

  1. Transit VIFを作成します。
    まずDXパートナーから割り当てられたホスト型接続を承諾しましょう。
    PT3_Connection1
    PT3_Connection2
    接続が利用できるようになったら、Transit VIFを作成します。ホスト接続なのでVIFを1つ作ることができます。VLAN-IDはDXパートナーが指定しますが、自社のVLAN-IDとかぶらないIDを割り当ててもらうようにしましょう。
    PT3_VIF1
    作成するVIFは同一アカウント内で利用するので、DXGWとの接続設定もここで行います。
    PT3_VIF2

オンプレ側の設定

今回利用した環境ではCustomer RouterにCisco Cloud Service Router (CSR) が使用されていましたので、SSHでCSRの設定を行います。

  1. WANインタフェースの設定
    VLAN-IDはVIFの設定画面でメモしたものです。

    csr#conf t
    Enter configuration commands, one per line.  End with CNTL/Z.
    csr(config)#int gig 3
    csr(config-if)#no shut
    csr(config-if)#exit
    csr(config)#int gig 3.2122
    csr(config-subif)#enc dot1Q 2122
    csr(config-subif)#ip address 169.254.100.10 255.255.255.252
    csr(config-subif)#end
    
  2. 対向ルータ(DXGW)への疎通確認
    pingの接続先はVIFの設定画面でメモしたものです。

    csr#ping 169.254.100.9 rep 10
    Type escape sequence to abort.
    Sending 10, 100-byte ICMP Echos to 169.254.100.9, timeout is 2 seconds:
    !!!!!!!!!!
    Success rate is 100 percent (10/10), round-trip min/avg/max = 2/10/18 ms
    
  3. BGPピアの設定
    対向ルータのIPアドレスはVIFの設定画面でメモしたもの、ASNはDXGW作成時に指定したものです。

    csr#configure terminal
    Enter configuration commands, one per line.  End with CNTL/Z.
    csr(config)#router bgp 65001
    csr(config-router)#neighbor 169.254.100.9 remote-as 64513
    csr(config-router)#neighbor 169.254.100.9 password ***
    csr(config-router)#network 169.254.100.8 mask 255.255.255.252
    csr(config-router)#end
    
  4. BGPピアの状態確認
    BGP stateがEstablishedかどうか確認します。

    csr#show ip bgp neighbors
    ・・・(取り忘れ)
    
  5. BGPの受信ルート確認

    csr#show ip bgp neighbors 169.254.100.5 routes
    ・・・(取り忘れ)
    
  6. BGPの送信ルート確認

    csr#show ip bgp neighbors 169.254.100.5 advertised-routes
    ・・・(取り忘れ)
    
  7. VIFのステータスを確認します。
    状態がavailable、BGPのステータスもupになってるのが確認できます。ステータスは一定時間毎に更新されるそうなのでラグがあります。
    PT3_VIF3

  8. TGWルートテーブルの確認
    VPCやDXGWから伝搬したルートが登録されているのが確認できます。(使用した環境の都合で他のルートも表示されています。)
    PT3_TGWRTB2

おわりに

今回紹介した3つの構成をマネコンで作れるようになれば、DXの基本はばっちりだと思います。さらに理解を深めたい方はDXのBlack Beltのスライドをどうぞ。

Discussion