前回はvyattaを用いてAWS VPCとSoftLayerをIPsec VPNで接続したが、設定が非常に煩雑だった。
そこで今回は、AWSのハードウェアVPN機能とvyattaを用い、各拠点の経路情報をBGPを用いて交換することで、なるべく簡単な手順でAWSとSoftLayerを多拠点間VPN接続する。
SoftLayerでvyatta起動
SoftLayerのvyattaインスタンスのパブリックIPを確定するために、最初にSoftLayerの東京DCとシンガポールDCでvyattaインスタンスを立ち上げる。
- OS: Vyatta 6.6 Community Edision (64bit)
- CPU: 2.0GHz 1core
- RAM: 1GB RAM
DC | パブリックIP | パブリックサブネット | プライベートIP | プライベートサブネット |
---|---|---|---|---|
東京 | 161.202.114.70 | 161.202.114.64/28 | 10.132.182.81 | 10.132.182.64/26 |
シンガポール | 161.202.24.85 | 161.202.24.80/28 | 10.117.212.51 | 10.117.212.0/26 |
AWSシンガポールリージョンでElastic IP確保
AWSシンガポールリージョンで立ち上げる予定のvyattaインスタンス用に、使用箇所がVPCのElastic IPを一つ確保する。
今回は52.76.38.181が確保された。
AWS東京リージョンでハードウェアVPN接続を立ち上げ
AWS東京リージョンでVPCを作成して仮想プライベートゲートウェイを割り当て、AWSシンガポールリージョン、SoftLayer東京DC、SoftLayerシンガポールDCとのVPN接続を設定する。
VPC作成
VPCを作成する。CIDRは192.168.0.0/17とする。
仮想プライベートゲートウェイを割り当て
仮想プライベートゲートウェイを作成する。
先ほど作成したVPCにアタッチする。
カスタマーゲートウェイ作成
VPN接続先のアンカーとなるカスタマーゲートウェイを、SoftLayer東京DC、SoftLayerシンガポールDC、AWSシンガポールリージョンの3拠点分作成する。BGPによる動的ルーティングを行うが、AS番号はプライベート領域(64512~65535)から重複せずに選ぶ。
拠点 | パブリックIP | AS番号 |
---|---|---|
SoftLayer東京DC | 161.202.114.70 | 65001 |
SoftLayerシンガポールDC | 161.202.24.85 | 65002 |
AWSシンガポールリージョン | 52.76.38.181 | 65003 |
以下はSoftLayer東京DC用のカスタマーゲートウェイの例。
VPN接続の立ち上げ
作成した仮想プライベートゲートウェイと3つのカスタマーゲートウェイを結びつけて、AWS東京リージョンを中心とした3つのVPN接続を立ち上げる。
以下はSoftLayer東京DCとのVPN接続の例。
AWSのハードウェアVPN機能は最初から冗長化されており、VPNトンネルは自動的に二つ作成される。ただしこの段階では対向のVPNルータが立ち上がっていないため、VPNトンネルはDOWNした状態になっている。
設定ファイルのダウンロード
各VPN接続の設定情報を、vyattaのコマンド形式でそれぞれダウンロードする。
AWSシンガポールリージョンでvyatta起動
AWSシンガポールリージョンでVPCとパブリックサブネットを作成し、vyattaインスタンスを起動して確保しておいたElastic IPを割り当てる。
VPC作成
VPCを作成する。CIDRは192.168.128.0/17とする。
サブネット作成
先ほど作ったVPC内のap-southeast-1aでサブネットを作成する。CIDRは192.168.128.0/24とする。
インターネットゲートウェイの作成とアタッチ
先ほど作ったVPC内に、インターネットゲートウェイを作成し、VPCにアタッチする。
ルートテーブルの修正
作成したサブネットに割り当てられているルートテーブルに、0.0.0.0/0をインターネットゲートウェイに向けるエントリを追加する。
vyattaインスタンス起動
以下のスペックのインスタンスを作成したサブネットに立ち上げる。
- ami: Vyatta Core 6.6 R1 x86_64 rev1 - ami-d2b0ff80
- type: t1.micro
- IPアドレス: 192.168.128.10
セキュリティグループ
AWS東京リージョンで作成したVPN接続のトンネル端点のIPアドレス(103.246.151.29と103.246.151.39)からのESP(IPプロトコル50)とIKE(UDPポート500)を受け入れる。またAWSとSoftLayerのプライベートIPも受け入れる。
ENIの設定変更
作成したvyattaインスタンスのENIの「送信元/送信先の変更チェック」を無効化し、パケットを転送できるようにする。
Elastic IP割り当て
確保しておいたElastic IPを立ち上げたvyattaインスタンスのENIに割り当てる。
AWSシンガポールリージョンのvyatta設定
ダウンロードしたvyatta用設定スクリプトを元に、AWSシンガポールリージョンのvyattaを設定する。
ただし、ダウンロードしたスクリプトをそのまま実行しても動作しない。BGPで広報するネットワークの設定、及び各トンネルをピアリングするlocal addressを適切に変更しなければならない。
共通の設定
IPsecを設定するNICの指定
唯一のNICであるeth0を指定する(スクリプトからの変更点なし)。
vyatta@vyatta# set vpn ipsec ipsec-interfaces interface 'eth0'
[edit]
IKEの設定
IKEを設定する(スクリプトからの変更点なし)。
vyatta@vyatta# set vpn ipsec ike-group AWS lifetime '28800'
[edit]
vyatta@vyatta# set vpn ipsec ike-group AWS proposal 1 dh-group '2'
[edit]
vyatta@vyatta# set vpn ipsec ike-group AWS proposal 1 encryption 'aes128'
[edit]
vyatta@vyatta# set vpn ipsec ike-group AWS proposal 1 hash 'sha1'
[edit]
vyatta@vyatta# set vpn ipsec ike-group AWS dead-peer-detection action 'restart'
[edit]
vyatta@vyatta# set vpn ipsec ike-group AWS dead-peer-detection interval '15'
[edit]
vyatta@vyatta# set vpn ipsec ike-group AWS dead-peer-detection timeout '30'
[edit]
ESPの設定
ESPを設定する(スクリプトからの変更点なし)。
vyatta@vyatta# set vpn ipsec esp-group AWS compression 'disable'
[edit]
vyatta@vyatta# set vpn ipsec esp-group AWS lifetime '3600'
[edit]
vyatta@vyatta# set vpn ipsec esp-group AWS mode 'tunnel'
[edit]
vyatta@vyatta# set vpn ipsec esp-group AWS pfs 'enable'
[edit]
vyatta@vyatta# set vpn ipsec esp-group AWS proposal 1 encryption 'aes128'
[edit]
vyatta@vyatta# set vpn ipsec esp-group AWS proposal 1 hash 'sha1'
[edit]
BGPで広報するネットワークの設定
ダウンロードしたスクリプトには全てのネットワーク(0.0.0.0/0)をVPNに向けるように広報する設定が書かれているが、これをシンガポールリージョンのVPCのアドレス(192.168.128.0/17)を広報するように変更する。
なおvyattaが所属するサブネットのアドレス(192.168.128.0/24)だけを広報するならば不要なのだが、AWSシンガポールリージョンのvpc全域のパケットをこちらにルーティングさせたいので、静的ルートとnext hopも指定する。
vyatta@vyatta# set protocols bgp 65003 network 192.168.128.0/17
[edit]
vyatta@vyatta# set protocols static route 192.168.128.0/17 next-hop 192.168.128.1
[edit]
トンネル 1の設定
ピアリングの設定
AWS東京リージョン トンネル 1へのピアリングを設定する。
ダウンロードしたスクリプトにはlocal-adderssとしてvyattaインスタンスのElastic IP(52.76.38.181)が書かれているが、これをvyattaインスタンスのプラ一ベートIP(192.168.128.10)に置き換える。
vyatta@vyatta# set vpn ipsec site-to-site peer 103.246.151.29 authentication mode 'pre-shared-secret'
[edit]
vyatta@vyatta# set vpn ipsec site-to-site peer 103.246.151.29 authentication pre-shared-secret <スクリプトで指定されている秘密の鍵>
[edit]
vyatta@vyatta# set vpn ipsec site-to-site peer 103.246.151.29 description 'VPC tunnel 1'
[edit]
vyatta@vyatta# set vpn ipsec site-to-site peer 103.246.151.29 ike-group 'AWS'
[edit]
vyatta@vyatta# set vpn ipsec site-to-site peer 103.246.151.29 local-address '192.168.128.10'
[edit]
vyatta@vyatta# set vpn ipsec site-to-site peer 103.246.151.29 vti bind 'vti0'
[edit]
vyatta@vyatta# set vpn ipsec site-to-site peer 103.246.151.29 vti esp-group 'AWS'
[edit]
トンネルインタフェースの設定
トンネル 1のインタフェースを設定する(スクリプトからの変更点なし)。
vyatta@vyatta# set interfaces vti vti0 address '169.254.252.42/30'
[edit]
vyatta@vyatta# set interfaces vti vti0 description 'VPC tunnel 1'
[edit]
vyatta@vyatta# set interfaces vti vti0 mtu '1436'
[edit]
BGPピアの設定
トンネル 1の対向となるBGPピアを設定する(スクリプトからの変更点なし)。
vyatta@vyatta# set protocols bgp 65003 neighbor 169.254.252.41 remote-as '10124'
[edit]
vyatta@vyatta# set protocols bgp 65003 neighbor 169.254.252.41 soft-reconfiguration 'inbound'
[edit]
vyatta@vyatta# set protocols bgp 65003 neighbor 169.254.252.41 timers holdtime '30'
[edit]
vyatta@vyatta# set protocols bgp 65003 neighbor 169.254.252.41 timers keepalive '30'
[edit]
トンネル 2の設定
トンネル 1と同様、local addressの変更に注意して設定を行う。
ピアリングの設定
vyatta@vyatta# set vpn ipsec site-to-site peer 103.246.151.39 authentication mode 'pre-shared-secret'
[edit]
vyatta@vyatta# set vpn ipsec site-to-site peer 103.246.151.39 authentication pre-shared-secret <スクリプトで指定されている秘密の鍵>
[edit]
vyatta@vyatta# set vpn ipsec site-to-site peer 103.246.151.39 description 'VPC tunnel 2'
[edit]
vyatta@vyatta# set vpn ipsec site-to-site peer 103.246.151.39 ike-group 'AWS'
[edit]
vyatta@vyatta# set vpn ipsec site-to-site peer 103.246.151.39 local-address '192.168.128.10'
[edit]
vyatta@vyatta# set vpn ipsec site-to-site peer 103.246.151.39 vti bind 'vti1'
[edit]
vyatta@vyatta# set vpn ipsec site-to-site peer 103.246.151.39 vti esp-group 'AWS'
[edit]
トンネルインタフェースの設定
vyatta@vyatta# set interfaces vti vti1 address '169.254.252.46/30'
[edit]
vyatta@vyatta# set interfaces vti vti1 description 'VPC tunnel 2'
[edit]
vyatta@vyatta# set interfaces vti vti1 mtu '1436'
[edit]
BGPピアの設定
vyatta@vyatta# set protocols bgp 65003 neighbor 169.254.252.45 remote-as '10124'
[edit]
vyatta@vyatta# set protocols bgp 65003 neighbor 169.254.252.45 soft-reconfiguration 'inbound'
[edit]
vyatta@vyatta# set protocols bgp 65003 neighbor 169.254.252.45 timers holdtime '30'
[edit]
vyatta@vyatta# set protocols bgp 65003 neighbor 169.254.252.45 timers keepalive '30'
[edit]
設定の確定と保存
ここまででAWSシンガポールリージョンのvyattaの設定が終わったので、設定を確定して保存する。
vyatta@vyatta# commit
[edit]
vyatta@vyatta# save
Saving configuration to '/config/config.boot'...
Done
[edit]
IPSec接続の確認
少し時間を置くと、IPSec接続が確立したことが確認できる。
AWSシンガポールリージョンのIPsec VPN接続の状態
ikeとipsecがupになっている。
vyatta@vyatta# run show vpn ike sa
Peer ID / IP Local ID / IP
------------ -------------
103.246.151.29 192.168.128.10
Description: VPC tunnel 1
State Encrypt Hash D-H Grp NAT-T A-Time L-Time
----- ------- ---- ------- ----- ------ ------
up aes128 sha1 2 no 800 28800
Peer ID / IP Local ID / IP
------------ -------------
103.246.151.39 192.168.128.10
Description: VPC tunnel 2
State Encrypt Hash D-H Grp NAT-T A-Time L-Time
----- ------- ---- ------- ----- ------ ------
up aes128 sha1 2 no 1041 28800
[edit]
vyatta@vyatta# run show vpn ipsec sa
Peer ID / IP Local ID / IP
------------ -------------
103.246.151.29 192.168.128.10
Description: VPC tunnel 1
Tunnel State Bytes Out/In Encrypt Hash NAT-T A-Time L-Time Proto
------ ----- ------------- ------- ---- ----- ------ ------ -----
vti up 1.4K/1.2K aes128 sha1 no 1033 3600 all
Peer ID / IP Local ID / IP
------------ -------------
103.246.151.39 192.168.128.10
Description: VPC tunnel 2
Tunnel State Bytes Out/In Encrypt Hash NAT-T A-Time L-Time Proto
------ ----- ------------- ------- ---- ----- ------ ------ -----
vti up 1.6K/1.6K aes128 sha1 no 708 3600 all
[edit]
AWS東京リージョンのIPsec VPN接続の状態
AWSシンガポールリージョンをアンカーするカスタマーゲートウェイのステータスがUPになっている。
SoftLayerのvyatta設定
次にSoftLayerのvyattaを設定する。以下はSoftLayer東京DCでの設定だが、シンガポールDCでも同様の設定を行う。
AWSと同様、ダウンロードしたスクリプトをそのまま実行しても動作しない。変更すべきポイントは、BGPで広報するネットワークの設定と、IPsecを設定するNICがeth0ではなくeth1であること。
共通の設定
IPsecを設定するNICの指定
SoftLayerのパブリックにつながっているNICはeth1なので、IPsecを設定するNICはeth1を指定する。
vyatta@vyatta-sl-tok# set vpn ipsec ipsec-interfaces interface 'eth1'
[edit]
IKEの設定
IKEを設定する(スクリプトからの変更点なし)。
vyatta@vyatta-sl-tok# set vpn ipsec ike-group AWS lifetime '28800'
[edit]
vyatta@vyatta-sl-tok# set vpn ipsec ike-group AWS proposal 1 dh-group '2'
[edit]
vyatta@vyatta-sl-tok# set vpn ipsec ike-group AWS proposal 1 encryption 'aes128'
[edit]
vyatta@vyatta-sl-tok# set vpn ipsec ike-group AWS proposal 1 hash 'sha1'
[edit]
vyatta@vyatta-sl-tok# set vpn ipsec ike-group AWS dead-peer-detection action 'restart'
[edit]
vyatta@vyatta-sl-tok# set vpn ipsec ike-group AWS dead-peer-detection interval '15'
[edit]
vyatta@vyatta-sl-tok# set vpn ipsec ike-group AWS dead-peer-detection timeout '30'
[edit]
ESPの設定
ESPを設定する(スクリプトからの変更点なし)。
vyatta@vyatta-sl-tok# set vpn ipsec esp-group AWS compression 'disable'
[edit]
vyatta@vyatta-sl-tok# set vpn ipsec esp-group AWS lifetime '3600'
[edit]
vyatta@vyatta-sl-tok# set vpn ipsec esp-group AWS mode 'tunnel'
[edit]
vyatta@vyatta-sl-tok# set vpn ipsec esp-group AWS pfs 'enable'
[edit]
vyatta@vyatta-sl-tok# set vpn ipsec esp-group AWS proposal 1 encryption 'aes128'
[edit]
vyatta@vyatta-sl-tok# set vpn ipsec esp-group AWS proposal 1 hash 'sha1'
[edit]
BGPで広報するネットワークの設定
SoftLayer東京DCのプライベートサブネットのアドレス(10.132.182.64/26)を広報する。SoftLayerの場合このサブネットのみルーティングすれば良いので、明示的な静的ルートの設定は不要。
vyatta@vyatta-sl-tok# set protocols bgp 65001 network 10.132.182.64/26
[edit]
トンネル 1の設定
ピアリングの設定
AWS東京リージョン トンネル 1へのピアリングを設定する(スクリプトからの変更点なし)。
vyatta@vyatta-sl-tok# set vpn ipsec site-to-site peer 103.246.151.29 authentication mode 'pre-shared-secret'
[edit]
vyatta@vyatta-sl-tok# set vpn ipsec site-to-site peer 103.246.151.29 authentication pre-shared-secret <スクリプトで指定されている秘密の鍵>
[edit]
vyatta@vyatta-sl-tok# set vpn ipsec site-to-site peer 103.246.151.29 description 'VPC tunnel 1'
[edit]
vyatta@vyatta-sl-tok# set vpn ipsec site-to-site peer 103.246.151.29 ike-group 'AWS'
[edit]
vyatta@vyatta-sl-tok# set vpn ipsec site-to-site peer 103.246.151.29 local-address '161.202.114.70'
[edit]
vyatta@vyatta-sl-tok# set vpn ipsec site-to-site peer 103.246.151.29 vti bind 'vti0'
[edit]
vyatta@vyatta-sl-tok# set vpn ipsec site-to-site peer 103.246.151.29 vti esp-group 'AWS'
[edit]
トンネルインタフェースの設定
トンネル 1のインタフェースを設定する(スクリプトからの変更点なし)。
vyatta@vyatta-sl-tok# set interfaces vti vti0 address '169.254.252.26/30'
[edit]
vyatta@vyatta-sl-tok# set interfaces vti vti0 description 'VPC tunnel 1'
[edit]
vyatta@vyatta-sl-tok# set interfaces vti vti0 mtu '1436'
[edit]
BGPピアの設定
トンネル 1の対向となるBGPピアを設定する(スクリプトからの変更点なし)。
vyatta@vyatta-sl-tok# set protocols bgp 65001 neighbor 169.254.252.25 remote-as '10124'
[edit]
vyatta@vyatta-sl-tok# set protocols bgp 65001 neighbor 169.254.252.25 soft-reconfiguration 'inbound'
[edit]
vyatta@vyatta-sl-tok# set protocols bgp 65001 neighbor 169.254.252.25 timers holdtime '30'
[edit]
vyatta@vyatta-sl-tok# set protocols bgp 65001 neighbor 169.254.252.25 timers keepalive '30'
[edit]
トンネル 2の設定
トンネル 1と同様、スクリプトからの変更点は無い。
ピアリングの設定
vyatta@vyatta-sl-tok# set vpn ipsec site-to-site peer 103.246.151.39 authentication mode 'pre-shared-secret'
[edit]
vyatta@vyatta-sl-tok# set vpn ipsec site-to-site peer 103.246.151.39 authentication pre-shared-secret <スクリプトで指定されている秘密の鍵>
[edit]
vyatta@vyatta-sl-tok# set vpn ipsec site-to-site peer 103.246.151.39 description 'VPC tunnel 2'
[edit]
vyatta@vyatta-sl-tok# set vpn ipsec site-to-site peer 103.246.151.39 ike-group 'AWS'
[edit]
vyatta@vyatta-sl-tok# set vpn ipsec site-to-site peer 103.246.151.39 local-address '161.202.114.70'
[edit]
vyatta@vyatta-sl-tok# set vpn ipsec site-to-site peer 103.246.151.39 vti bind 'vti1'
[edit]
vyatta@vyatta-sl-tok# set vpn ipsec site-to-site peer 103.246.151.39 vti esp-group 'AWS'
[edit]
トンネルインタフェースの設定
vyatta@vyatta-sl-tok# set interfaces vti vti1 address '169.254.252.30/30'
[edit]
vyatta@vyatta-sl-tok# set interfaces vti vti1 description 'VPC tunnel 2'
[edit]
vyatta@vyatta-sl-tok# set interfaces vti vti1 mtu '1436'
[edit]
BGPピアの設定
vyatta@vyatta-sl-tok# set protocols bgp 65001 neighbor 169.254.252.29 remote-as '10124'
[edit]
vyatta@vyatta-sl-tok# set protocols bgp 65001 neighbor 169.254.252.29 soft-reconfiguration 'inbound'
[edit]
vyatta@vyatta-sl-tok# set protocols bgp 65001 neighbor 169.254.252.29 timers holdtime '30'
[edit]
vyatta@vyatta-sl-tok# set protocols bgp 65001 neighbor 169.254.252.29 timers keepalive '30'
[edit]
設定の確定と保存
vyatta@vyatta-sl-tok# commit
[edit]
vyatta@vyatta-sl-tok# save
Saving configuration to '/config/config.boot'...
Done
[edit]
IPSec接続の確認
少し時間を置いた後、IPSec接続が確立したことを確認する。
SoftLayer東京DCのIPsec VPN接続の状態
ikeとipsecがupになっている。
vyatta@vyatta-sl-tok# run show vpn ike sa
Peer ID / IP Local ID / IP
------------ -------------
103.246.151.29 161.202.114.70
Description: VPC tunnel 1
State Encrypt Hash D-H Grp NAT-T A-Time L-Time
----- ------- ---- ------- ----- ------ ------
up aes128 sha1 2 no 1185 28800
Peer ID / IP Local ID / IP
------------ -------------
103.246.151.39 161.202.114.70
Description: VPC tunnel 2
State Encrypt Hash D-H Grp NAT-T A-Time L-Time
----- ------- ---- ------- ----- ------ ------
up aes128 sha1 2 no 1161 28800
[edit]
vyatta@vyatta-sl-tok# run show vpn ipsec sa
Peer ID / IP Local ID / IP
------------ -------------
103.246.151.29 161.202.114.70
Description: VPC tunnel 1
Tunnel State Bytes Out/In Encrypt Hash NAT-T A-Time L-Time Proto
------ ----- ------------- ------- ---- ----- ------ ------ -----
vti up 3.2K/3.1K aes128 sha1 no 1163 3600 all
Peer ID / IP Local ID / IP
------------ -------------
103.246.151.39 161.202.114.70
Description: VPC tunnel 2
Tunnel State Bytes Out/In Encrypt Hash NAT-T A-Time L-Time Proto
------ ----- ------------- ------- ---- ----- ------ ------ -----
vti up 2.9K/3.2K aes128 sha1 no 845 3600 all
[edit]
AWS東京リージョンのIPsec VPN接続の状態
SoftLayer東京DCをアンカーするカスタマーゲートウェイのステータスがUPになっている。
接続テスト用インスタンスの作成
ここまでで各拠点がIPsec VPNで接続された。次に接続テスト用のインスタンスを立ち上げる。
AWS東京リージョン
異なるAZでサブネットを作成
接続テスト用に、異なるAZでサブネットを立ち上げる。ap-northeast-1bに192.168.10.0/24、ap-northeast-1cに192.168.11.0/24を作成する。
インターネットゲートウェイを作成しVPCにアタッチ
接続テスト用インスタンスにインターネット側からSSHできるように、インターネットゲートウェイを作成してVPCにアタッチする。
ルートテーブルのアタッチ
自動的に作成されたルートテーブルを明示的に各サブネットにアタッチする。
ルートテーブルの修正
サブネットを関連付けたルートテーブルに、0.0.0.0/0をインターネットゲートウェイに向けるエントリを追加する。
また仮想プライベートゲートウェイからのルート伝達(route propagation)を許可する。
これにより、BGPによって交換されたルート情報が自動的にルートテーブルに登録される。
接続テスト用インスタンス起動
作成した二つのサブネットそれぞれに、以下のスペック接続テスト用インスタンスを立ち上げる。
- ap-northeast-1b
- ami: ubuntu/images/hvm-ssd/ubuntu-trusty-14.04-amd64-server-20150325 - ami-936d9d93
- type: t2.micro
- IPアドレス: 192.168.10.10
- セキュリティグループ:
- SSH: 0.0.0.0/0
- 全てのトラフィック: 10.0.0.0/8
- 全てのトラフィック: 192.168.0.0/16
- Elastic IP: 52.68.111.129
- ap-northeast-1c
- ami: ubuntu/images/hvm-ssd/ubuntu-trusty-14.04-amd64-server-20150325 - ami-936d9d93
- type: t2.micro
- IPアドレス: 192.168.11.10
- セキュリティグループ:
- SSH: 0.0.0.0/0
- 全てのトラフィック: 10.0.0.0/8
- 全てのトラフィック: 192.168.0.0/16
- Elastic IP: 52.68.136.205
AWSシンガポールリージョン
異なるAZでサブネットを作成
接続テスト用に、異なるAZでサブネットを立ち上げる。ap-sourceeast-1aに192.168.210.0/24、ap-southeast-1bに192.168.211.0/24を作成する。
ルートテーブルの作成とアタッチ
新たに作成したサブネット用にルートテーブルを作成し、各々のサブネットにアタッチする。
ルートテーブルの修正
サブネットを関連付けたルートテーブルに、0.0.0.0/0をインターネットゲートウェイに向けるエントリを追加する。
またこのルートテーブルにはBGPのルート情報を自動的に反映できないため、10.0.0.0/8と192.168.0.0/17をvyattaインスタンスのENIに振り向けるエントリも追加する。
接続テスト用インスタンス起動
作成した二つのサブネットそれぞれに、以下のスペック接続テスト用インスタンスを立ち上げる。
- ap-southeast-1a
- ami: ubuntu/images/hvm-ssd/ubuntu-trusty-14.04-amd64-server-20150325 - ami-96f1c1c4
- type: t2.micro
- IPアドレス: 192.168.210.10
- セキュリティグループ:
- SSH: 0.0.0.0/0
- 全てのトラフィック: 10.0.0.0/8
- 全てのトラフィック: 192.168.0.0/16
- Elastic IP: 52.74.32.95
- ap-southeast-1b
- ami: ubuntu/images/hvm-ssd/ubuntu-trusty-14.04-amd64-server-20150325 - ami-96f1c1c4
- type: t2.micro
- IPアドレス: 192.168.211.10
- セキュリティグループ:
- SSH: 0.0.0.0/0
- 全てのトラフィック: 10.0.0.0/8
- 全てのトラフィック: 192.168.0.0/16
- Elastic IP: 52.76.54.224
SoftLayer東京DCとシンガポールDC
接続テスト用インスタンス起動
各DCで、vyattaインスタンスと同じプライベートサブネットに所属するように接続テスト用インスタンスを立ち上げる。
- OS: Ubuntu 14.04 LTS (64 bit)
- CPU: 2.0GHz 1core
- RAM: 1GB RAM
静的ルートの設定
残念ながら、SoftLayerにはvyattaのBGPから得たルート情報をプライベートサブネットのデフォルトゲートウェイに自動反映する仕組みが無いため、AWSのプライベートIP宛のパケットは、vyattaのプライベートIPにルーティングするように静的ルートを設定する。
root@test-sl-tok-01:~# ip route add 192.168.0.0/16 via 10.132.182.81 dev eth0
root@test-sl-sng-01:~# ip route add 192.168.0.0/16 via 10.117.212.51 dev eth0
接続テスト
接続テスト用インスタンスは、下記のIPアドレスで立ち上がっている。
クラウド | AZまたはDC | パブリックIP | プライベートIP |
---|---|---|---|
AWS | ap-northeast-1b | 52.68.111.129 | 192.168.10.10 |
AWS | ap-northeast-1c | 52.68.136.205 | 192.168.11.10 |
AWS | ap-southeast-1a | 52.74.32.95 | 192.168.210.10 |
AWS | ap-southeast-1b | 52.76.54.224 | 192.168.211.10 |
SoftLayer | 東京DC | 161.202.114.72 | 10.132.182.82 |
SoftLayer | シンガポールDC | 161.202.24.89 | 10.117.212.62 |
各インスタンスから別のインスタンスへpingを打つことで、お互いがL3接続されていることを確認できる。
以下はSoftLayerシンガポールDCからの例。
root@test-sl-sng-01:~# ping -c 2 192.168.10.10
PING 192.168.10.10 (192.168.10.10) 56(84) bytes of data.
64 bytes from 192.168.10.10: icmp_seq=1 ttl=61 time=69.4 ms
64 bytes from 192.168.10.10: icmp_seq=2 ttl=61 time=68.7 ms
--- 192.168.10.10 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 68.763/69.111/69.459/0.348 ms
root@test-sl-sng-01:~# ping -c 2 192.168.11.10
PING 192.168.11.10 (192.168.11.10) 56(84) bytes of data.
64 bytes from 192.168.11.10: icmp_seq=1 ttl=61 time=71.7 ms
64 bytes from 192.168.11.10: icmp_seq=2 ttl=61 time=71.5 ms
--- 192.168.11.10 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 71.578/71.676/71.775/0.285 ms
root@test-sl-sng-01:~# ping -c 2 192.168.210.10
PING 192.168.210.10 (192.168.210.10) 56(84) bytes of data.
64 bytes from 192.168.210.10: icmp_seq=1 ttl=61 time=143 ms
64 bytes from 192.168.210.10: icmp_seq=2 ttl=61 time=143 ms
--- 192.168.210.10 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 143.378/143.380/143.382/0.002 ms
root@test-sl-sng-01:~# ping -c 2 192.168.211.10
PING 192.168.211.10 (192.168.211.10) 56(84) bytes of data.
64 bytes from 192.168.211.10: icmp_seq=1 ttl=61 time=144 ms
64 bytes from 192.168.211.10: icmp_seq=2 ttl=61 time=144 ms
--- 192.168.211.10 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 144.083/144.259/144.436/0.418 ms
root@test-sl-sng-01:~# ping -c 2 10.132.182.82
PING 10.132.182.82 (10.132.182.82) 56(84) bytes of data.
64 bytes from 10.132.182.82: icmp_seq=1 ttl=56 time=158 ms
64 bytes from 10.132.182.82: icmp_seq=2 ttl=56 time=75.0 ms
--- 10.132.182.82 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 75.059/116.531/158.003/41.472 ms
root@test-sl-sng-01:~# ping -c 2 10.117.212.62
PING 10.117.212.62 (10.117.212.62) 56(84) bytes of data.
64 bytes from 10.117.212.62: icmp_seq=1 ttl=64 time=0.022 ms
64 bytes from 10.117.212.62: icmp_seq=2 ttl=64 time=0.015 ms
--- 10.117.212.62 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.015/0.018/0.022/0.005 ms
またSoftLayerシンガポールDCからtracepathで確認したところ、AWS東京とは3ホップ、AWSシンガポールとは4ホップと、IPsec VPNのトンネル経由でつながっていることが確認できる。一方SoftLayer東京DCからとは9ホップを要しており、SoftLayerの内部ネットワークを経由してつながっているものと推測される。
root@test-sl-sng-01:~# tracepath 192.168.10.10
1?: [LOCALHOST] pmtu 1500
1: 10.117.212.51 0.981ms
1: 10.117.212.51 0.207ms
2: 10.117.212.51 0.514ms pmtu 1436
2: no reply
3: 192.168.10.10 70.033ms reached
Resume: pmtu 1436 hops 3 back 4
root@test-sl-sng-01:~# tracepath 192.168.210.10
1?: [LOCALHOST] pmtu 1500
1: 10.117.212.51 0.553ms
1: 10.117.212.51 0.466ms
2: 10.117.212.51 0.498ms pmtu 1436
2: no reply
3: no reply
4: 192.168.210.10 143.685ms reached
Resume: pmtu 1436 hops 4 back 4
root@test-sl-sng-01:~# tracepath 10.132.182.82
1?: [LOCALHOST] pmtu 1500
1: 10.117.212.3 1.068ms
1: 10.117.212.3 0.578ms
2: no reply
3: 10.0.30.214 1.055ms
4: no reply
5: no reply
6: no reply
7: no reply
8: no reply
9: 10.132.182.82 69.235ms reached
Resume: pmtu 1500 hops 9 back 9
CDP:CloudHubパターン
AWSシンガポールリージョンとSoftLayerシンガポールDCは直接接続されれいないが、各拠点がBGPによって経路交換することで、AWS東京リージョン経由で通信することができている。
このアーキテクチャは、Cloud Design Patternの**CloudHubパターン**の一種と言っても良いだろう。
まとめ
この手順が「簡単」かと言うと疑問が残るが、ともあれAWSのハードウェアVPN機能とvyattaを用い、各拠点の経路情報をBGPを用いて交換することで、AWSとSoftLayerの多拠点間IPsec VPN接続が確立できた。