aws vpc間通信時の設定メモ

#aws vpc間通信時の設定メモ

##やりたいこと
・VPC間をVPNで接続する
・VPCのprivateサブネットから対向のVPCのprivateサブネットへの通信を行う

##環境

####VPCを二つ用意

```bash:準備
VPC A　10.0.0.0/16
VPC B　172.16.0.0/16

※VPCのregionは問いません。
※tokyo-oregonでもいいし、tokyo-tokyoでもOK
```

####各VPC内にサブネットを用意
```bash:準備
publicサブネット
　10.0.100.0/24
　172.16.100.0/24
privateサブネット
　10.0.200.0/24
　172.16.200.0/24
```
####各publicサブネットにVyOS(ver1.05)を用意
```bash:準備
VPC A にあるVyOSを「VyOS A」とする
VPC B にあるVyOSを「VyOS B」とする
```

####VyOSにはeniを２つをアタッチしておく。
```bash:準備
VyOS A
　public：eth0　10.0.100.100/24　
　private：eth1　10.0.200.200/24

VyOS B
　public：eth0　172.16.100.100/24　
　private：eth1　172.16.200.200/24

※eniのsource dest.をすべて「無効化」にしておく。
```

####VyOS A,BのPublicのeni(eth0)にEIPを付与する
```bash:準備
VyOS A - eth0：XXX.XXX.XXX.XXX
VyOS B - eth0：YYY.YYY.YYY.YYY
```

####各privateサブネットに疎通確認用のEC2（なんでもよい）を用意
```bash:準備
AmazonLinux A　10.0.200.10
AmazonLinux B　172.16.200.10
```

####SecurityGroup
```bash:準備
VyOS A
　・SSH ※source：自分の端末からのSSH接続
　・ESP (IP Protocol 50) ※source:YYY.YYY.YYY.YYY(VyOS BのEIP)
　・UDP port500 ※source:YYY.YYY.YYY.YYY(VyOS BのEIP)
　・ALL traffic ※source：10.0.200.10（AmazonLinux A）

VyOS B
　・SSH ※source：自分の端末からのSSH接続
　・ESP (IP Protocol 50) ※source:XXX.XXX.XXX.XXX(VyOS AのEIP)
　・UDP port500 ※source:XXX.XXX.XXX.XXX(VyOS AのEIP)
　・ALL traffic ※source：172.16.200.10（AmazonLinux B）

AmazonLinux A　（疎通確認用なのでざっくり）
　・ALL traffic ※source：10.0.0.0/16（VPC A）
　・ALL traffic ※source：172.16.0.0/16（VPC B）

AmazonLinux B　（疎通確認用なのでざっくり）
　・ALL traffic ※source：10.0.0.0/16（VPC A）
　・ALL traffic ※source：172.16.0.0/16（VPC B）
```

####RouteTable
```bash:準備
各privateサブネットのroutetableに
対向VPC(10.0.0.0/16 or 172.16.0.0/16)へのrouteを記載
targetに同一VPC内のpublicサブネットのVyOSのeth1(eni-XXXXXXXX)を指定
```

#ここからVyOS内の設定
##eniを認識させる

```bash:VyOS-A_/etc/network/interfaces
以下追記
auto eth1
iface eth1 inet static
address 10.0.200.200
netmask 255.255.255.0
```

```bash:VyOS-B_/etc/network/interfaces
以下追記
auto eth1
iface eth1 inet static
address 172.16.200.200
netmask 255.255.255.0
```

それぞれnetworkingを再起動

```
$sudo service networking restart
```

（EC2を再起動するとEIPに接続できなくなる？事象が発生したので、rc.localに以下を追記した。どなたか、詳しい方がいらっしゃいましたら仕組みを教えてください。）

```bash:/etc/rc.local
service networking restart
```

##VPN 設定

