VPNサービスを使ってBluemix環境とSoftLayer環境を接続してみました

# 1. はじめに
  Bluemix提供の<sytrong><font color="blue">「VPNサービス」</font></strong>を使って、BlumixコンテナのWebサーバーへSoftlayerの仮想インスタンスからアクセスする環境を構築しました。
  今回は、BluemixとSoftlayerをVPN接続し、基本的な仕組みを理解するのが目的です。
   IBMコンテナ(Docker)やVPNサービス、VyOS等の知識が必要な箇所がありますが、ともかく動かして全体イメージをつかめるように順を追って説明します。

# 2. 「IBM VPN サービス」について
　Bluemix クラウド環境内で IBM コンテナー (Docker コンテナー) にセキュアにアクセスする際に使用します。
IBM コンテナーが前提で、これを使えばクラウドとオンプレミスのハイブリッドシステムが構築できます。
尚、「VPNサービス」は設定画面やコマンド、APIを使って設定できますが、今回は設定画面を使って設定しました。

>下記サイトが参考になります。
VPNサービスについて
https://console.ng.bluemix.net/docs/services/vpn/vpn_overview.html#vpn_overview
コマンドライン、APIについて
https://console.ng.bluemix.net/docs/cli/plugins/vpn/index.html
https://new-console.ng.bluemix.net/apidocs/101
>

# 3. 構成について
　SoftLayer東京DCのDebian8からcurlで、Blumix上のWebコンテナへVPN経由のプライベートアドレスでアクセスします。
 Debian8はWebコンテナ作成用の操作PCとしても使用しています。
 Bluemixでの使用地域は<font color="blue">「米国南部」</font>
 
