YAMAHA RTX1200 でAWS サイト間VPN接続の構築

# YAMAHA RTX1200 でAWS サイト間VPN接続の構築

にわかSEがAWSで遊んでると突然「VPN接続ぐらいできるよね？」みたいな感じで案件アサインされました(笑)。
Client VPN ならさくっと設定したことあります...（震え声）
とにかく検証しないと始まらないので、会社に転がっていたYAMAHA RTX1200 でサイト間VPN接続を検証してみます。
# 今回のゴール
VPN接続したルータ配下にPCを接続し、VPC内のTest-ServerにプライベートIPアドレスでRDP接続できるようにする。


# 前提条件
1. 固定グローバルIPアドレス×１ の契約がある
2. PPPoEが設定できるルータがある　※今回はYAMAHA RTX1200 を使います
3. VPN接続しようしているAWS VPCに既存VPGは存在しない
4. ISP接続情報（PPPoE接続するためのユーザIDやPW）が分かる
5. RTX1200の設定はCLIで行います


１. ですがAWS サイト間VPN接続は動的IPでは設定できませんので固定IP必須です。
３. ですがAWS VPCの仕様上、1つのVPCにアタッチできるVPGは1つだけなので
複数のVPN接続を設定することはできないです。

# サイト間VPNの接続構成図
![Qiita_VPN接続.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/836beafd-b36e-34f2-52a7-e734474979b6.png)
　※調べてみたところ、接続構成図的にはこんな感じになるようです。（間違ってたらコメント下さると幸いです）

# 設定手順

1. VPCを作成する
2. Test用インスタンスを作成する　※RDP可能にしておく
3. カスタマーゲートウェイの設定
4. 仮想プライベートゲートウェイの設定
5. VPCのルーティング設定
6. セキュリティグループの設定
7. VPN接続を作成する
8. ルータ設定コンフィグをAWSからDLする
9. YAMAHA RTX1200 の基本設定（IFやPPPoE、フィルター設定など）
10. YAMAHA RTX1200のBGP、IPsecの設定
11. RDPでの接続テスト




# 実際にやってみた
1と2は本記事のメインではないので割愛します。それでは3から設定していきます。
VPCの設定画面から「カスタマーゲートウェイ」を選択します。
![スライド2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/e8ded0bc-4313-7640-b172-65013fcd2f9e.jpeg)

名前は任意のものを記入し、IPアドレスは固定グローバルIPを記入します。今回は動的ルーティングで設定しますのでルーティングは「動的」を選択します。
その他は特に設定不要です。
記入できたら「カスタマーゲートウェイの作成」を選択して、作成します。

次に仮想プライベートゲートウェイを作成します。
同じくVPCの設定画面から「仮想プライベートゲートウェイ」を選択します。
![スライド3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/0087ba98-e4a6-43b3-8e13-777792e1e591.png)

名前は任意のものを記入し、ASN番号はデフォルト（65000）のままでOKです。
記入ができれば、「作成」まで進めます。

各種ゲートウェイが作成できたところで、VPN接続を構築する前にローカル環境からアクセスできるようにセキュリティグループ設定とルーティング設定を行います。
まずルーティングの設定ですが、VPCの管理画面でVPGをアタッチ予定のVPCを選択し、「ルートの編集」で
ローカル側への通信（宛先が192.168.100.0/24）への通信をVPGへ向けるルーティングを追記します。
![ルーティング設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/198f69f1-d9f8-620b-1a70-f38d506f280d.png)
※0.0.0.0/0 をVPGへルーティングする設定は自動で登録されていました

続いてAWS側のルート情報がVPG経由でオンプレ側に広告されるように「ルート伝播」の項目を設定します。
「ルート伝播」のタグを選択し、「ルート伝播の編集」から伝播するに☑をいれます。![ルート伝播.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/9ffa698c-b505-8bf9-a947-3bcc6323fa37.png)

次にローカル側からAWS VPC内のインスタンスにアクセスできるようにセキュリティグループを編集していきます。
![セキュリティグループ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/329570a4-a1f8-0e2d-3af9-671677513572.png)
今回はインバウンドルールにローカル側のアドレスセグメント（192.168.100.0/24）の通過許可設定をします。

ではAWS側の通信設定とゲートウェイは出来たので、実際にVPN接続を構築していきます。
VPCの管理画面から「サイト間VPN」を選択し、以下のように必要事項を登録していきます。
![VPN接続.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/5dead563-b2e8-81c4-4e72-eb425884d042.png)
![トンネル設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/90f07374-3d37-03cb-4820-6ca843943e38.png)


VPN接続設定後の画面は以下のような形になります。
![VPN接続設定後画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/1df6dcd5-b8ce-88ad-a8c4-b0299528b649.png)
![VPN接続設定画面②.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/9515d123-10dc-72c0-abcf-edd0f00af937.png)

