Direct Connectまとめ
はじめに
Direct Connect (DX) に限らずですが、AWSのサービスの基本概念を理解するにはマネコンを触るのが近道です。とはいえ、DXは気軽に試すのが難しいサービスで、自分も机上の知識しかありませんでした。運良く触る機会をいただけたので、DXの構成要素や構成パターンを整理して、典型的な構成パターンをマネコンで作ってみました。
今回作ったのは次の3つの構成。スクショ多めなので、触る環境がない人のお役にたてばうれしいです。
DXの構成要素
いきなりですが、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
AWS側の設定
- VIFを直接VGWに接続するため、まずVGWを作成します。
ASNはAmazonデフォルトASNを選択すると64512になるようです。
- 作成したVGWをVPCにアタッチします。
- VPCのルートテーブルにオンプレDCへのルートを追加します。
- 作成したVGWとVIFを接続します。
環境の都合でPrivate VIFは事前に作成済みでしたが、承認待ちになっています。承認した時点から課金が発生するようです。まだ、VIFを接続していないので状態はpending
、BGPのステータスもdown
になっています。
Private VIFなのでDXGWかVGWに接続可能ですが、ここではVGWに直結します。接続先のVGWは先ほど作成したVGWを選択します。
オンプレ側の設定
本来ならCustomer Routerの設定が必要なのですが、今回利用した環境ではすでに設定済みでしたので、AWS側の設定が終わると自動的にBGPピアが確立され通信可能になります。構成2で同様の設定をしているのでそちらを参照してください。
[構成2] Private VIF -> DXGW -> VGW
AWS側の設定
- DXGWと接続するVGWを作成します。
- 作成したVGWをVPCにアタッチします。
- VPCのルートテーブルにオンプレDCへのルートを追加します。
静的ルートを追加しても良いのですが、DXGW経由でVGWに伝搬される経路情報を追加するようにします。
- DXGWを作成します。
ASNが64512とVGWと重複しているのですが、AWS内はASNが重複していても問題ないようです。
- 作成したDXGWとVGWを関連づけます。
複数のVGWをまとめて関連づけることもできます。今回は3つのリージョンのVGWを選択しました。
- DXGWとVIFを接続します。
環境の都合でPrivate VIFは事前に作成済みでしたが、承認待ちになっています。まだVIFを接続していないので、状態はpending
、BGPのステータスもdown
になっています。VLAN-IDとAmazonルーターのピアIPは後ほどCustomer Routerの設定時に使用するのでメモしておきましょう。
DXGWに接続します。接続先のDXGWは先ほど作成したDXGWを選択します。
DXGWとVGWの関連付けには少し時間がかかるようです。関連付けが表示されるまでしばらくかかるので焦らずまちましょう。
オンプレ側の設定
今回利用した環境ではCustomer RouterにCisco Cloud Service Router (CSR) が使用されていましたので、SSHでCSRの設定を行います。
-
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
-
対向ルータ(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
-
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
-
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: ・・・
-
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
-
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
-
VIFのステータスを確認します。
状態がavailable
、BGPのステータスもup
になってるのが確認できます。ステータスは一定時間毎に更新されるそうなのでラグがあります。
-
VPCのルートテーブル確認
VGWから伝搬したルートが登録されているのが確認できます。
[構成3] Transit VIF -> DXGW -> TGW
AWS側の設定
-
DXGWと接続するTGWを作成します。
使用した環境の都合で、構成2のCSRに新たなDX接続を追加する形でのお試しとなったので、既存のDXGWとは異なるASNを使用しています。
-
TGWアタッチメントを作成してTGWとVPCを接続します。
検証環境なので、シングルAZ構成、TGWアタッチメントを接続先VPCの他のリソースと同じサブネットに配置しています。本番ではマルチAZ構成にし、TGWアタッチメント専用のサブネットも作りましょう。詳細はTGW設計のベストプラクティス参照。
-
DXGWを作成します。
Transit VIF用に新たにDXGWを作成します。
-
作成したDXGWとTGWを関連づけます。
TGWを関連付ける場合はプレフィックスは必須です。VPCのCIDRをオンプレDCにアドバタイズするようにしましたが、絞り込んだり、サマリプレフィックスを指定することも可能です。
-
ルーティングの確認。
TGWにVPCやDXGWを関連付けると、TGWのルートテーブルにそれぞれからの経路情報が伝搬されるようになります。
VPCのルーティングテーブルにオンプレ側へのルート(TGW経由)追加が必要かもしれません。(環境の利用期間が終了してしまって確認できずスイマセン。)
- Transit VIFを作成します。
まずDXパートナーから割り当てられたホスト型接続を承諾しましょう。
接続が利用できるようになったら、Transit VIFを作成します。ホスト接続なのでVIFを1つ作ることができます。VLAN-IDはDXパートナーが指定しますが、自社のVLAN-IDとかぶらないIDを割り当ててもらうようにしましょう。
作成するVIFは同一アカウント内で利用するので、DXGWとの接続設定もここで行います。
オンプレ側の設定
今回利用した環境ではCustomer RouterにCisco Cloud Service Router (CSR) が使用されていましたので、SSHでCSRの設定を行います。
-
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
-
対向ルータ(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
-
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
-
BGPピアの状態確認
BGP stateがEstablished
かどうか確認します。csr#show ip bgp neighbors ・・・(取り忘れ)
-
BGPの受信ルート確認
csr#show ip bgp neighbors 169.254.100.5 routes ・・・(取り忘れ)
-
BGPの送信ルート確認
csr#show ip bgp neighbors 169.254.100.5 advertised-routes ・・・(取り忘れ)
-
VIFのステータスを確認します。
状態がavailable
、BGPのステータスもup
になってるのが確認できます。ステータスは一定時間毎に更新されるそうなのでラグがあります。
-
TGWルートテーブルの確認
VPCやDXGWから伝搬したルートが登録されているのが確認できます。(使用した環境の都合で他のルートも表示されています。)
おわりに
今回紹介した3つの構成をマネコンで作れるようになれば、DXの基本はばっちりだと思います。さらに理解を深めたい方はDXのBlack Beltのスライドをどうぞ。
Discussion