VyOSでVPC同士をVPN接続する。

##はじめに
VyOSを用いて擬似オンプレとVPCをVPN設定してみました。
疎通確認はpingで実施できるまで。

##目次
- VyOSとは
- 構成図
- 事前準備
- VyOSインスタンス作成（バージニアリージョン）
- カスタマーゲートウェイ（東京リージョン）
- 仮想プライベートゲートウェイ（東京リージョン）
- VPN接続の作成（東京リージョン）
- ダウンロードしたVyOSの設定ファイルを修正
- VyOS設定（バージニアリージョン）
- ルート伝播を有効にする（東京リージョン）
- 疎通確認
- まとめ

##VyOSとは
https://www.vyos-users.jp/
>Vyatta からフォークしたオープンソースのネットワーク OS で、ソフトウェアベースのルーティング、ファイアウォール、VPNなどの機能を持っています。

##構成図
![Untitled (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1810458/67e8b90d-0309-2492-20e4-7659c1bc27bb.png)


##事前準備
####東京リージョン
■VPC
 tokyo-vpc 10.0.0.0/16
■サブネット
 tokyo-public 10.0.0.0/24
 tokyo-private 10.0.1.0/24
■ルートテーブル
パブリックサブネット用RT

|送信先|ターゲット|
|----|----|
|10.0.0.0/16|local|
|0.0.0.0/0|tokyo-igwのID|
プライベートサブネット用RT

|送信先|ターゲット|
|----|----|
|10.0.0.0/16|local|

■インターネットゲートウェイ
tokyo-igwを作成

■EC2
tokyo-privateに疎通確認用EC2を作成
※設定値は適当で良い

####バージニアリージョン
■VPC
 virginia-vpc 172.31.0.0/16
■サブネット
 virginia-public 172.31.0.0/24
 virginia-private 172.31.1.0/24

■ルートテーブル
パブリックサブネット用RT

|送信先|ターゲット|
|----|----|
|172.31.0.0/16|local|
|0.0.0.0/0|virginiaのID|
プライベートサブネット用RT

|送信先|ターゲット|
|----|----|
|172.31.0.0/16|local|

■EC2
virginia-privateに疎通確認用EC2を作成
※設定値は適当で良い

##VyOSインスタンスを作成（バージニアリージョン）
バージニアリージョンのパブリックサブネットにVyOSインスタンスを作成していきます。
AWS MarketplaceにVyOSがパッケージされているAMIがあるのでそちらを使用する。
![スクリーンショット 2021-10-05 11.16.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1810458/9b497936-1bc4-f006-94ff-777d811b1165.png)
作成後、送信元/送信先チェックを無効化します。他インスタンスへパケットを転送できるようにします。
![スクリーンショット 2021-10-05 14.06.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1810458/41c7816e-1e2e-0551-9a36-fdcde49e9b92.png)
パブリックIPアドレスについてはEIPを付与しています。

##カスタマーゲートウェイ作成（東京リージョン）
東京でカスタマーゲートウェイを作成します。
IPアドレスには上記で作成したVyOSのEIPのアドレスを指定します。
![スクリーンショット 2021-10-05 14.55.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1810458/9c09e76c-754c-6666-e7c4-9b5136d3538b.png)

##仮想プライベートゲートウェイ作成（東京リージョン）
ASNはAmazon のデフォルト ASNを選択します。
![スクリーンショット 2021-10-05 15.04.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1810458/b218067f-7bb7-8085-f566-13207663550c.png)
作成後VGWをVPCにアタッチします。

##VPN 接続の作成（東京リージョン）
仮想プライベートゲートウェイとカスタマーゲートウェイをVPNで繋ぎます。

仮想プライベートゲートウェイとカスタマーゲートウェイには、先ほど作成した物を選択。
その他設定内容は画像の通りです。
![スクリーンショット 2021-10-05 16.09.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1810458/a008c279-49c3-2e18-ab0a-97d698e640e3.png)

作成後、VyOS設定で使用する設定ファイルをダウンロードする。
![スクリーンショット 2021-10-05 16.13.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1810458/79cea5d5-d826-f158-be0e-a04196440fcb.png)
![スクリーンショット 2021-10-05 16.27.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1810458/e3c897f4-fa2f-e09f-f96f-99cdc9ebf3b9.png)

##ダウンロードしたVyOSの設定ファイルを修正
ダウンロードできるファイルは、バージョンが現在AWS Marketplaceから作成できるVyOSと違うらしく、設定構文が変わってしまっているため修正する。
修正箇所だけ下記に記載します。
#####修正前
```
set vpn ipsec site-to-site peer ***** local-address VyOSインスタンスのEIP
set protocols bgp 65000 network 対象ネットワーク[172.31.0.0/16]
set protocols bgp 65000 neighbor xxx.xxx.xxx.xxx soft-reconfiguration 'inbound'
```
#####修正前
```
set vpn ipsec site-to-site peer ***** local-address VyOSインスタンスのプライベートIP[172.31.0.68]
set protocols bgp 65000 address-family ipv4-unicast network 対象ネットワーク[172.31.0.0/16]
set protocols bgp 65000 neighbor xxx.xxx.xxx.xxx address-family ipv4-unicast soft-reconfiguration 'inbound'
```
##VyOS設定（バージニアリージョン）
VyOSインスタンスにSSH接続します。
接続ユーザはデフォルトのvyosになります。
`ssh -i 秘密鍵 vyos@VyOSのIPアドレス`

ログイン後は設定ファイルを反映させていきます。
setの文を全てコピペで設定する。
設定後はcommit、saveする

```
vyos@ip-172-31-0-68:~$ configure
[edit]
vyos@ip-172-31-0-68# set vpn ipsec ike-group AWS lifetime '28800'
[edit]
省略
vyos@ip-172-31-0-68#commit
vyos@ip-172-31-0-68#save
```

##ルート伝播を有効にする（東京リージョン）
東京リージョンのプライベートサブネット用のルートテーブルでルート伝播を有効にします。
![スクリーンショット 2021-10-05 17.25.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1810458/cbd7ab36-f03b-a2de-2b69-849aae11dd3d.png)
有効になれば、VyOSで設定した対象ネットワークへのルーティングルールが自動で追加されます。
![スクリーンショット 2021-10-05 17.26.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1810458/d218dc7c-528f-af09-f2c9-3fb73b4009a5.png)

##疎通確認
東京リージョンのプライベートインスタンスからバージニアリージョンのプライベートインスタンスへpingしてみる。

```
[ec2-user@ip-10-0-1-81 ~]$ ping 172.31.0.68
PING 172.31.0.68 (172.31.0.68) 56(84) bytes of data.
64 bytes from 172.31.0.68: icmp_seq=1 ttl=64 time=147 ms
64 bytes from 172.31.0.68: icmp_seq=2 ttl=64 time=147 ms
64 bytes from 172.31.0.68: icmp_seq=3 ttl=64 time=147 ms
64 bytes from 172.31.0.68: icmp_seq=4 ttl=64 time=151 ms
64 bytes from 172.31.0.68: icmp_seq=5 ttl=64 time=147 ms
64 bytes from 172.31.0.68: icmp_seq=6 ttl=64 time=147 ms
64 bytes from 172.31.0.68: icmp_seq=7 ttl=64 time=147 ms
64 bytes from 172.31.0.68: icmp_seq=8 ttl=64 time=147 ms
64 bytes from 172.31.0.68: icmp_seq=9 ttl=64 time=147 ms
^C
--- 172.31.0.68 ping statistics ---
9 packets transmitted, 9 received, 0% packet loss, time 8013ms
rtt min/avg/max/mdev = 147.599/148.136/151.434/1.263 ms
[ec2-user@ip-10-0-1-81 ~]$
```
通信することができました！

##まとめ
VyOSとVPNを初めて触ってみたが今回でふんわりと理解することができた。
詰まったところとしては、AWSからダウンロードしたVyOSの設定ファイルをそのまま使うことができず修正する部分をわかっていなかったためえ解決に時間がかかった。

##参考
https://qiita.com/sugimountaws/items/2f2e8d27ade90bb3b554
https://www.yrglm.co.jp/blog/2015/02/18/10042