NEC IX ルータを用いて、AWSとVPN接続をする方法を説明します。AWSはグローバルIPアドレスを持つ機器のサンプル設定を提供していますが、工夫すればプライベートIPアドレスを持つ機器とIPsecを確立する事もできます。
動作確認環境
以下の構成で動作確認を行います。AWS側のグローバルIPアドレスはsite-to-site VPN作成時にランダムに生成されます。
+------------------+ +------------------+ | AWS | | AWS | +---------+--------+ +---------+--------+ | 34.217.232.61 | 54.69.109.228 | | +----------+-----------+ | | (internet) | | 203.165.211.85 +---------+--------+ | NAT Router | +---------+--------+ | .1 | | 192.168.1.0/24 | G0.0 | .10 +---------+--------+ | NEC IX 2015 | | R10 | +---------+--------+ G1.0 | .1 | | 192.168.2.0/24 |
最終的な設定の全文は以下の通りです
AWS側の設定
事前準備:グローバルIPアドレスの確認
オンプレミス側のグローバルIPアドレスを確認します。もし、ルータがマネージドサービスでありグローバルIPアドレスを確認できない状況ならば、「確認くん」などのWebサイトを使用すると良いでしょう。
カスタマーゲートウェイ
VPCの画面にて「カスタマーゲートウェイ」メニューを開きます。
カスタマーゲートウェイはAWSのインターネット側の設定です。「カスタマーゲートウェイ」を作成します。
「名前」「ルーティング」「IPアドレス」を入力します。「ルーティング」は動的を選び、「IPアドレス」はオンプレミス側のグローバルIPアドレスを入力します。
仮想プライベートゲートウェイ
仮想プライベートゲートウェイはAWSの内向きの設定で、どのVPCと紐づけるかの定義です。「仮想プライベートゲートウェイ」を作成します。
「名前タグ」にわかりやすい名前を入力し、「仮想プライベートゲートウェイの作成」を押下します。
対象の「仮想プライベートゲートウェイ」を選択した状態で、「アクション」「VPCにアタッチ」を選びます。
VPCを選択し、「はい、アタッチします」を押下します。
状態が「attaching」に変わった事を確認します。
サイト間のVPN接続
IPsecに関するパラメタを定義します。最小限の設定ならば、前述の「カスタマーゲートウェイ」と「仮想プライベートゲートウェイ」の紐付けのみです。
「VPNの作成」を押下します。
「名前タグ」「仮想プライベートゲートウェイ」「カスタマーゲートウェイ」を入力します。「仮想プライベートゲートウェイ」「カスタマーゲートウェイ」は前述の設定をプルダウンから選びます。
画面下へとスクロールし、「ローカルIPv4ネットワークCidr」「リモートIPv4ネットワークCidr」にオンプレミスとAWS側双方のプライベートIPアドレスのCIDRを入力します。
この値はNAT環境下では入力必須です。NAT変換前の機器を識別するための情報としてCIDRをID代わりに使用します。なお、IDはCIDRの他にipv4, fqdn, keyなどの指定方法がありますが、AWSではCIDRのみに対応しています。
「サイト間のVPN接続」の作成後、対象を選択した状態で、「設定のダウンロード」を押下します。
何らかの機種のサンプル設定を見ながら、NEC IXの設定を作成します。NEC IXの設定は例示されていないので、最も多数派と思われるCisco IOSの設定例を参考にしつつ、NEC IXの設定を作成する方法を例示します。
「Cisco Systems, Inc.」「CSRv AMI」「IOS 12.4+」を選択し、「ダウンロード」を押下します。
NEC IXの設定
サンプル設定の読み取り
AWSのsite to site VPNは、以下スクリーンショットのようにほぼ全てのハッシュと暗号化アルゴリズムに対応しています。ですので、AWSが提示するサンプル設定に合わせなくてもルータ側のデフォルト設定で動いてしまいます。
したがって、AWSが提供するサンプル設定から「最低限」読み取らなければならないのは以下4点です。
- 事前共有鍵
- AWS側のグローバルIPアドレス
- トンネルに付与するIPアドレス
- AWS側のAS番号
以下、読み取るべきパラメタが書かれている部分をハイライトします。
! -------------------------------------------------------------------------------- ! IPSec Tunnel #1 ! -------------------------------------------------------------------------------- <omitted> crypto keyring keyring-vpn-09043457e07b5f5d5-0 local-address 203.165.211.85 pre-shared-key address 34.217.232.61 key pq5RW0mMbSxz8k8.ZRY2T3C82D9GX8_z exit <omitted> interface Tunnel1 ip address 169.254.123.134 255.255.255.252 ip virtual-reassembly <omitted> router bgp 65000 neighbor 169.254.123.133 remote-as 64512 neighbor 169.254.123.133 activate neighbor 169.254.123.133 timers 10 30 30 <omitted> ! -------------------------------------------------------------------------------- ! IPSec Tunnel #2 ! -------------------------------------------------------------------------------- <omitted> crypto keyring keyring-vpn-09043457e07b5f5d5-1 local-address 203.165.211.85 pre-shared-key address 54.69.109.228 key QAElJrXGVeBgHi.U292jVF3eLTATQXMQ exit <omitted> interface Tunnel2 ip address 169.254.30.58 255.255.255.252 ip virtual-reassembly <omitted> router bgp 65000 neighbor 169.254.30.57 remote-as 64512 neighbor 169.254.30.57 activate neighbor 169.254.30.57 timers 10 30 30 <omitted>
設定作成
- 事前共有鍵
- AWS側のグローバルIPアドレス
- トンネルに付与するIPアドレス
- AWS側のAS番号
NEC IXの設定を作成します。「事前共有鍵」「AWS側のグローバルIPアドレス」「トンネルに付与するIPアドレス」はランダムに生成されますので、以下をコピペせずに適宜変更してください。「AS番号」は固定のようにも見えますが、念の為、サンプル設定の値を確認した方が無難かと思います。
IKEのプロポーザルはCiscoのサンプル設定に合わせていますが、実はAWSのデフォルト設定は殆どのパラメタで動くようになっています。初期設定では、例えばAWS側のフェーズ1暗号化アルゴリズムはAES128, AES256, AES128-GCM-16, AES256-GCM-16で交渉しますので、NEC IX側はほぼ全ての設定でAWSとネゴシエートする事ができます。もし、これがセキュアでないと思うならば、AWS側の設定をより堅牢に変更する事も可能です。
ike proposal ike-prop encryption aes hash sha group 1024-bit ! ike policy ike-policy1 peer 18.182.91.31 key hngyiJd8N5pulvK9QDMXZ02BDDLCz10K ike-prop ike policy ike-policy2 peer 52.198.204.130 key HDGT8vg_Wvlkte1PKllP26ZK4k1vX8VE ike-prop
IPsec Phase 2
Cisco IOSのサンプル設定からIPsec Phase 2に関する設定を読み取ります。トンネルに付与されるIPアドレスは毎回ランダムに生成されますので、本記事をコピペしないよう注意ください。
ike proposal ike-prop encryption aes hash sha group 1024-bit ! ike policy ike-policy1 peer 34.217.232.61 key pq5RW0mMbSxz8k8.ZRY2T3C82D9GX8_z ike-prop ike policy ike-policy2 peer 54.69.109.228 key QAElJrXGVeBgHi.U292jVF3eLTATQXMQ ike-prop ! ip access-list sec-list permit ip src any dest any ! ipsec autokey-proposal ipsec-prop esp-aes esp-sha lifetime time 3600 ! ipsec autokey-map ipsec-map1 sec-list peer 34.217.232.61 ipsec-prop pfs 1024-bit ipsec autokey-map ipsec-map2 sec-list peer 54.69.109.228 ipsec-prop pfs 1024-bit ! no ipsec local-id ipsec-map1 192.168.2.0/24 no ipsec remote-id ipsec-map1 172.31.0.0/16 no ipsec local-id ipsec-map2 192.168.2.0/24 no ipsec remote-id ipsec-map2 172.31.0.0/16 ! interface Tunnel0.0 tunnel mode ipsec ip address 169.254.123.134/30 ip tcp adjust-mss auto ipsec policy tunnel ipsec-map1 df-bit ignore pre-fragment out no shutdown ! interface Tunnel1.0 tunnel mode ipsec ip address 169.254.30.58/30 ip tcp adjust-mss auto ipsec policy tunnel ipsec-map2 df-bit ignore pre-fragment out no shutdown ! router bgp 65000 neighbor 169.254.123.133 remote-as 64512 neighbor 169.254.123.133 timers 10 30 neighbor 169.254.30.57 remote-as 64512 neighbor 169.254.30.57 timers 10 30 address-family ipv4 unicast network 192.168.2.0/24
設定投入後、IPsecが確立された事を確認します。
R10(config)# show ike sa ISAKMP SA - 2 configured, 2 created Local address is 192.168.1.10, port is 500 Remote address is 34.217.232.61, port is 500 IKE policy name is ike-policy1 Direction is initiator Initiator's cookie is 0x6b8f5d5e57ba6061 Responder's cookie is 0x9e93277dd7df582e Exchange type is main mode State is established Authentication method is pre-shared Encryption algorithm is aes-128 Hash algorithm is sha1 DH group is modp1024, lifetime is 28382 seconds #ph1 success: 1, #ph1 failure: 0 #ph1 hash err: 0, #ph1 timeout: 0, #ph1 resend: 0 #ph2 success: 1, #ph2 failure: 0 #ph2 hash err: 0, #ph2 timeout: 0, #ph2 resend: 0 Local address is 192.168.1.10, port is 500 Remote address is 54.69.109.228, port is 500 IKE policy name is ike-policy2 Direction is initiator Initiator's cookie is 0x893a43bdcc762508 Responder's cookie is 0x7f6c9722e87d46cc Exchange type is main mode State is established Authentication method is pre-shared Encryption algorithm is aes-128 Hash algorithm is sha1 DH group is modp1024, lifetime is 28552 seconds #ph1 success: 1, #ph1 failure: 0 #ph1 hash err: 0, #ph1 timeout: 0, #ph1 resend: 1 #ph2 success: 1, #ph2 failure: 0 #ph2 hash err: 0, #ph2 timeout: 0, #ph2 resend: 0 R10(config)# R10(config)# R10(config)# R10(config)# show ipsec sa IPsec SA - 2 configured, 4 created Interface is Tunnel0.0 Key policy map name is ipsec-map1 Tunnel mode, 4-over-4, autokey-map Local address is 192.168.1.10 Remote address is 34.217.232.61 Outgoing interface is GigaEthernet0.0 Interface MTU is 1438, path MTU is 1500 Inbound: ESP, SPI is 0xd9e8216f(3655868783) Transform is ESP-AES-128-HMAC-SHA-96 Remaining lifetime is 3177 seconds Replay detection support is on Outbound: ESP, SPI is 0xc24886ee(3259533038) Transform is ESP-AES-128-HMAC-SHA-96 Remaining lifetime is 3177 seconds Replay detection support is on Perfect forward secrecy is 1024-bit Interface is Tunnel1.0 Key policy map name is ipsec-map2 Tunnel mode, 4-over-4, autokey-map Local address is 192.168.1.10 Remote address is 54.69.109.228 Outgoing interface is GigaEthernet0.0 Interface MTU is 1438, path MTU is 1500 Inbound: ESP, SPI is 0x3358a799(861448089) Transform is ESP-AES-128-HMAC-SHA-96 Remaining lifetime is 3347 seconds Replay detection support is on Outbound: ESP, SPI is 0xce91830a(3465642762) Transform is ESP-AES-128-HMAC-SHA-96 Remaining lifetime is 3347 seconds Replay detection support is on Perfect forward secrecy is 1024-bit R10(config)#
BGPによって経路を交換できる事を確認します。
R10(config)# show ip bgp BGP table version is 7, local router ID is 192.168.2.1 Local AS number 65000 Status codes: s - suppressed, * - valid, h - history > - best, i - internal Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Path *> 172.31.0.0/16 169.254.123.133 100 64512 i *> 192.168.2.0/24 0.0.0.0 1 i Total number of prefixes 2 R10(config)# R10(config)# R10(config)# R10(config)# sow ip route % sow -- Invalid command. R10(config)# show ip route IP Routing Table - 6 entries, 1 hidden, 2041 frees Entries: 4 Connected, 1 Static, 0 RIP, 0 OSPF, 1 BGP Codes: C - Connected, S - Static, R - RIP, O - OSPF, IA - OSPF inter area N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2 E1 - OSPF external type 1, E2 - OSPF external type 2, B - BGP * - Candidate default, s - Summary Timers: Age S* 0.0.0.0/0 [1/1] via 192.168.1.1, GigaEthernet0.0, 0:22:57 169.254.0.0/16 is subnetted, 2 subnets C 169.254.30.56/30 [0/1] is directly connected, Tunnel1.0, 0:10:36 C 169.254.123.132/30 [0/1] is directly connected, Tunnel0.0, 0:10:39 B 172.31.0.0/16 [20/100] via 169.254.123.133, Tunnel0.0, 0:06:37 C 192.168.1.0/24 [0/1] is directly connected, GigaEthernet0.0, 0:22:57 C 192.168.2.0/24 [0/1] is directly connected, GigaEthernet1.0, 0:22:57 R10(config)#