![01.png](http://www.seahorse-inc.com/QIITA/Bluemix-VPNService/01.png)

![02.png](http://www.seahorse-inc.com/QIITA/Bluemix-VPNService/02.png) 
・SoftLayer側アドレス関連情報は、<font color="blue">インスタンスデプロイ時</font>にアサインされる。
・Bluemix側VPNサービスパブリックIPは、<font color="blue">サービス開始時</font>にアサインされる。
・Bluemix側アドレス関連情報は<font color="blue">コンテナイメージ起動時</font>にアサインされる。
 
# 4. 構築順序
![03.png](http://www.seahorse-inc.com/QIITA/Bluemix-VPNService/03.png)
<strong>① 仮想インスタンスの作成</strong>
<font color="blue">＜SoftLayerポータルでの操作＞</font>
▼ VyOS用(vyos)とコンテナ構築環境用兼Web接続確認クライアント用(Debian8)の２台のインスタンスをオーダー。
<font color="green">※Debian8のパブリックIPとサブネットワーク値は「④VPNサービスの設定」で使用する。</font>

<strong>② コンテナ環境の準備・作成</strong>
<font color="blue">＜SoftLayer作成のインスタンスでの操作＞</font>
▼ Debian8へDockerをインストール。
▼ Debian8へCloudFoundry CLIをインストール。
▼ Debian8へIBM Containers CF CLI プラグインをインストール。
▼ Debian8へDocker Hubより、ApachイメージをPULL。
▼ Debian8でコンテナイメージを作成。
▼ Debian8からIBMコンテナ・レポジトリーへ作成イメージをPUSHし、カタログに登録。

<strong>③ Webコンテナ実行</strong>
<font color="blue">＜Bluemixダッシュボードでの操作＞</font>
▼ Bluemixカタログより、作成したコンテナイメージを実行。
<font color="green">※稼働コンテナのサブネットワーク値は「④VPNサービスの設定」で使用する。</font>

<strong>④ VPNサービスの設定</strong>
<font color="blue">＜Bluemiダッシボードでの操作＞</font>
▼「Gateway Appliance」でGatwway名登録。
▼ 「IKE & IPSec Policies」デフォルト値使用のため、入力変更なし。
▼ 「Site Connections」設定

<strong>⑤VyOSのVPN設定</storng>
<font color="blue">＜Debian8での操作＞</font>
▼ ここでは、「④VPNサービスの設定」で設定した値に合わせて、VyOSの設定を行います。

# 5. 構築
## 5-1.  ① 仮想インスタンスの作成
 ・VyOS用(vyos)
 ・コンテナ構築環境用兼Web接続確認クライアント用(Debian8：Debian GNU/Linux 8.x jessie/Stable - Minimal Install (64 bit))
 2つのインスタンスをオーダー。
VyOSのネットワーク情報は、
・パブリックIP<font color="blue">「161.202.154.118」</font>
・プライベートネットワーク<font color="blue">「10.132.52.192/16」</font>。
この値は<font color="red">「IBM VPNサービス設定」で使用</font>します。

## 5-2. ② コンテナ環境の準備・作成
Debian8にコンテナ環境の準備作成を行います。
### 5-2-1. Dockerのインストール 

▼ リポジトリー修正にvimをインストール

```Command:vimのインストール
# apt-get install –y vim
```

▼ /etc/apt/sources.listにjessie-backportsの設定を追加
Debian8のDockerパッケージは”jessie-backports”リポジトリにあるので、リポジトリの有効化を行う。

```Command:sources.listの編集
# vi /etc/apt/sources.list
```

```Command:sources.listに追加
deb http://http.debian.net/debian jessie-backports main
```

▼ カーネルやパッケージ類をアップデート

```Command:アップデート
# apt-get install –y update
```
▼ Dockerのインストール

```Command:Dockerのインストール
# apt-get install –y docker.io
```
インストールしたDockerのバージョン確認

```Command:Dockerのバージョン確認
# docker version
```
![04.png](http://www.seahorse-inc.com/QIITA/Bluemix-VPNService/04.png)
Version 1.6.2が導入されました。
念のため、Dockerがインストールされたか確認します。

```Command:Dockerの実行
# docker run ubuntu:latest /bin/echo 'Hello docker'
```
ubuntuイメージがローカルにないので、Dockerリポジトリからubuntuイメージをダウンロードしています。
![05.png](http://www.seahorse-inc.com/QIITA/Bluemix-VPNService/05.png)
‘Hello Docker’が表示されましたので、<font color="blue">正常にコンテナが起動</font>しています。

▼ Dockerの起動

```Command:Dockerの起動
# /etc/init.d/docker start
```
▼ Docker自動起動の設定
自動起動設定のsysv-rc-confをインストール。

```Command:sysv-rc-confのインストール
# apt-get install –y sysv-rc-conf
```
Dockerを自動起動に設定。

```Command:自動起動に設定
# sysv-rc-conf docker on
```

### 5-2-2. Debian8へCloudFoundry CLIをインストール 
GitHubリポジトリhttps://github.com/cloudfoundry/cli/releases
よりダウンロードします。ここではダウンロードにLynxを使いました。

▼ Lynxのインストール

```Command:lynxのインストール
# apt-get install –y lynx
```

▼ Cloud Foundry CLIのダウンロード

```Command:lynx操作でダウンロード
# lynx https://github.com/cloudfoundry/cli/releases/tag/v6.21.1
```
![06.png](http://www.seahorse-inc.com/QIITA/Bluemix-VPNService/06.png)
“Debian 64 bit”を選択

![07.png](http://www.seahorse-inc.com/QIITA/Bluemix-VPNService/07.png)
ファイル名「cf-cli-installer_6.21.1_x86-64.deb」でディスクに保存

ダウンロードしたファイルをインストール

```Command:CloudFoundryCLIのインストール
# dpkg –i cf-cli-installer_6.21.1_x86-64.deb
```
インストールしたCloud Foundry CLIのバージョン確認

```Command:CloudFoundryCLIのバージョン確認
# cf –v
```
![08.png](http://www.seahorse-inc.com/QIITA/Bluemix-VPNService/08.png)
Version 6.21.1が導入されました。

### 5-2-3. Debian8へIBM Containers CF CLI プラグインをインストール 
ここでは、<font color="blue">“Linux 64 bit環境”のプラグイン</font>をインストールし、ログイン確認を行います。

▼ プラグインインストール

```Command:プラグインインストール 
# cf install-plugin https://static-ice.ng.bluemix.net/ibm-containers-linux_x64
```

![09.png](http://www.seahorse-inc.com/QIITA/Bluemix-VPNService/09.png)

▼ プラグイン確認

```Command:プラグイン確認
# cf plugins
```
![10.png](http://www.seahorse-inc.com/QIITA/Bluemix-VPNService/10.png)
Version 0.8.897が導入されました。

▼ ログイン確認
>※あらかじめBluemix環境が使えるように準備しておいてください。
ログインには、メールID、パスワード、スペースが必要です！
30日フリートライアルは下記URLより
https://developer.ibm.com/sso/bmregistration?lang=ja_JP&ca=dwjapan-_-bluemix-_-bluemix-registration-_-landing&S_TACT=JP3GW27W&S_CMP=jp3gw
>

ここではBluemixの地域を、米国南部(cf login -a api.ng.bluemix.net)にしました。

＜Cloud Foundry CLI へのログイン確認＞

```Command:CloudFoundryCLIへのログイン
# cf login
```
![11.png](http://www.seahorse-inc.com/QIITA/Bluemix-VPNService/11.png)
①Apiのエンドポイント：<font color="blue">米国南部は“api.ng.bluemix.net”</font>です。2回目以降のログインでは、この項目の入力要求ありません。
②Bluemixログインの際のID
③Bluemixログインの際のパスワード
④Bluemixで登録した”スペース名”
ここでは、スペースを２つ作成していたため、スペース選択が表示されています。

＜ IBM Containers サービスへのログイン確認＞

```Command:IBMContainersサービスへのログイン
# cf ic login
```
![12.png](http://www.seahorse-inc.com/QIITA/Bluemix-VPNService/12.png)

ログインが確認できましたので、ログアウトします。

```Command:ログアウト
# cf logout
```

### 5-2-4. Debian8へDocker Hubより、ApachイメージをPULLしてプライベート Bluemixリポジトリーにビルド。
CloudFoundryCLIとIBMContainersサービス へのログイン。
Debian8のルート直下に/muraディレクトリーを作成し、その中に<font color="blue">Dockerfileを作成</font>します。

```Command:ディレクトリーを作成し、カレントディレクトリー変更
# mkdir /mura
# cd /mura
```

```Command:Dockerfile作成
# vim ./Dockerfile
```

```Command:Dockerfile内容
FROM httpd:2.4
COPY ./public-html/ /usr/local/apache2/htdocs/

EXPOSE 80

VOLUME ["/url/local/apache2/htdocs"]
```
Docker Hub より、httpd(Apache2)をPULLしています。
https://hub.docker.com/explore/
![13.png](http://www.seahorse-inc.com/QIITA/Bluemix-VPNService/13.png)


Docker イメージを、プライベート Bluemixリポジトリーにビルドします。
ここでは、米国南部(registry.ng.bluemix.net)を使いました。

```Command:Dockerイメージのビルド
# cf ic build -t registry.ng.bluemix.net/muranamespace/apache:v1 .
```
<font color="red">※右端のピリオドを忘れないように！</font>
![14.png](http://www.seahorse-inc.com/QIITA/Bluemix-VPNService/14.png)

>(参考)
https://console.ng.bluemix.net/docs/containers/container_cli_reference_cfic.html#container_cli_reference_cfic__build
>

namespaceがわからない場合は、下記コマンドで確認してください。

```Command:Dockerイメージのビルド
# cf ic namespace get
```
「cf ic」コマンドまたはBluemix カタログで、作成したコンテナイメージを確認します。
<strong>＜cf ic コマンドで確認＞</strong>

```Command:Dockerイメージの確認
# cf ic images
```
![15.png](http://www.seahorse-inc.com/QIITA/Bluemix-VPNService/15.png)

<strong>＜Bluemixカタログで確認＞</strong>
![16.png](http://www.seahorse-inc.com/QIITA/Bluemix-VPNService/16.png)

## 5-3. ③ Webコンテナ実行
<strong>▼ コマンドで実行する方法とBluemixカタログから実行する方法</strong>がありますが、ここでは<font color="blue">カタログから実行</font>します。

![16.png](http://www.seahorse-inc.com/QIITA/Bluemix-VPNService/16.png)
作成した<font color="blue">「Apache マイ組織」</font>をクリック。

![17.png](http://www.seahorse-inc.com/QIITA/Bluemix-VPNService/17.png)
<font color="blue">「コンテナ名：murac」</font>

![18.png](http://www.seahorse-inc.com/QIITA/Bluemix-VPNService/18.png)
「作成」をクリック。
しならくすると、<font color="blue">「コンテナ名：murac」</font>が実行されます。

<strong>▼ コンテナ実行確認</strong>
コマンドまたはBluemixダッシュボードで確認できます。
<strong>＜cf ic コマンドで確認＞</strong>

```Command:コンテナ実行の確認
# cf ic ps
```
![19.png](http://www.seahorse-inc.com/QIITA/Bluemix-VPNService/19.png)
「コンテナID：b95b454b-158」で稼働しています。

<strong>＜Bluemixダッシュボードで確認＞</strong>
![20.png](http://www.seahorse-inc.com/QIITA/Bluemix-VPNService/20.png)

<strong>▼ コンテナのネットワーク確認</strong>

```Command:コンテナのネットワーク情報
# cf ic inspect コンテナID
```

```Command:コンテナのネットワーク情報
# cf ic inspect b95b454b-158
```

```Command:inspectコマンド結果
[{
    "BluemixApp": null,
    "BluemixServices": null,
    "Config": {
        "AttachStderr": false,
        "AttachStdin": false,
        "AttachStdout": false,
        "Cmd": [],
        "Dns": "",
        "Env": [
            "logging_password=",
            "space_id=d5f00494-eba9-4c8b-8c4d-8776619d518b",
            "logstash_target=logmet.opvis.bluemix.net:9091",
            "metrics_target=logmet.opvis.bluemix.net:9095"
        ],
        "Hostname": "instance-00138e9d",
        "Image": "registry.ng.bluemix.net/muranamespace/apache:v1",
        "ImageArchitecture": "amd64",
        "Labels": {},
        "Memory": 256,
        "MemorySwap": "",
        "OpenStdin": true,
        "PortSpecs": "",
        "StdinOnce": false,
        "Tty": true,
        "User": "",
        "VCPU": 4,
        "VolumesFrom": "",
        "WorkingDir": ""
    },
    "ContainerState": "Running",
    "Created": "2016-08-24T01:09:13.000000000Z",
    "Group": {},
    "HostConfig": {
        "Binds": [],
        "CapAdd": [],
        "CapDrop": [],
        "ContainerIDFile": "",
        "Links": [],
        "LogConfig": {
            "Config": {},
            "Type": "json-file"
        },
        "LxcConf": [],
        "PortBindings": {
            "80/tcp": [
                {
                    "HostPort": "80"
                }
            ]
        },
        "Privileged": false,
        "PublishAllPorts": false
    },
    "HostId": "6e8cf8ca072d1e14cb4b9b570da9fde3d2303d49c2281d8e5ebef119",
    "Human_id": "murac",
    "Id": "b95b454b-158a-4a16-8d20-94ef8ce897f6",
    "Image": "e61e9170b00b2b32655db4661135a7cc3f9649a767fff13cb96482070ac4e4be",
    "Mounts": [],
    "Name": "murac",
    "NetworkSettings": {
        "Bridge": "",
        "Gateway": "",
        "IPAddress": "172.31.0.2",
        "IPPrefixLen": 0,
        "MacAddress": "fa:16:3e:cf:73:8f",
        "Networks": {
            "default": {
                "Aliases": null,
                "EndpointID": "b95b454b-158a-4a16-8d20-94ef8ce897f6",
                "Gateway": "172.31.0.1",
                "GlobalIPv6Address": "",
                "GlobalIPv6PrefixLen": 0,
                "IPAMConfig": null,
                "IPAddress": "172.31.0.2",
                "IPPrefixLen": 16,
                "IPv6Gateway": "",
                "Links": null,
                "MacAddress": "fa:16:3e:cf:73:8f",
                "NetworkID": "a1983a32-958f-40db-a9b3-002d608ec848"
            }
        },
        "PortMapping": null,
        "Ports": {
            "80/tcp": [
                {
                    "HostIp": "172.31.0.2",
                    "HostPort": "80"
                }
            ]
        },
        "PublicIpAddress": ""
    },
    "Path": "date",
    "ResolvConfPath": "/etc/resolv.conf",
    "State": {
        "Error": "",
        "ExitCode": 0,
        "FinishedAt": "0001-01-01T00:00:00Z",
        "Ghost": "",
        "Pid": 1,
        "Running": true,
        "StartedAt": "2016-08-24T01:09:20.000000000Z",
        "Status": "Running"
    },
    "Volumes": {},
    "VolumesRW": {}
}]
```
grepで必要な箇所を抜き出してみます。

```Command:コンテナのネットワーク情報
# cf ic inspect b95b454b-158 |grep IPAddress
```
![21.png](http://www.seahorse-inc.com/QIITA/Bluemix-VPNService/21.png)
WebコンテナのプライベートIPは、<font color="blue">「172.31.0.2」</font>です。

## 5-4. ④ VPNサービスの設定
Bluemixの「VPNサービス」をオーダーし、設定します。
ここまでの手順で、
<strong>「5-1.  ① 仮想インスタンスの作成」</strong>より
・VyOS側のパブリックIP：<font color="blue">「161.202.154.118」</font>
・VyOS側のプライベートネットワーク：<font color="blue">「10.132.52.192/16」</font>
<strong>「5-3. ③ Webコンテナ実行」</strong>より
・WebコンテナのプライベートIP：<font color="blue">「172.31.0.2」</font>がわかっています。

事前共有鍵を<font color="blue">「shared-key」</font>という名前にしました。

<strong>▼ 「IBM VPN サービス」のオーダー</strong>
![22.png](http://www.seahorse-inc.com/QIITA/Bluemix-VPNService/22.png)
「Virtual Private Network」を選択し、クリック。
![23.png](http://www.seahorse-inc.com/QIITA/Bluemix-VPNService/23.png)
「作成」をクリック。
>
<font color="green">※１つのスペースには「IBM VPNサービス」は1つまでです。</font>
![24.png](http://www.seahorse-inc.com/QIITA/Bluemix-VPNService/24.png)
1つの「IBM VPNサービス」は複数の接続先が設定可能。
>

しばらくすると、Bluemixダッシュボードに<font color="blue">「IBM VPNサービス」</font>が表示されます。
![25.png](http://www.seahorse-inc.com/QIITA/Bluemix-VPNService/25.png)
クリックして次に進みます。

<strong>▼ 「IBM VPN サービス」の設定</strong>
![26.png](http://www.seahorse-inc.com/QIITA/Bluemix-VPNService/26.png)
<font color="blue">「Create Gateway」</font>をクリック。

![27.png](http://www.seahorse-inc.com/QIITA/Bluemix-VPNService/27.png)
<font color="blue">「Gateway Apliance」</font>タグ選択⇒<font color="blue">「Edit」</font>をクリック。
WebコンテナのプライベートIP、プライベートネットワークは自動的に取得されているのが確認できます。
また、VPNサービスのパブリックIPは<font color="blue">「169.46.158.54」</font>です。

![28.png](http://www.seahorse-inc.com/QIITA/Bluemix-VPNService/28.png)
<font color="blue">「Gateway Apliance Name」</font>は<font color="blue">「VPNGW01」</font>⇒<font color="blue">「Save」</font>をクリック。

ここでは<font color="blue">「IKE ＆ IPsec Polices」</font>はデフォルト値を使用しますので、設定しません。
ちなみにデフォルト値は下記の通りです。
![29.png](http://www.seahorse-inc.com/QIITA/Bluemix-VPNService/29.png)

<strong>「Site Connections」の設定します。</strong>
<font color="blue">「Site Connections」</font>タブをクリック
![30.png](http://www.seahorse-inc.com/QIITA/Bluemix-VPNService/30.png)
<strong>① Name:</strong>　デフォルト値の<font color="blue">「Connection1」</font> 
<strong>②「PreShared Key String」:</strong> <font color="blue">「shared-key」</font>
後ほど設定するVyOS-VPN設定の” vpn ipsec site-to-site peer 169.46.158.54 authentication pre-shared-secret shared-key”と合わせる。
<strong>③「Customer GatewayIP」:</strong> <font color="blue">「161.202.154.118」</font>
VyOSのパブリックIP
<strong>④「Customer Subnet」:</strong> <font color="blue">「10.132.52.192/16」</font>
VyOSのプライベートネットワーク
<strong>⑤「Description」:</strong> <font color="blue">必須でないので入力なし</font>
<strong>⑥「Admin State」:</strong> <font color="blue">「down」</font>
VyOS設定した後に「up」にして接続する。

各パラメータ入力後、「save」をクリック

![31.png](http://www.seahorse-inc.com/QIITA/Bluemix-VPNService/31.png)


## 5-5. ⑤VyOSのVPN設定
SoftLayer側の<strong><font color="blue">「vyos」</font></strong>の設定です。

VyOSの導入、基本設定は省略します。

(参考情報)・VyOS導入
 「SoftLayer仮想サーバにVyOSをインストールしました」
http://qiita.com/Mitsu-Murakita/items/d793250566a8e9f3562b
「SoftLayerとVyOSでネットワークの基礎を勉強４-(IPsecVPN LAN間接続編)」
http://qiita.com/Mitsu-Murakita/items/9bb09f54494345b51ce8

VyOSの基本設定情報です。これにVPN関連情報を追加していきます。

```Command:VyOS基本設定
 interfaces {
     ethernet eth0 {
         address 10.132.52.226/26
         duplex auto
         hw-id 06:38:a7:d9:ec:e4
         smp_affinity auto
         speed auto
     }
     ethernet eth1 {
         address 161.202.154.118/29
         duplex auto
         hw-id 06:dc:71:bf:8e:b3
         smp_affinity auto
         speed auto
     }
     loopback lo {
     }
 }
 protocols {
     static {
         route 10.0.0.0/8 {
             next-hop 10.132.52.193 {
             }
         }
     }
 }
 service {
     ssh {
         port 22
     }
 }
 system {
     config-management {
         commit-revisions 20
     }
     console {
         device hvc0 {
             speed 9600
         }
         device ttyS0 {
             speed 9600
         }
     }
     domain-name softlayer.com
     gateway-address 161.202.154.113
     host-name vyos
     login {
         user vyos {
             authentication {
                 encrypted-password xxxxxxxxxxxxxxxxxxxx
                 plaintext-password ""
             }
             level admin
         }
     }
     name-server 10.0.80.11
     name-server 10.0.80.12
     ntp {
         server time.service.networklayer.com {
         }
     }
     package {
         auto-sync 1
         repository community {
             components main
             distribution helium
             password ""
             url http://packages.vyos.net/vyos
             username ""
         }
     }
     syslog {
         global {
             facility all {
                 level notice
             }
             facility protocols {
                 level debug
             }
         }
     }
     time-zone Asia/Tokyo
 }
```

下記VPNの設定を追加します。
<font color="green">※説明しやすいように行番号[xx]をつけてます。</font>

```Command:VPN設定追加
[01] # set vpn ipsec esp-group bmixvpn-esp
[02] # set vpn ipsec esp-group bmixvpn-esp compression disable
[03] # set vpn ipsec esp-group bmixvpn-esp lifetime 3600
[04] # set vpn ipsec esp-group bmixvpn-esp mode tuunel
[05] # set vpn ipsec esp-group bmixvpn-esp pfs dh-group2
[06] # set vpn ipsec esp-group bmixvpn-esp proposal 1
[07] # set vpn ipsec esp-group bmixvpn-esp proposal 1 encryption aes128
[08] # set vpn ipsec esp-group bmixvpn-esp proposal 1 hash sha1

[09] # set vpn ipsec ike-group bmixvpn-ike
[10] # set vpn ipsec ike-group bmixvpn-ike lifetime 28800
[11] # set vpn ipsec ike-group bmixvpn-ike proposal 1
[12] # set vpn ipsec ike-group bmixvpn-ike proposal 1 dh-group 2
[13] # set vpn ipsec ike-group bmixvpn-ike proposal 1 encryption aes128
[14] # set vpn ipsec ike-group bmixvpn-ike proposal 1 hash sha1

[15] # set vpn ipsec ipsec-interfaces interface eth0

[16] # set vpn ipsec site-to-site peer 169.46.158.54
[17] # set vpn ipsec site-to-site peer 169.46.158.54 authentication
[18] # set vpn ipsec site-to-site peer 169.46.158.54 authentication id 161.202.154.118
[19] # set vpn ipsec site-to-site peer 169.46.158.54 authentication mode pre-shared-secret
[20] # set vpn ipsec site-to-site peer 169.46.158.54 authentication pre-shared-secret shared-key
[21] # set vpn ipsec site-to-site peer 169.46.158.54 authentication remote-id 169.46.158.54

[22] # set vpn ipsec site-to-site peer 169.46.158.54 connection-type respond
[23] # set vpn ipsec site-to-site peer 169.46.158.54 default-esp-group bmixvpn-esp
[24] # set vpn ipsec site-to-site peer 169.46.158.54 ike-group bmixvpn-ike
[25] # set vpn ipsec site-to-site peer 169.46.158.54 local-address any

[26] # set vpn ipsec site-to-site peer 169.46.158.54  tunnel 1
[27] # set vpn ipsec site-to-site peer 169.46.158.54  tunnel 1 local
[28] # set vpn ipsec site-to-site peer 169.46.158.54  tunnel 1 local prefix 10.132.52.192/26
[29] # set vpn ipsec site-to-site peer 169.46.158.54  tunnel 1 remote prefix 172.31.0.0/16
```
<font color="blue">
[01]-[08]:「IBM VPNサービス」の"IPsec Policies"に合わせて設定
[09]-[14]:「IBM VPNサービス」の"IKE Policies"に合わせて設定
[15]-[15]:  IPsecVPNインターフェースは"eth0"を使用
[20]-[21]:  事前共通鍵を使用し、値は"shared-key"
[22]-[22]: 「IBM VPNサービス」が"initiate "であるため、VyOS側は”respond”に設定
[28]-[28]: VyOS側のプライベートネットワーク
[28]-[28]:「IBM VPNサービス」側のプライベートネットワーク
</font>


VyOS側のVPN設定です。

```Command:VyOS-VPN設定
 interfaces {
     ethernet eth0 {
         address 10.132.52.226/26
         duplex auto
         hw-id 06:38:a7:d9:ec:e4
         smp_affinity auto
         speed auto
     }
     ethernet eth1 {
         address 161.202.154.118/29
         duplex auto
         hw-id 06:dc:71:bf:8e:b3
         smp_affinity auto
         speed auto
     }
     loopback lo {
     }
 }
 protocols {
     static {
         route 10.0.0.0/8 {
             next-hop 10.132.52.193 {
             }
         }
     }
 }
 service {
     ssh {
         port 22
     }
 }
 system {
     config-management {
         commit-revisions 20
     }
     console {
         device hvc0 {
             speed 9600
         }
         device ttyS0 {
             speed 9600
         }
     }
     domain-name softlayer.com
     gateway-address 161.202.154.113
     host-name vyos
     login {
         user vyos {
             authentication {
                 encrypted-password xxxxxxxxxxxxxxxxxxx
                 plaintext-password ""
             }
             level admin
         }
     }
     name-server 10.0.80.11
     name-server 10.0.80.12
     ntp {
         server time.service.networklayer.com {
         }
     }
     package {
         auto-sync 1
         repository community {
             components main
             distribution helium
             password ""
             url http://packages.vyos.net/vyos
             username ""
         }
     }
     syslog {
         global {
             facility all {
                 level notice
             }
             facility protocols {
                 level debug
             }
         }
     }
     time-zone Asia/Tokyo
 }
 vpn {
     ipsec {
         esp-group bmixvpn-esp {
             compression disable
             lifetime 3600
             mode tunnel
             pfs dh-group2
             proposal 1 {
             }
         }
         ike-group bmixvpn-ike {
             lifetime 28800
             proposal 1 {
                 dh-group 2
                 encryption aes128
                 hash sha1
             }
         }
         ipsec-interfaces {
             interface eth0
         }
         site-to-site {
             peer 169.46.158.54 {
                 authentication {
                     id 161.202.154.118
                     mode pre-shared-secret
                     pre-shared-secret shared-key
                     remote-id 169.46.158.54
                 }
                 connection-type respond
                 default-esp-group bmixvpn-esp
                 ike-group bmixvpn-ike
                 local-address any
                 tunnel 1 {
                     local {
                         prefix 10.132.52.192/26
                     }
                     remote {
                         prefix 172.31.0.0/16
                     }
                 }
             }
         }
     }
 }
```

# 6. 接続確認
<font color="blue">「IBM VPNサービス」</font>側の<font color="blue">「Admin State」</font>を<font color="blue">”DOWN”</font>にしていますので、VyOS側のVPNも<font color="blue">"down"</font>の状態です。

```Command:VyOS側IPsec状態の確認
# show vpn ipsec sa
```
![32.png](http://www.seahorse-inc.com/QIITA/Bluemix-VPNService/32.png)

<font color="blue">「IBM VPNサービス」</font>側の<font color="blue">「Admin State」</font>を<font color="blue">”UP”</font>にします。
「Site Connections」⇒「Edit」
<font color="blue">「Pre Shared Key」</font>がブランクですので、再度入力し("shared-key")、<font color="blue">「Admin State」</font>を<font color="blue">”UP”</font> ⇒<font color="blue">「Save」</font>
![33.png](http://www.seahorse-inc.com/QIITA/Bluemix-VPNService/33.png)

VyOS側のIPsec-VPNが<font color="blue">"up"</font>になり、VPN通信が接続できました。
![34.png](http://www.seahorse-inc.com/QIITA/Bluemix-VPNService/34.png)

<strong>・PINGでの接続確認 </strong> 
VyOS側ネットワーク上の「Debian8」からWebコンテナに対して<font color="blue">PING</font>確認します。
「Debian8」にスタティックルートの設定を行います。

```Command:「Debian8」スタティックルート設定
# route add -net 172.31.0.0 netmask 255.255.0.0 gw 10.132.52.226
```

![35.png](http://www.seahorse-inc.com/QIITA/Bluemix-VPNService/35.png)
疎通確認できました。

<strong>・curlでWebコンテナのコンテンツ表示の確認</strong>
![36.png](http://www.seahorse-inc.com/QIITA/Bluemix-VPNService/36.png)
<font color="blue"><strong>'It works!'</strong></font>が表示されたので、Webも正常に動作しています。


# 7. おわりに
Bluemix環境とSoftLayer環境の接続でしたが、SoftLayer環境をオンプレミスに置き換えれば、セキュアなハイブリッド環境も比較的容易に構築できると思います。