```bash:VyOS-A_config
configure

#事前準備
MY_EIP=XXX.XXX.XXX.XXX
MY_ETH0=10.0.100.100
MY_ETH1=10.0.200.200
MY_CIDR=/24
MY_NETMASK=255.255.255.0
MY_ID=vyatta1000
ANOTHER_EIP=YYY.YYY.YYY.YYY
ANOTHER_NETWORK=172.16.0.0/16
ANOTHER_ID=vyatta2000
SHEARD_KEY=pass12345

set vpn ipsec ipsec-interfaces interface eth0
set interfaces ethernet eth1 address $MY_ETH1$MY_CIDR
set vpn ipsec ike-group ike lifetime 3600
set vpn ipsec ike-group ike proposal 1 encryption aes128
set vpn ipsec ike-group ike proposal 1 hash sha1
set vpn ipsec esp-group esp lifetime 1800
set vpn ipsec esp-group esp proposal 1 encryption aes128
set vpn ipsec esp-group esp proposal 1 hash sha1
set vpn ipsec site-to-site peer $ANOTHER_EIP authentication mode pre-shared-secret
set vpn ipsec site-to-site peer $ANOTHER_EIP authentication pre-shared-secret $SHEARD_KEY
set vpn ipsec site-to-site peer $ANOTHER_EIP authentication id @$MY_ID
set vpn ipsec site-to-site peer $ANOTHER_EIP authentication remote-id @$ANOTHER_ID
set interfaces vti vti0
set vpn ipsec site-to-site peer $ANOTHER_EIP vti bind vti0
set vpn ipsec site-to-site peer $ANOTHER_EIP ike-group ike
set vpn ipsec site-to-site peer $ANOTHER_EIP vti esp-group esp
set vpn ipsec site-to-site peer $ANOTHER_EIP local-address $MY_ETH0
set protocols static interface-route $ANOTHER_NETWORK next-hop-interface vti0

commit
save
```

```bash:VyOS-A_config
configure

#事前準備
MY_EIP=YYY.YYY.YYY.YYY
MY_ETH0=172.16.100.100
MY_ETH1=172.16.200.200
MY_CIDR=/24
MY_NETMASK=255.255.255.0
MY_ID=vyatta2000
ANOTHER_EIP=XXX.XXX.XXX.XXX
ANOTHER_NETWORK=10.0.0.0/16
ANOTHER_ID=vyatta1000
SHEARD_KEY=pass12345

set vpn ipsec ipsec-interfaces interface eth0
set interfaces ethernet eth1 address $MY_ETH1$MY_CIDR
set vpn ipsec ike-group ike lifetime 3600
set vpn ipsec ike-group ike proposal 1 encryption aes128
set vpn ipsec ike-group ike proposal 1 hash sha1
set vpn ipsec esp-group esp lifetime 1800
set vpn ipsec esp-group esp proposal 1 encryption aes128
set vpn ipsec esp-group esp proposal 1 hash sha1
set vpn ipsec site-to-site peer $ANOTHER_EIP authentication mode pre-shared-secret
set vpn ipsec site-to-site peer $ANOTHER_EIP authentication pre-shared-secret $SHEARD_KEY
set vpn ipsec site-to-site peer $ANOTHER_EIP authentication id @$MY_ID
set vpn ipsec site-to-site peer $ANOTHER_EIP authentication remote-id @$ANOTHER_ID
set interfaces vti vti0
set vpn ipsec site-to-site peer $ANOTHER_EIP vti bind vti0
set vpn ipsec site-to-site peer $ANOTHER_EIP ike-group ike
set vpn ipsec site-to-site peer $ANOTHER_EIP vti esp-group esp
set vpn ipsec site-to-site peer $ANOTHER_EIP local-address $MY_ETH0
set protocols static interface-route $ANOTHER_NETWORK next-hop-interface vti0

commit
save
```

------------------------------------------

あとは疎通確認をして終わり。




##参考
http://blog.serverworks.co.jp/tech/2013/12/04/vyatta_site-to-site/
http://qiita.com/mell3210/items/7d7ac159a93a7c630a9c
http://sig9.hatenablog.com/entry/2015/08/09/214338