未熟者が仮想プライベートゲートウェイを使ってVyOSとVPNを張るのに苦労した話

AWS内でVirtualPrivateGateWayを使い、VyOSとVPNを張ってみます。
VPNを張る事自体が初めてですが、こちらの記事を参考にやってみますｗ 
[1つのグローバルIPで複数VPCとVPN接続してみた#reinvent](http://dev.classmethod.jp/etc/1gip-vpn/)

## 全体図
![全体図.png](https://qiita-image-store.s3.amazonaws.com/0/5181/d8447065-eb70-02e3-9d7c-abfaa0d43689.png)

参考にさせて頂いた記事は1つのグローバルIPに対して複数のVPGを設定出来る話でしたが、今回は1つのVPGから繋げる検証をしてみます。

## 調べて出てきた愉快な用語たち

- VPN
バーチャルプライベートネットワークの略。
拠点間で専用線を設けるので安全。
VPNには2種類ありインターネットVPNとIP-VPNがある。

- インターネットVPN
一般的なインターネットのアクセス回線を利用。
コスト重視。一般のインターネットを使っているのでトラフィックが増えると遅延する。
SSLを使ったSSL-VPN、IPsecを使ったIPsec-VPNがある。

- IP-VPN
一般的なインターネットのアクセス回線とは隔離された通信事業者が独自に保有する閉じたネットワーク（閉域網）を利用。
トラフィックが増えても一定の帯域が保証される。盗聴、改ざんのリスクが低い。
MPLSを使ったMPLS-VPNがある。

- NATトラバーサル
「NAT超え」を実現させる為の技術。
IPマスカレードが扱う対象がTCP,UDPのパケットになるが、IPsecのパケットはESPというパケットになる。
ESPパケットをUDPでカプセル化することでNAPT機器でポート番号の書き換えを可能にしている。
（この辺の理解がまだまだ乏しい。。。）

- 仮想プライベートゲートウェイ（VirtualPrivateGateway）
>仮想プライベートゲートウェイは、VPN 接続の Amazon 側にある VPN コンセントレータです。

デフォルトだと最大10のCustomerGatewayを設定可能。

- CustomerGateway

>カスタマーゲートウェイは、VPN 接続のユーザー側にある物理的なデバイスまたはソフトウェアアプリケーションです。 

※[VPC へのハードウェア仮想プライベートゲートウェイの追加](http://docs.aws.amazon.com/ja_jp/AmazonVPC/latest/UserGuide/VPC_VPN.html)より


- VyOP（Vyatta）

>Vyattaの無償版であるVyatta CoreよりフォークされたオープンソースのネットワークOS。 バージョン6.6 R1をベースに開発が行われている。 Vyattaを買収をしたブロケード コミュニケーションズ システムズはVyatta Core Editionの開発中止を決定している。

ソフトウェアルータという認識。Vyattaは以前勉強会で名前が出ていた。確かワークスアプリケーションズの方の発表。
※[VyOS jp](http://wiki.vyos-users.jp/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8 )より

## 構築
手順については、[1つのグローバルIPで複数VPCとVPN接続してみた#reinvent](http://dev.classmethod.jp/etc/1gip-vpn/)の通りに進めました。
ただし、VPN接続セットアップ(VPC-A〜VPC-C)の項目のVPC-Cの箇所は実施していません。

## 確認
app_aにあるインスタンスから別VPCにあるapp_bに疎通確認してみます。

app_a

```
ubuntu@ip-172-31-28-186:~$ traceroute 10.0.1.96
traceroute to 10.0.1.96 (10.0.1.96), 30 hops max, 60 byte packets
 1  ip-172-31-10-178.ap-northeast-1.compute.internal (172.31.10.178)  3.306 ms  3.295 ms  3.328 ms # VyOSを通っている
 2  ip-10-0-1-96.ap-northeast-1.compute.internal (10.0.1.96)  6.428 ms  6.470 ms  6.612 ms # app_bに到達
ubuntu@ip-172-31-28-186:~$
```

ちゃんと届いている！

app_b

```
ubuntu@ip-10-0-1-96:~$ traceroute 172.31.28.186
traceroute to 172.31.28.186 (172.31.28.186), 30 hops max, 60 byte packets
 1  169.254.24.146 (169.254.24.146)  3.272 ms  3.299 ms  3.329 ms # VPGのトンネルを通っている
 2  172.31.28.186 (172.31.28.186)  6.034 ms  6.075 ms  6.130 ms # app_aに到達
```

逆パターンとして、app_b->app_aに疎通確認！

## 感想
VPN,VyOSもすべてが初めてでうまく出来るか不安でしたが、参考にさせて頂いたサイトが大変わかり易く無事構築が出来ました。
苦労した点は、VyOS 1.1.0のバグをおもいっきり踏んでしまい、pingが通らなかった事です。※[1つのグローバルIPで複数VPCとVPN接続してみた#reinvent](http://dev.classmethod.jp/etc/1gip-vpn/)にupdateの手順も記載されております！
その影響かわかりませんが、AWSのVPN接続のトンネルがUPからDOWNになったりと安定しておらず、悪戦苦闘して、VyOSを立ち上げ直したりしました。
VyOSにVPN接続の設定ファイルを流し込むのですが、初期化する時はcommit前にsshの設定を有効にしておく必要があるんでしょうか？
commit後に接続が切れるのですが、その後sshで接続が出来ませんでした...そして作りなおすというアホな事を...

苦労した分、tracerouteで接続が確認できた時の喜びは格別でした。

## 参考にさせて頂いたサイト
- [5分で絶対に分かるVPN (1/6)](http://www.atmarkit.co.jp/ait/articles/0204/27/news003.html)
- [IPsecとVPN](http://itpro.nikkeibp.co.jp/article/COLUMN/20060922/248777/?ST=selfup&P=1)
- [拠点間インターネットVPN （NAT超え）に関する整理](http://www.checksite.jp/about-internetvpn-ipsec-over-nat/)
- [NATトラバーサル](http://program.sagasite.info/wiki/index.php?NAT%E3%83%88%E3%83%A9%E3%83%90%E3%83%BC%E3%82%B5%E3%83%AB)
- [VyOSの設定いろいろ](http://qiita.com/suzutan/items/25dae107a23ad7b20f2d)