Help us understand the problem. What is going on with this article?

ハードウェアVPN機能とvyattaを用いたAWS & SoftLayer多拠点間VPN接続

More than 3 years have passed since last update.

前回はvyattaを用いてAWS VPCとSoftLayerをIPsec VPNで接続したが、設定が非常に煩雑だった。

そこで今回は、AWSのハードウェアVPN機能とvyattaを用い、各拠点の経路情報をBGPを用いて交換することで、なるべく簡単な手順でAWSとSoftLayerを多拠点間VPN接続する。
aws_sl_vpn.png

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とする。

aws_softlayer_vpn01.png

仮想プライベートゲートウェイを割り当て

仮想プライベートゲートウェイを作成する。

aws_softlayer_vpn02.png

先ほど作成したVPCにアタッチする。

aws_softlayer_vpn03.png

カスタマーゲートウェイ作成

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用のカスタマーゲートウェイの例。

aws_softlayer_vpn04.png

VPN接続の立ち上げ

作成した仮想プライベートゲートウェイと3つのカスタマーゲートウェイを結びつけて、AWS東京リージョンを中心とした3つのVPN接続を立ち上げる。

以下はSoftLayer東京DCとのVPN接続の例。

aws_softlayer_vpn05.png

AWSのハードウェアVPN機能は最初から冗長化されており、VPNトンネルは自動的に二つ作成される。ただしこの段階では対向のVPNルータが立ち上がっていないため、VPNトンネルはDOWNした状態になっている。

aws_softlayer_vpn06.png

設定ファイルのダウンロード

各VPN接続の設定情報を、vyattaのコマンド形式でそれぞれダウンロードする。

aws_softlayer_vpn07.png

AWSシンガポールリージョンでvyatta起動

AWSシンガポールリージョンでVPCとパブリックサブネットを作成し、vyattaインスタンスを起動して確保しておいたElastic IPを割り当てる。

VPC作成

VPCを作成する。CIDRは192.168.128.0/17とする。

aws_softlayer_vpn08.png

サブネット作成

先ほど作ったVPC内のap-southeast-1aでサブネットを作成する。CIDRは192.168.128.0/24とする。

aws_softlayer_vpn09.png

インターネットゲートウェイの作成とアタッチ

先ほど作ったVPC内に、インターネットゲートウェイを作成し、VPCにアタッチする。

aws_softlayer_vpn10.png

aws_softlayer_vpn11.png

ルートテーブルの修正

作成したサブネットに割り当てられているルートテーブルに、0.0.0.0/0をインターネットゲートウェイに向けるエントリを追加する。

aws_softlayer_vpn12.png

vyattaインスタンス起動

以下のスペックのインスタンスを作成したサブネットに立ち上げる。

  • ami: Vyatta Core 6.6 R1 x86_64 rev1 - ami-d2b0ff80
  • type: t1.micro
  • IPアドレス: 192.168.128.10

aws_softlayer_vpn13.png

セキュリティグループ

AWS東京リージョンで作成したVPN接続のトンネル端点のIPアドレス(103.246.151.29103.246.151.39)からのESP(IPプロトコル50)とIKE(UDPポート500)を受け入れる。またAWSとSoftLayerのプライベートIPも受け入れる。

aws_softlayer_vpn14.png

ENIの設定変更

作成したvyattaインスタンスのENIの「送信元/送信先の変更チェック」を無効化し、パケットを転送できるようにする。

aws_softlayer_vpn15.png

aws_softlayer_vpn16.png

Elastic IP割り当て

確保しておいたElastic IPを立ち上げたvyattaインスタンスのENIに割り当てる。

aws_softlayer_vpn17.png

AWSシンガポールリージョンのvyatta設定

ダウンロードしたvyatta用設定スクリプトを元に、AWSシンガポールリージョンのvyattaを設定する。
ただし、ダウンロードしたスクリプトをそのまま実行しても動作しない。BGPで広報するネットワークの設定、及び各トンネルをピアリングするlocal addressを適切に変更しなければならない。

共通の設定

IPsecを設定するNICの指定

唯一のNICであるeth0を指定する(スクリプトからの変更点なし)。

IPsecを設定するNICの指定
vyatta@vyatta# set vpn ipsec ipsec-interfaces interface 'eth0'
[edit]

