異なるリージョン同士をVPNつなごうとしたけど、できなかった話

## 追記
構成と設定を見直したところ、疎通できました。

近日中に記事にします。(願望)

---
## 概要
異なるリージョン（東京とソウル）をVPNで接続したかったが、失敗した。（理由もわかっていない）

詳しい方、分かる方、いらっしゃったらぜひ教えてください。

## 構成図
![WG4PUQ8PwpjtRAPT-8B8DF.png](https://qiita-image-store.s3.amazonaws.com/0/115524/c18951ea-a63f-3f5d-d483-d1df0aad47f3.png)

## やりたかったこと（ゴール）
 * 東京リージョンのEC2インスタンス(10.0.0.128/28)からソウルリージョンのEC2インスタンス(10.0.1.192/28)にPINGが通る

## 結果（失敗）

 * 東京リージョンEC2インスタンスを"t1"、ソウルリージョンEC２インスタンスを"s1"とすると、疎通確認の結果は以下の通り
    * t1 -> vyos : PING疎通成功
    * vyos -> s1 : PING疎通成功
    * t1 -> s1 : PING疎通失敗
        * s1のパケットキャプチャの結果より、パケットがs1に届いていない
    * vyos -> t1 : PING疎通失敗
        * t1のパケットキャプチャの結果より、パケットは届いているが、応答(t1->vyos)がvyosに届いていない


 * 問題は２点？
    * vyosがルーティングをしていない 
    * t1 -> vyos(vyos -> t1の戻りの経路)で何かが起こっている
        * t1上のパケットキャプチャの結果では、PINGの応答は、"10.0.0.xxx(t1のローカルIPアドレス) -> 169.xxx.xxx.xxx"となっていた。（マスクしているのは忘れたから）

## 構成を簡単に説明
 * 東京リージョンとソウルリージョンそれぞれにVPCを作成
 * 仮想プライベートゲートウェイは東京リージョンに置き、カスタマーゲートウェイはソウルリージョンに置く。カスタマーゲートウェイは、EC2でたてたvyosにする

## 参考にしたサイト

 * http://qiita.com/t11a/items/9d732ae647ed878e4625
 * http://dev.classmethod.jp/event/soracom-door/
 * http://dev.classmethod.jp/server-side/network/vyos-aws/

上記のサイトは、自分がやりたかったことをほぼ同じ構成で実現している。細かい部分で違いはあるが（ネットワークアドレスが違う、デフォルトのVPCを使用している、vyosのバージョンが違うなど）、それが原因とは思いづらい…。

## やったこと
実際に作業した順番で書いていく（順番の記憶違いはあるかも）
BGPのAS番号はすべての箇所で65000にしています。（どこで設定しているか忘れたのでここに書いた）

### 東京リージョン
 * VPCを作成
 * 上記VPC内にサブネットを作成。構成図の通り２つのサブネットを作成し、アベイラビリティゾーンは分けている。
 * インターネットゲートウェイを作成し、VPCにアタッチ
 * 仮想プライベートゲートウェイを作成し、VPCにアタッチ
 * ルートテーブルを設定
    * サブネットを関連付ける
    * ルートを設定
        * 送信先：0.0.0.0/0、ターゲット：インターネットゲートウェイ
        * 送信先：10.0.1.0/24、ターゲット：仮想プライベートゲートウェイ（もしかしたら設定していないかも。vyosからアドバタイズされたものが載っていたかも）
 * 作成したVPC内に疎通確認用のEC2インスタンスを１台たてる（Amazon Linux）
    * セキュリティグループはすべてのトラフィックを許可

### ソウルリージョン
 * VPCを作成
 * 上記VPC内にサブネットを作成。構成図の通り２つのサブネットを作成し、アベイラビリティゾーンは分ける。
 * インターネットゲートウェイを作成し、VPCにアタッチ
 * ルートテーブルを設定
    * サブネットを関連付ける
    * ルートを設定
        * 送信先：0.0.0.0/0、ターゲット：インターネットゲートウェイ
 * 作成したVPC内にEC2インスタンスを２つ作成。１つはvyos用、もう１つはPing疎通確認用。サブネットはそれぞれ別のものを指定する。（つまりアベイラビリティゾーンも別）
 * vyosの構築内容
    * AMIは、コミュニティAMIから"VyOS(HVM)1.1.7"を選択
    * EIPを付与
    * セキュリティグループはすべてのトラフィックを許可
    * 「送信元と宛先のチェック」は無効に設定
 * Ping疎通確認用インスタンスの構築内容
    *  AMIは、Amazon Linuxを選択. 
    * セキュリティグループはすべてのトラフィックを許可


### 東京リージョン
 * ソウルリージョンで付与したEIPのグローバルIPアドレスをもとに、カスタマーゲートウェイを作成
 * このカスタマーゲートウェイと先ほど作成した仮想プライベートゲートウェイから、「VPC接続」を作成、ルーティングは動的
 * vyatta用のコンフィグをダウンロード

### ソウルリージョン
 * ダウンロードしたコンフィグをもとにvyosを設定
    * 変更した箇所は下記の２点.(クラスメソッドさんの記事を丸パクリ。http://dev.classmethod.jp/event/soracom-door/)
    * "10.0.1.0/24"の箇所は、試行錯誤の中で"10.0.1.128/28"、"0.0.0.0/0"も試したが、すべて疎通は上手く行かなかった

```
(変更前)
set vpn ipsec site-to-site peer ***** local-address [VyOSのEIP]
set protocols bgp 65000 network 0.0.0.0/0
 
(変更後)
set vpn ipsec site-to-site peer ***** local-address [VyOSのプライベートIP]
set protocols bgp 65000 network 10.0.1.0/24
```

 * ルートの設定で、10.0.0.0/24 宛のターゲットは、vyosに付与したEIPを指定

### 確認作業
 * マネジメントコンソールのVPC設定画面（東京リージョン）で、「VPN接続」の１つのトンネルがUPしていることを確認
 * 東京リージョンのVPCのルーティングの設定で、ソウルリージョン宛は仮想プライベートゲートウェイになっていることを確認
 * ソウルリージョンのVPCのルーティングの設定で、東京リージョン宛はvyosのEIPになっていることを確認

### 失敗した原因究明として、他に試せそうなこと
 * リージョンを変える。東京<->シンガポールとか
 * vyosのバージョンを変える
    * 昔、特定のバージョンのvyattaにて、今回と同様の構成でルーティングに失敗する不具合があったらしい
    * ソウルリージョンには1.1.7のバージョンしかなかったので、リージョンごと変える必要がある
 * 片方のリージョンで172.x.x.xのデフォルトのVPCを使ってみる
 * アベイラビリティゾーンをなるべく分けずにやってみる
 * ルーティングやNWの構成を見直す？

### 最後に…
 * VPNやIPsec、VPCを学んで、出直してきます。