AWS x1 + SoftLayer x2でVPN接続

AWSでVPCを用いて作成したプライベートサブネットとSoftLayerのプライベートサブネットを、vyattaを用いてIPsec VPN接続する。
AWSのネットワークに対してSNAT/DNATを用いたりVPCルートテーブルの書き換えをせずとも、プライベートサブネットのIPアドレス同士がPeer-to-Peerで接続できるようにする。

![aws_sl_vpn.png](https://qiita-image-store.s3.amazonaws.com/0/37648/83e41190-8af7-ec57-fe1d-669ee6a39e12.png)

# SoftLayerのvyattaの設定

シンガポールDCとサンノゼDCに、以下のスペックのVirtual Serverを立ち上げる。

* OS: Vyatta 6.6 Community Edision (64bi)
* CPU: 2.0GHz 1core
* RAM: 1GB RAM

|DC|ホスト名|パブリックIP|パブリックサブネット|プライベートIP|プライベートサブネット|
|:--|:--|:--|:--|:--|:--|
|シンガポール|vyatta-sl-sng|119.81.4.122|119.81.4.120/29|10.67.3.168|10.67.3.128/26|
|サンノゼ|vyatta-sl-sjc|198.11.204.45|198.11.204.32/28|10.88.63.157|10.88.63.128/26|

## シンガポールDCのvyattaの設定

vyattaにログインし、以下の設定を行う

### IPsecを設定するNICの指定

SoftLayerはeth1がパブリック側のNICなので、eth1に対してIPsecの設定を行う。

```text:IPsecを設定するNICの指定
vyatta@vyatta-sl-sng:~$ configure 
[edit]
vyatta@vyatta-sl-sng# set vpn ipsec ipsec-interfaces interface eth1
[edit]
```

### NATトラバースの有効化

AWS VPCへのパケットはNATされるため、NATトラバースを有効にする。許可するネットワークは、AWSのプライベートサブネット。

```text:NATトラバース設定
vyatta@vyatta-sl-sng# set vpn ipsec nat-traversal enable
[edit]
vyatta@vyatta-sl-sng# set vpn ipsec nat-networks allowed-network 192.168.0.0/16
[edit]
```

### IKEとESPの設定

この設定は全てのvyattaで共通にする。

```text:IKEとESPの設定
vyatta@vyatta-sl-sng# set vpn ipsec ike-group IKE lifetime 3600
[edit]
vyatta@vyatta-sl-sng# set vpn ipsec ike-group IKE proposal 1 encryption aes256
[edit]
vyatta@vyatta-sl-sng# set vpn ipsec ike-group IKE proposal 1 hash sha1
[edit]
vyatta@vyatta-sl-sng# set vpn ipsec esp-group ESP lifetime 3600
[edit]
vyatta@vyatta-sl-sng# set vpn ipsec esp-group ESP proposal 1 encryption aes256
[edit]
vyatta@vyatta-sl-sng# set vpn ipsec esp-group ESP proposal 1 hash sha1
[edit]
```

### ピアリングの設定

SoftLayer側は任意のアドレスからの接続を受け入れる。**pre-shared-secret**は全てのvyattaで共通にする。
なお**local-address**はvyattaインスタンスのパブリックIP、**local prefix**はvyattaインスタンスのプライベートサブネット、**remote prefix**はAWSのプライベートサブネットを設定する。

```text:ピアリングの設定
vyatta@vyatta-sl-sng# set vpn ipsec site-to-site peer 0.0.0.0
[edit]
vyatta@vyatta-sl-sng# edit vpn ipsec site-to-site peer 0.0.0.0
[edit vpn ipsec site-to-site peer 0.0.0.0]
vyatta@vyatta-sl-sng# set authentication mode pre-shared-secret
[edit vpn ipsec site-to-site peer 0.0.0.0]
vyatta@vyatta-sl-sng# set authentication pre-shared-secret <秘密のキーワード>
[edit vpn ipsec site-to-site peer 0.0.0.0]
vyatta@vyatta-sl-sng# set default-esp-group ESP
[edit vpn ipsec site-to-site peer 0.0.0.0]
vyatta@vyatta-sl-sng# set ike-group IKE
[edit vpn ipsec site-to-site peer 0.0.0.0]
vyatta@vyatta-sl-sng# set local-address 119.81.4.122
[edit vpn ipsec site-to-site peer 0.0.0.0]
vyatta@vyatta-sl-sng# set tunnel 1 local prefix 10.67.3.128/26
[edit vpn ipsec site-to-site peer 0.0.0.0]
vyatta@vyatta-sl-sng# set tunnel 1 remote prefix 192.168.1.0/24
[edit vpn ipsec site-to-site peer 0.0.0.0]
vyatta@vyatta-sl-sng# commit
[edit vpn ipsec site-to-site peer 0.0.0.0]
vyatta@vyatta-sl-sng# save
Saving configuration to '/config/config.boot'...
Done
[edit]
```

> 本来であれば、vyattaのfirewall機能でeth1側のセキュリティを高めるべきだが、今回は検証のため実施していない。

## サンノゼDCのvyattaの設定

基本的にシンガポールDCと同一手順だが、**local-address**と**local prefix**はサンノゼDCのvyattaのパブリックIPとプライベートサブネットを設定する。

# AWS VPC作成

192.168.0.0/16というVPCから、パブリックサブネットとして192.168.0.0/24、プライベートサブネットとして192.168.1.0/24を切り出す。なおパブリックサブネットとプライベートサブネットは同じAvailability Zoneに所属していなければならない。

## VPCウィザードからVPCとパブリックサブネット作成

192.168.0.0/24のサブネットを、**ap-northeast-1c**に作成する。

![aws_sl_vpn_01.png](https://qiita-image-store.s3.amazonaws.com/0/37648/29a6ec3d-a24a-da60-43ad-5950a33d1e60.png)

## プライベートサブネット作成

192.168.1.0/24のサブネットをパブリックと同じ**ap-northeast-1c**に作成する。

![aws_sl_vpn_02.png](https://qiita-image-store.s3.amazonaws.com/0/37648/857bb597-a2bd-0d07-a379-f526a4714240.png)

# AWSのvyatta設定

## vyattaインスタンス起動

以下のスペックのインスタンスを東京リージョンの**ap-northeast-1c**に立ち上げる。

* AMI: Vyatta Core 6.6 R1 x86_64 rev1 - ami-07f47b06
* type: t1.micro

## ネットワーク設定

先ほど作成したVPCのパブリックサブネットでインスタンスを立ち上げる。この際eth0がパブリックサブネットに割り当てられるので、プライマリIPとして192.168.0.10を指定する。

またプライベートサブネットのeth1を追加して、プライマリIPとして192.168.1.10を指定する。

![aws_sl_vpn_03.png](https://qiita-image-store.s3.amazonaws.com/0/37648/eddc2af3-ab66-413a-202a-bd6160a56b60.png)

### セキュリティグループの設定

今回は検証なのであまり細かく設定せず、IPsec用のプロトコルをSoftLayerから受け付ける設定と、SoftLayerとAWSのプライベートサブネットからの全てのプロトコルを受け付ける設定を行う。

![aws_sl_vpn_04.png](https://qiita-image-store.s3.amazonaws.com/0/37648/7e46ef5e-15df-ae50-8175-ceec383d7b4a.png)

## ENIの設定変更

:bangbang: **重要**

EC2のENIは、デフォルト設定では送信元・送信先のどちらにも自分自身が含まれないパケットをドロップする。これではvyattaがルータとして動作できないため、vyattaがパケットを転送できるようにENIの「送信元/送信先の変更チェック」を無効化する。以下はパブリック側（eth0）の設定変更画面だが、同様にプライベート側（eth1）の設定も変更する。

### ENIの設定確認

![aws_sl_vpn_05.png](https://qiita-image-store.s3.amazonaws.com/0/37648/cbdd048f-bec5-7827-3b1f-590a862e157b.png)

![aws_sl_vpn_06.png](https://qiita-image-store.s3.amazonaws.com/0/37648/4b885969-5fa3-a8b2-1fb0-461339ceb8a6.png)

### ENIの設定変更

![aws_sl_vpn_07.png](https://qiita-image-store.s3.amazonaws.com/0/37648/36dbbd66-7111-86ad-60d6-35fbfceff117.png)

![aws_sl_vpn_08.png](https://qiita-image-store.s3.amazonaws.com/0/37648/9b776a10-b50b-adfc-cbfc-1bc9987da431.png)

## Elastic IPの付与

vyattaインスタンスのパブリック側ENI（192.168.0.10）にElastic IPを割り当てる。

## vyattaインスタンスの設定変更

### 追加NICの認識

AWS Management Consoleから追加したENIは、そのままではOSに認識されていないため、OSのネットワーク設定を変更して認識させる。

```text:ネットワーク設定変更
vyatta@vyatta:~$ sudo vi /etc/network/interfaces 
vyatta@vyatta:~$ cat /etc/network/interfaces 
# Used by ifup(8) and ifdown(8). See the interfaces(5) manpage or
# /usr/share/doc/ifupdown/examples for more information.

# The loopback network interface
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
    address 192.168.0.10
    netmask 255.255.255.0
    gateway 192.168.0.1

auto eth1
iface eth1 inet static
    address 192.168.1.10
    netmask 255.255.255.0
```

### ホスト名変更

後々わかりやすいように、ホスト名も変更する。

```text:ホスト名変更
vyatta@vyatta:~$ configure
[edit]
vyatta@vyatta# set system host-name vyatta-aws
[edit]
vyatta@vyatta# commit
[ system host-name vyatta-aws ]
Stopping enhanced syslogd: rsyslogd.
Starting enhanced syslogd: rsyslogd.

[edit]
vyatta@vyatta# save
Saving configuration to '/config/config.boot'...
Done
[edit]
vyatta@vyatta# exit
exit
```

### 再起動

再起動して変更を反映させる。

```text:再起動
vyatta@vyatta:~$ sudo reboot
```

### 設定確認

ホスト名及びNICが認識されていることを確認する。

```text:NIC確認
vyatta@vyatta-aws:~$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 0a:2a:10:85:6f:55 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.10/24 brd 192.168.0.255 scope global eth0
    inet6 fe80::82a:10ff:fe85:6f55/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 0a:b1:de:fc:05:39 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.10/24 brd 192.168.1.255 scope global eth1
    inet6 fe80::8b1:deff:fefc:539/64 scope link 
       valid_lft forever preferred_lft forever
```

## AWSのvyattaの設定

vyattaにログインし、以下の設定を行う

### IPsecを設定するNICの指定

SoftLayerとは逆に、設定したVPCではeth0がパブリック側のNICなので、eth0に対してIPsecの設定を行う。

```text:IPsecを設定するNICの指定
vyatta@vyatta-aws:~$ configure
[edit]
vyatta@vyatta-aws# set vpn ipsec ipsec-interfaces interface eth0
[edit]
```

### NATトラバースの有効化

SoftLayerでの場合と同様、NATトラバースを有効にする。シンガポールとサンノゼの個々のプライベートサブネットを許可しても良いが、10.0.0.0/8でSoftLayerの全てのプライベートサブネットを許可できる。

```text:NATトラバース設定
vyatta@vyatta-aws# set vpn ipsec nat-traversal enable
[edit]
vyatta@vyatta-aws# set vpn ipsec nat-networks allowed-network 10.0.0.0/8
[edit]
```

### IKEとESPの設定

SoftLayerと同一の設定を行う。

```text:IKEとESPの設定
vyatta@vyatta-aws# set vpn ipsec ike-group IKE lifetime 3600
[edit]
vyatta@vyatta-aws# set vpn ipsec ike-group IKE proposal 1 encryption aes256
[edit]
vyatta@vyatta-aws# set vpn ipsec ike-group IKE proposal 1 hash sha1
[edit]
vyatta@vyatta-aws# set vpn ipsec esp-group ESP lifetime 3600
[edit]
vyatta@vyatta-aws# set vpn ipsec esp-group ESP proposal 1 encryption aes256
[edit]
vyatta@vyatta-aws# set vpn ipsec esp-group ESP proposal 1 hash sha1
[edit]
```

### ピアリングの設定

AWSからはシンガポールとサンノゼのパブリックIPをそれぞれ個別に設定する。**pre-shared-secret**は全てのvyattaで共通にする。
なお**local-address**はパブリックサブネット側（eth0）のIP、**local prefix**はプライベートサブネット、**remote prefix**はシンガポール、サンノゼそれぞれのプライベートサブネットを設定する。

```text:シンガポールとのピアリングの設定
vyatta@vyatta-aws# set vpn ipsec site-to-site peer 119.81.4.122
[edit]
vyatta@vyatta-aws# edit vpn ipsec site-to-site peer 119.81.4.122
[edit vpn ipsec site-to-site peer 119.81.4.122]
vyatta@vyatta-aws# set authentication mode pre-shared-secret
[edit vpn ipsec site-to-site peer 119.81.4.122]
vyatta@vyatta-aws#  set authentication pre-shared-secret <秘密のキーワード>
[edit vpn ipsec site-to-site peer 119.81.4.122]
vyatta@vyatta-aws# set default-esp-group ESP
[edit vpn ipsec site-to-site peer 119.81.4.122]
vyatta@vyatta-aws# set ike-group IKE
[edit vpn ipsec site-to-site peer 119.81.4.122]
vyatta@vyatta-aws# set local-address 192.168.0.10
[edit vpn ipsec site-to-site peer 119.81.4.122]
vyatta@vyatta-aws# set tunnel 1 local prefix 192.168.1.0/24
[edit vpn ipsec site-to-site peer 119.81.4.122]
vyatta@vyatta-aws# set tunnel 1 remote prefix 10.67.3.128/26
[edit vpn ipsec site-to-site peer 119.81.4.122]
vyatta@vyatta-aws# top
[edit]
```

```text:サンノゼとのピアリングの設定
vyatta@vyatta-aws# set vpn ipsec site-to-site peer 198.11.204.45
[edit]
vyatta@vyatta-aws# edit vpn ipsec site-to-site peer 198.11.204.45
[edit vpn ipsec site-to-site peer 198.11.204.45]
vyatta@vyatta-aws# set authentication mode pre-shared-secret
[edit vpn ipsec site-to-site peer 198.11.204.45]
vyatta@vyatta-aws# set authentication pre-shared-secret <秘密のキーワード>
[edit vpn ipsec site-to-site peer 198.11.204.45]
vyatta@vyatta-aws# set default-esp-group ESP
[edit vpn ipsec site-to-site peer 198.11.204.45]
vyatta@vyatta-aws# set ike-group IKE
[edit vpn ipsec site-to-site peer 198.11.204.45]
vyatta@vyatta-aws# set local-address 192.168.0.10
[edit vpn ipsec site-to-site peer 198.11.204.45]
vyatta@vyatta-aws# set tunnel 1 local prefix 192.168.1.0/24
[edit vpn ipsec site-to-site peer 198.11.204.45]
vyatta@vyatta-aws# set tunnel 1 remote prefix 10.88.63.128/26
[edit vpn ipsec site-to-site peer 198.11.204.45]
vyatta@vyatta-aws# commit
[edit vpn ipsec site-to-site peer 198.11.204.45]
vyatta@vyatta-aws# save
Saving configuration to '/config/config.boot'...
Done
[edit]
```

# IPsec接続の状態確認

ここまでで、SoftLayerシンガポールDC ⇔ AWS東京リージョン ⇔ SoftLayerサンノゼDCのvyattaがIPsecで接続された。
`show vpn ike sa`でStateがupになっていること、`show vpn ipsec sa`で有効なTunnelがupしていることで、正しく設定されていることが確認できる。

```text:SoftLayerシンガポールDCのvyattaの状態
vyatta@vyatta-sl-sng# run show vpn ike sa
Peer ID / IP                            Local ID / IP               
------------                            -------------
52.69.255.138                           119.81.4.122                           

    State  Encrypt  Hash  D-H Grp  NAT-T  A-Time  L-Time
    -----  -------  ----  -------  -----  ------  ------
    up     aes256   sha1  5        yes    144     3600   

 
[edit]
vyatta@vyatta-sl-sng# run show vpn ipsec sa
Peer ID / IP                            Local ID / IP               
------------                            -------------
0.0.0.0                                 119.81.4.122                           

    Tunnel  State  Bytes Out/In   Encrypt  Hash  NAT-T  A-Time  L-Time  Proto
    ------  -----  -------------  -------  ----  -----  ------  ------  -----
    1       down   n/a            n/a      n/a   no     0       3600    all

 
Peer ID / IP                            Local ID / IP               
------------                            -------------
52.69.255.138                           119.81.4.122                           

    Tunnel  State  Bytes Out/In   Encrypt  Hash  NAT-T  A-Time  L-Time  Proto
    ------  -----  -------------  -------  ----  -----  ------  ------  -----
    1[2]    up     0.0/0.0        aes256   sha1  yes    150     3600    all

 
[edit]
```

```text:SoftLayerサンノゼDCのvyattaの状態
vyatta@vyatta-sl-sjc# run show vpn ike sa
Peer ID / IP                            Local ID / IP               
------------                            -------------
52.69.255.138                           198.11.204.45                          

    State  Encrypt  Hash  D-H Grp  NAT-T  A-Time  L-Time
    -----  -------  ----  -------  -----  ------  ------
    up     aes256   sha1  5        yes    204     3600   

 
[edit]
vyatta@vyatta-sl-sjc# run show vpn ipsec sa
Peer ID / IP                            Local ID / IP               
------------                            -------------
0.0.0.0                                 198.11.204.45                          

    Tunnel  State  Bytes Out/In   Encrypt  Hash  NAT-T  A-Time  L-Time  Proto
    ------  -----  -------------  -------  ----  -----  ------  ------  -----
    1       down   n/a            n/a      n/a   no     0       3600    all

 
Peer ID / IP                            Local ID / IP               
------------                            -------------
52.69.255.138                           198.11.204.45                          

    Tunnel  State  Bytes Out/In   Encrypt  Hash  NAT-T  A-Time  L-Time  Proto
    ------  -----  -------------  -------  ----  -----  ------  ------  -----
    1[2]    up     0.0/0.0        aes256   sha1  yes    211     3600    all

 
[edit]
```

```text:AWS東京リージョンのvyattaの状態
vyatta@vyatta-aws# run show vpn ike sa
Peer ID / IP                            Local ID / IP               
------------                            -------------
119.81.4.122                            192.168.0.10                           

    State  Encrypt  Hash  D-H Grp  NAT-T  A-Time  L-Time
    -----  -------  ----  -------  -----  ------  ------
    up     aes256   sha1  5        yes    1290    3600   

 
Peer ID / IP                            Local ID / IP               
------------                            -------------
198.11.204.45                           192.168.0.10                           

    State  Encrypt  Hash  D-H Grp  NAT-T  A-Time  L-Time
    -----  -------  ----  -------  -----  ------  ------
    up     aes256   sha1  5        yes    1048    3600   

 
[edit]
vyatta@vyatta-aws# run show vpn ipsec sa
Peer ID / IP                            Local ID / IP               
------------                            -------------
119.81.4.122                            192.168.0.10                           

    Tunnel  State  Bytes Out/In   Encrypt  Hash  NAT-T  A-Time  L-Time  Proto
    ------  -----  -------------  -------  ----  -----  ------  ------  -----
    1       up     0.0/0.0        aes256   sha1  yes    1265    3600    all

 
Peer ID / IP                            Local ID / IP               
------------                            -------------
198.11.204.45                           192.168.0.10                           

    Tunnel  State  Bytes Out/In   Encrypt  Hash  NAT-T  A-Time  L-Time  Proto
    ------  -----  -------------  -------  ----  -----  ------  ------  -----
    1       up     0.0/0.0        aes256   sha1  yes    1274    3600    all

 
[edit]
```

# 各vyattaのプライベートIPの接続

SoftLayerでVLAN SpanningをONにしていると、各DCのプライベートサブネット間はルーティングされる。
そのためここまでの状態で、東京、シンガポール、サンノゼの各vyattaインスタンスはプライベートIPで疎通できる。

以下はAWS東京リージョンのvyattaからの接続状態だが、全てのvyattaで疎通できていることが確認できる。

```text:AWS東京から
vyatta@vyatta-aws# ping -c3 10.67.3.168
PING 10.67.3.168 (10.67.3.168) 56(84) bytes of data.
64 bytes from 10.67.3.168: icmp_req=1 ttl=64 time=70.2 ms
64 bytes from 10.67.3.168: icmp_req=2 ttl=64 time=70.1 ms
64 bytes from 10.67.3.168: icmp_req=3 ttl=64 time=73.0 ms

--- 10.67.3.168 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 70.114/71.148/73.050/1.380 ms
[edit]
vyatta@vyatta-aws# ping -c3 10.88.63.157
PING 10.88.63.157 (10.88.63.157) 56(84) bytes of data.
64 bytes from 10.88.63.157: icmp_req=1 ttl=64 time=105 ms
64 bytes from 10.88.63.157: icmp_req=2 ttl=64 time=105 ms
64 bytes from 10.88.63.157: icmp_req=3 ttl=64 time=103 ms

--- 10.88.63.157 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 103.365/104.738/105.499/0.972 ms
[edit]
vyatta@vyatta-aws# ping -c3 192.168.1.10
PING 192.168.1.10 (192.168.1.10) 56(84) bytes of data.
64 bytes from 192.168.1.10: icmp_req=1 ttl=64 time=0.044 ms
64 bytes from 192.168.1.10: icmp_req=2 ttl=64 time=0.061 ms
64 bytes from 192.168.1.10: icmp_req=3 ttl=64 time=0.060 ms

--- 192.168.1.10 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.044/0.055/0.061/0.007 ms
[edit]
```

# SoftLayerで接続確認用インスタンスを起動

以下のスペックのVirtual Serverを、シンガポールDCとサンノゼDCに立ち上げる。

* OS: Ubuntu 14.04 LTS (64 bit) 
* CPU: 2.0GHz 1core
* RAM: 1GB RAM

|DC|ホスト名|パブリックIP|プライベートIP|
|:--|:--|:--|:--|
|シンガポール|test-sl-sng-01|119.81.4.123|10.67.3.184|
|サンノゼ|test-sl-sjc-01|198.11.204.40|10.88.63.164|
|サンノゼ|test-sl-sjc-02|198.11.204.37|10.88.63.187|

## 静的ルートの設定

AWSのプライベートIP宛のパケットは、vyattaのプライベートIPにルーティングする。

```text:シンガポールのテスト用インスタンスに静的ルート追加
root@test-sl-sng-01:~# ip route add 192.168.0.0/16 via 10.67.3.168 dev eth0
```

```text:サンノゼのテスト用インスタンスに静的ルート追加
root@test-sl-sjc-01:~# ip route add 192.168.0.0/16 via 10.88.63.157 dev eth0
```

# AWSで接続確認用インスタンスを起動

以下のスペックのインスタンスを東京リージョンのap-northeast-1cに立ち上げる。

* AMI: ubuntu/images/ebs-ssd/ubuntu-trusty-14.04-amd64-server-20150325 - ami-8d6d9d8d
* type: t1.micro

|ホスト名|パブリックIP|プライベートIP|
|:--|:--|:--|
|test-aws-01|192.168.0.21|192.168.1.21|
|test-aws-02|192.168.0.22|192.168.1.22|

※ vyattaの場合と同様、eth0をパブリックサブネット、eth1をプライベートサブネットへ接続する
※「送信元/送信先の変更チェック」は有効のままで良い
※ セキュリティグループは、SoftLayerとAWSのプライベートアドレスからの全てのプロトコルを受け付けるようにする

![aws_sl_vpn_09.png](https://qiita-image-store.s3.amazonaws.com/0/37648/fbc9afea-f0c5-7acc-76e1-edd6ea63d3c0.png)

## 接続確認用インスタンスの設定変更

### 追加NICの認識

vyattaの場合と同様、OSのネットワーク設定を変更して追加したNICを認識させる。
以下はtest-aws-01の例だが、test-aws-02でも同様。

```text:ネットワーク設定変更
ubuntu@ip-192-168-0-21:~$ sudo vi /etc/network/interfaces
ubuntu@ip-192-168-0-21:~$ cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# Source interfaces
# Please check /etc/network/interfaces.d before changing this file
# as interfaces may have been defined in /etc/network/interfaces.d
# NOTE: the primary ethernet device is defined in
# /etc/network/interfaces.d/eth0
# See LP: #1262951
#source /etc/network/interfaces.d/*.cfg
auto eth0
iface eth0 inet static
    address 192.168.0.21
    netmask 255.255.255.0
    gateway 192.168.0.1

auto eth1
iface eth1 inet static
    address 192.168.1.21
    netmask 255.255.255.0
```

### ホスト名変更

後々わかりやすいように、ホスト名も変更する。

```text:ホスト名変更
ubuntu@ip-192-168-0-21:~$ sudo vi /etc/hostname
ubuntu@ip-192-168-0-21:~$ cat /etc/hostname 
test-aws-01
```

### 再起動

```text:再起動
ubuntu@ip-192-168-0-21:~$ sudo reboot
```

## 静的ルートの設定

SoftLayerのプライベートIP宛のパケットは、vyattaのプライベートIPにルーティングする。

```text:テスト用インスタンスに静的ルート追加
ubuntu@test-aws-01:~$ sudo ip route add 10.0.0.0/8 via 192.168.1.10 dev eth1
```

# 接続確認

AWS test-aws-01でNetcatを起動し、各テストインスタンスからTCP接続を試みる。

```text:送信側
ubuntu@test-aws-02:~$ echo 'from test-aws-02' | nc 192.168.1.21 7777

root@test-sl-sng-01:~# echo 'from test-sl-sng-01' | nc 192.168.1.21 7777

root@test-sl-sjc-01:~# echo 'from test-sl-sjc-01' | nc 192.168.1.21 7777

root@test-sl-sjc-02:~# echo 'from test-sl-sjc-02' | nc 192.168.1.21 7777
```

```text:受信側
ubuntu@test-aws-01:~$ nc -l -k -p 7777
from test-aws-02
from test-sl-sng-01
from test-sl-sjc-01
from test-sl-sjc-02
```

同様の手順により、全てのテスト用インスタンスがお互いのプライベートIPで通信できることが確認できる。

# まとめ

AWSでVPCを用いて作成したプライベートサブネットとSoftLayerのプライベートサブネットをVPN接続し、SNAT/DNATやVPCのルートテーブルの書き換えをしなくても適切にパケットを疎通させることができた。今後はAWSの複数リージョン対応や、Azure等の別クラウドへの対応などにも取り組みたい。