登録が完了すると利用するルータに合わせて、ルータコンフィグをDLできるようになりますのでDLしておきます。![ルータコンフィグDL.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/902587d5-93a9-4797-0e6a-625f2f7a9344.png)

これでAWS側の設定は完了です。ここからはYAMAHA RTX1200 側に必要な設定を投入をしていきます。

まずRTX1200 の基本的な設定を投入していきます。
基本的にベンダー公式情報の通りにやれば設定できるようになってます。
~~ネット上の情報だと一部修正が必要と書かれている記事もありますが2020年10月時点で
上述の前提条件で設定する場合はアレンジなしで設定できました。~~
AWSからDLするコンフィグはipsec ike local address　をルーターの LAN 側アドレスに変更する必要がありますがDLした生コンフィグはグローバルIPになってます。YAMAHA公式ページのサンプルコンフィグに一番最後で修正する内容を記載してくれています。

    # RTX1200 Rev.10.01.78 (Wed Nov 13 16:29:42 2019)
    ip route default gateway pp 1 filter 500000 gateway pp 1
    ip lan1 address 192.168.100.1/24
    pp select 1
    pp always-on on
    pppoe use lan2
    pppoe auto disconnect off
    pp auth accept pap chap
    pp auth myname (ISPへ接続するID) (ISPへ接続するパスワード）
    ppp lcp mru on 1454
    ppp ipcp msext on
    ppp ccp type none
    ip pp address (ルーターのグローバルIPアドレス)
    ip pp secure filter in 200003 200020 200021 200022 200023 200024 200025 200030 200032 200080 200081
    ip pp secure filter out 200013 200020 200021 200022 200023 200024 200025 200026 200027 200099 dynamic 200080 200081 200082 200083 200084 200085 200098 200099
    ip pp nat descriptor 1000
    pp enable 1
    
    ip filter 200000 reject 10.0.0.0/8 * * * *
    ip filter 200001 reject 172.16.0.0/12 * * * *
    ip filter 200002 reject 192.168.0.0/16 * * * *
    ip filter 200003 reject 192.168.100.0/24 * * * *
    ip filter 200010 reject * 10.0.0.0/8 * * *
    ip filter 200011 reject * 172.16.0.0/12 * * *
    ip filter 200012 reject * 192.168.0.0/16 * * *
    ip filter 200013 reject * 192.168.100.0/24 * * *
    ip filter 200020 reject * * udp,tcp 135 *
    ip filter 200021 reject * * udp,tcp * 135
    ip filter 200022 reject * * udp,tcp netbios_ns-netbios_ssn *
    ip filter 200023 reject * * udp,tcp * netbios_ns-netbios_ssn
    ip filter 200024 reject * * udp,tcp 445 *
    ip filter 200025 reject * * udp,tcp * 445
    ip filter 200026 restrict * * tcpfin * www,21,nntp
    ip filter 200027 restrict * * tcprst * www,21,nntp
    ip filter 200030 pass * 192.168.100.0/24 icmp * *
    ip filter 200031 pass * 192.168.100.0/24 established * *
    ip filter 200032 pass * 192.168.100.0/24 tcp * ident
    ip filter 200033 pass * 192.168.100.0/24 tcp ftpdata *
    ip filter 200034 pass * 192.168.100.0/24 tcp,udp * domain
    ip filter 200035 pass * 192.168.100.0/24 udp domain *
    ip filter 200036 pass * 192.168.100.0/24 udp * ntp
    ip filter 200037 pass * 192.168.100.0/24 udp ntp *
    ip filter 200080 pass * 192.168.100.1 udp * 500 
    ip filter 200081 pass * 192.168.100.1 esp * * 
    ip filter 200098 reject-nolog * * established
    ip filter 200099 pass * * * * *
    ip filter 500000 restrict * * * * *
    ip filter dynamic 200080 * * ftp
    ip filter dynamic 200081 * * domain
    ip filter dynamic 200082 * * www
    ip filter dynamic 200083 * * smtp
    ip filter dynamic 200084 * * pop3
    ip filter dynamic 200085 * * submission
    ip filter dynamic 200098 * * tcp
    ip filter dynamic 200099 * * udp

    nat descriptor type 1000 masquerade
    nat descriptor address outer 1000 (ルーターのグローバルIPアドレス)
    nat descriptor masquerade static 1000 1 192.168.100.1 udp 500  
    nat descriptor masquerade static 1000 2 192.168.100.1 esp 

    dns server (ISPから指定されたDNSサーバーのIPアドレス)
    dns private address spoof on

    dhcp service server
    dhcp server rfc2131 compliant except remain-silent
    dhcp scope 1 192.168.100.2-192.168.100.191/24


続いてAWSからDLしたコンフィグ情報で＃がついていない行をコピペで投入していきます。

    tunnel select 1 
	ipsec ike encryption 1 aes-cbc
	ipsec ike group 1 modp1024
	ipsec ike hash 1 sha
    ipsec ike pre-shared-key 1 text (事前共有キー)
    ipsec tunnel 201
    ipsec sa policy 201 1 esp aes-cbc  sha-hmac
    ipsec ike duration ipsec-sa 1 3600
    ipsec ike pfs 1 on
    ipsec tunnel outer df-bit clear
    ipsec ike keepalive use 1 on dpd 10 3
    ipsec ike local address 1 (固定グローバルIP)
    ipsec ike remote address 1 (外部IP)
	ip tunnel address (内部IP CIDR)
	ip tunnel remote address (内部IP CIDR)
 	ipsec ike local id 1 0.0.0.0/0
	ipsec ike remote id 1 0.0.0.0/0
    ip tunnel tcp mss limit 1379
	tunnel enable 1
	tunnel select none
    ipsec auto refresh on
    
    bgp use on
	bgp autonomous-system 65000
	bgp neighbor 1 64512 (内部IP CIDR) hold-time=30 local-address=(内部IP CIDR)
    bgp import filter 1 equal 0.0.0.0/0
	bgp import 64512 static filter 1
	bgp configure refresh 


    tunnel select 2 
	ipsec ike encryption 2 aes-cbc
	ipsec ike group 2 modp1024
	ipsec ike hash 2 sha
    ipsec ike pre-shared-key 2 text (事前共有キー)
    ipsec tunnel 202
    ipsec sa policy 202 2 esp aes-cbc  sha-hmac
    ipsec ike duration ipsec-sa 2 3600
    ipsec ike pfs 2 on
    ipsec tunnel outer df-bit clear
    ipsec ike keepalive use 2 on dpd 10 3
    ipsec ike local address 2 (固定グローバルIP)
    ipsec ike remote address 2 (外部IP)
	ip tunnel address (内部IP CIDR)
	ip tunnel remote address (内部IP CIDR)
	ipsec ike local id 2 0.0.0.0/0
	ipsec ike remote id 2 0.0.0.0/0
    ip tunnel tcp mss limit 1379
	tunnel enable 2
	tunnel select none
    ipsec auto refresh on
    
    bgp use on
	bgp autonomous-system 65000
	bgp neighbor 2 64512 (内部IP CIDR) hold-time=30 local-address=(内部IP CIDR)
    bgp import filter 1 equal 0.0.0.0/0
	bgp import 64512 static filter 1
	bgp configure refresh
    ipsec ike local address 1 192.168.100.1
    ipsec ike local address 2 192.168.100.1
これでルータ側のコンフィグ投入も完了です。
ルータ配下にPCを接続して、今のルータ設定状態をGUIで確認してみましょう！
YAMAHA RTX1200 のデフォルト設定では、ルータとPCをLANケーブルでつないで、Webブラウザーでhttp://192.168.100.1/ でルータ管理画面（GUI）にアクセスできます。
LAN1 に別IPアドレスを割り当てた場合は適宜変更してください。
![RTX1200 GUI画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/3f1baea2-ae7a-89b5-165e-bb6e15b3e786.png)

PPPoEを設定したLan2と2つ設定したIPsecのTunnelのステータスがUpになっていればOKです。
AWSのサイト間VPNではデフォルトで2本IPsecを設定する形になります。


最後にPCからAWS VPC上のTest-ServerにプライベートIPでRDPできるか確認しましょう！
![VPN接続済みの画面 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/b25889f7-b9ec-a002-a12c-1d3058a63bf3.png)

無事RDP接続できれば、VPN接続できていますd（`・ω・’）

# 終わりに
どういうわけか、みんなYAMAHAは設定簡単だよ～って言います（笑）
未経験者からするとよく分からんコマンドが並んでいて、この設定であっているか凄い不安になりますが、基本的にコピペと公式の指示通りにすれば接続できます。初心者に優しいというのは重要です！

# おまけ（11/5追記）
WAN側に割り当てた固定グローバルIPに対して、基本的に外部からのPingに応答をさせたくないと思います。
簡単そうで、上手くできずにハマったので、参考までに設定コマンドを記載します。
    
    # WAN側グローバルIPのPing応答拒否
    ip stealth pp1

これだけなんですが、このコマンドにたどり着くまでが長かった...

# 参考ページ
[YAMAHA 公式Webページ_設定例](https://network.yamaha.com/setting/router_firewall/cloud/amazon_vpc/setup_rt)
[AWS 公式Webページ_Site-to-Site VPN](https://docs.aws.amazon.com/ja_jp/vpn/latest/s2svpn/SetUpVPNConnections.html)