IKEの設定

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を設定する(スクリプトからの変更点なし)。

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も指定する。

BGPで広報するネットワークの設定
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ピアを設定する(スクリプトからの変更点なし)。

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ピアの設定

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になっている。

IPsec接続の確認
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になっている。

aws_softlayer_vpn18.png

SoftLayerのvyatta設定

次にSoftLayerのvyattaを設定する。以下はSoftLayer東京DCでの設定だが、シンガポールDCでも同様の設定を行う。

AWSと同様、ダウンロードしたスクリプトをそのまま実行しても動作しない。変更すべきポイントは、BGPで広報するネットワークの設定と、IPsecを設定するNICがeth0ではなくeth1であること。

共通の設定

IPsecを設定するNICの指定

SoftLayerのパブリックにつながっているNICはeth1なので、IPsecを設定するNICはeth1を指定する。

IPsecを設定するNICの指定
vyatta@vyatta-sl-tok# set vpn ipsec ipsec-interfaces interface 'eth1'
[edit]

IKEの設定

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を設定する(スクリプトからの変更点なし)。

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の場合このサブネットのみルーティングすれば良いので、明示的な静的ルートの設定は不要。

BGPで広報するネットワークの設定
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ピアを設定する(スクリプトからの変更点なし)。

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ピアの設定

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になっている。

IPsec接続の確認
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になっている。

aws_softlayer_vpn19.png

接続テスト用インスタンスの作成

ここまでで各拠点がIPsec VPNで接続された。次に接続テスト用のインスタンスを立ち上げる。

AWS東京リージョン

異なるAZでサブネットを作成

接続テスト用に、異なるAZでサブネットを立ち上げる。ap-northeast-1bに192.168.10.0/24、ap-northeast-1cに192.168.11.0/24を作成する。

インターネットゲートウェイを作成しVPCにアタッチ

接続テスト用インスタンスにインターネット側からSSHできるように、インターネットゲートウェイを作成してVPCにアタッチする。

ルートテーブルのアタッチ

自動的に作成されたルートテーブルを明示的に各サブネットにアタッチする。

aws_softlayer_vpn20.png

ルートテーブルの修正

サブネットを関連付けたルートテーブルに、0.0.0.0/0をインターネットゲートウェイに向けるエントリを追加する。

aws_softlayer_vpn21.png

また仮想プライベートゲートウェイからのルート伝達(route propagation)を許可する。

aws_softlayer_vpn22.png

これにより、BGPによって交換されたルート情報が自動的にルートテーブルに登録される。

aws_softlayer_vpn23.png

接続テスト用インスタンス起動

作成した二つのサブネットそれぞれに、以下のスペック接続テスト用インスタンスを立ち上げる。

  • 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を作成する。

ルートテーブルの作成とアタッチ

新たに作成したサブネット用にルートテーブルを作成し、各々のサブネットにアタッチする。

aws_softlayer_vpn24.png

aws_softlayer_vpn25.png

ルートテーブルの修正

サブネットを関連付けたルートテーブルに、0.0.0.0/0をインターネットゲートウェイに向けるエントリを追加する。

またこのルートテーブルにはBGPのルート情報を自動的に反映できないため、10.0.0.0/8と192.168.0.0/17をvyattaインスタンスのENIに振り向けるエントリも追加する。

aws_softlayer_vpn26.png

接続テスト用インスタンス起動

作成した二つのサブネットそれぞれに、以下のスペック接続テスト用インスタンスを立ち上げる。

  • 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にルーティングするように静的ルートを設定する。

東京DCの接続テスト用インスタンスへ静的ルート追加
root@test-sl-tok-01:~# ip route add 192.168.0.0/16 via 10.132.182.81 dev eth0
シンガポールDCの接続テスト用インスタンスへ静的ルート追加
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からの例。

SoftLayerシンガポールDCからのping結果
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 PatternCloudHubパターンの一種と言っても良いだろう。

まとめ

この手順が「簡単」かと言うと疑問が残るが、ともあれAWSのハードウェアVPN機能とvyattaを用い、各拠点の経路情報をBGPを用いて交換することで、AWSとSoftLayerの多拠点間IPsec VPN接続が確立できた。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした