この記事は、ニフクラブログで2016-02-17に公開された記事を移転したものです。
こんにちは、ニフティクラウドのテクニカルアカウントエンジニアです。
マルチクラウドという言葉がありますが、ニフティクラウドの商談の中でも、「他社のクラウドから移行したい」、「他社クラウドの一部の機能も使いたい」と言った要望を受けることがあります。
今回は、そういったケースに利用できそうな「ニフティクラウドと他社とのVPN通信」について検証したいと思います。
今回は、AWSさんを例に構築してみます。
構築の目的はニフティクラウド-AWS間でVPNコネクションを張り、相互のプライベートLANに対して通信ができるようにすることです。
構成については、ニフティクラウド側はプライベートLAN⇔VPNゲートウェイの構成を作成し、AWS側はVPC⇔VyOSの構成を作成後、VPNゲートウェイとVyOSでVPNコネクションを張ります。
構成については詳しくは以下の構成概要図を確認ください。
構成概要図
構築手順目次
- VPCの作成
- VyOSインスタンスの作成
- AWSのネットワーク設定
- VPNゲートウェイの作成
- ファイアウォールの設定
- VyOSの設定
- ローカルサーバー間通信の確認
構築手順詳細
以下では、上記構築手順について各手順の詳細を示しています。
1. VPCの作成
AWSのプライベートLANにあたる、VPCをまず作成します。
- VPCメニューのVPCダッシュボードから「VPCウィザードの起動」をクリックします。
- 「1個のパブリックネットを持つVPC」を選択し、「選択」をクリックします。
- 「IP CIDRブロック」に10.0.0.0/16を、「パブリックサブネット」に10.0.0.0/24を、「サブネット名」にパブリックサブネット(任意の物で可)を入力し、「VPCの作成」をクリックします。
- VPCメニューのサブネットから「サブネットの作成」をクリックします。
- 「ネームタグ」にPVsubnet(任意の物で可)を、「VPC」に作成した10.0.0.0/16のVPCを、「CIDRブロック」に10.0.1.0/24を入力し、「作成」をクリックします。
2. VyOSインスタンスの作成
作成したVPC上にAWS側のVPNGWとなるVyOSを作成します。
- EC2メニューのインスタンスから「インスタンスの作成」をクリックします。
- 「コミュニティAMI」からVyOS 1.1.0(仮想化方式HVM)を探し、「選択」をクリックします。
- 使用するインスタンスタイプを選択し、「次の手順:インスタンスの詳細の設定」をクリックします。
- 「ネットワーク」に作成したVPCを、「サブネット」に作成したパブリックサブネットを入力します。
- 「デバイスの追加」をクリック後、「eth0」の「プライマリIP」に10.0.0.10を入力し、「eth1」の「サブネット」に作成したPVsubunetを選択後、さらに「プライマリIP」に10.0.1.10を入力し、「次の手順:ストレージの追加」をクリックします。
- 追加するストレージを設定後、「次の手順:インスタンスのタグ付け」をクリックします。
- インスタンスのタグ付け設定後、「次の手順:セキュリティグループの設定」をクリックします。(特に必要がなければ未設定で問題なし)
- この時点では、VPNに使用するグローバルIPアドレスが不明なため、ひとまず必要になるSSH接続許可を設定し、「確認と作成」をクリックします。(IPは適当な物に変更すること)
- 設定を確認後、「作成」をクリックします。
- 「新しいキーペアの作成」を選択後、任意のキーペア名を入力し、「キーペアのダウンロード」から鍵を取得後に、「インスタンスの作成」をクリックします。(すでに作成済みの鍵を使用する場合は「既存のキーペアを使用」を選択)
3. AWSのネットワーク設定
作成したVyOSインスタンスのネットワーク設定を行います。
- EC2メニューのElastic IPから「新しいアドレスの割り当て」をクリックします。
- VPCを選択後、「関連付ける」をクリックします。
- 作成されたElastic IPを選択後、「アクション」タブから「アドレスの関連付け」をクリックします。
- 「インスタンス」に作成したVyosのIDを、「プライベートIPアドレス」に10.0.0.10を選択し、「関連付ける」をクリックします。
- EC2メニューの「ネットワークインターフェイス」から、作成したVyOSのeth0(eth1)を選択後、「アクション」タブから「送信元/送信先の変更チェック」をクリックします。
- 「送信元/送信先チェック」を「無効」に変更し、「保存」をクリックします。
- eth0の設定変更後にeth1も同じ設定を行ってください。
4. VPNゲートウェイの作成
ニフティクラウド上にプライベートLANを作成します。
- ネットワークタブから「プライベートLAN作成」をクリックします。
- 「プライベートLAN名」に「PVLAN(任意の名前で可)」を、「ゾーン」に使用するゾーンを、「CIDR」に172.16.0.0/16を入力し、「確認へ」をクリック後、プライベートLANを作成します。
- ネットワークタブから「VPNゲートウェイの作成」をクリック後、「VPNゲートウェイ名」に「VPNGW(任意の名前で可)」を、「タイプ」には本手順構成は1対1なので「small」を、「プライベート側ネットワーク」に作成したプライベートLANを選択後、「ファイアウォール設定へ」をクリックします。
- 「VPNGW」のIPアドレスがまだ決定していないため、「ファイアウォール」には一旦適用しないを選択し、「確認へ」をクリック後、VPNゲートウェイを作成します。
- カスタマーGWタブから「カスタマーゲートウェイ作成」をクリックします。
- 「カスタマーゲートウェイ名」に「CMGW(任意の名前で可)」を、「対向機種IPアドレス」にAWSで関連付けたElastic IPアドレスを、「対向機種LAN側IPアドレス帯」にAWSのLAN側ネットワークアドレス10.0.1.0/24を、「対向機種LAN側IPアドレス」にVyOSLAN側IPアドレス10.0.1.10を入力後、「作成する」をクリックします。
- 「対向機種LAN側IPアドレス」はYAMAHAシリーズのみ設定が必要と記載がありますが、今回は必要でした。
- 作成した「VPNGW」をクリックし、プルダウンから「VPNコネクション作成」をクリックします。
- 「カスタマーゲートウェイ」に「CMGW」を、「接続方式」に「IPsec」を、「暗号化アルゴリズム」に「AES128」を、「認証アルゴリズム」に「SHA1」を、「事前共有鍵」に「niftyAWSVPN(任意の物で可)」を入力後、「トンネル設定へ」をクリックします。
- そのまま「確認へ」をクリックし、VPNコネクションを作成します。
- この後の設定で必要となる、「VPNGW」のグローバルIPアドレスを「VPNGW」のネットワークタブで確認します。 また、ローカルIPアドレスはネットワークアドレスから自動的に「172.16.0.1」が付与されます。
5. ファイアウォールの設定
使用するIPアドレスが出揃ったので、ニフティクラウド・AWSそれぞれのVPNゲートウェイ・VyOSおよびローカルサーバーのファイアウォールにインバウンドの許可設定を追加します。 設定については以下の表を参考にしてください。
- その他、VPNコネクション以外の設定については必要な物を追加してください。
ベンダー | 許可IPアドレス | 備考 |
---|---|---|
ニフティクラウド | yyy.yyy.yyy.yyy | AWS VyOS |
172.16.0.0/16 | ニフティクラウド LAN側ネットワーク | |
10.0.1.0/24 | AWS LAN側ネットワーク (VPNコネクション後にLAN側IPで接続される) |
|
AWS | xxx.xxx.xxx.xxx | ニフティクラウド VPNゲートウェイ |
10.0.1.0/24 | AWS LAN側ネットワーク | |
172.16.0.0/16 | ニフティクラウド LAN側ネットワーク (VPNコネクション後にLAN側IPで接続される) |
6. VyOSの設定
VPNコネクションに必要な設定を行います。 基本的な設定は「VPNコネクション:IPsec VPN(L3VPN)で接続する拠点側VPN装置の設定(VyOS)」を参照しています。
- teratermでVyOSのElastic IPアドレスを入力後、VyOSインスタンス作成時に同時に作成したキーペアをSSH鍵に指定し、SSH接続をします。 ユーザー名およびパスフレーズはVyOSの初期設定で両方とも、「vyos」となっています。
- IKEの暗号・ハッシュアルゴリズム設定
- IKEグループ名「IKE1」は任意の名前で問題ありませんが、その場合は後の手順でも一致したIKEグループ名を使用してください。
$ configure # set vpn ipsec ike-group IKE1 dead-peer-detection action restart # set vpn ipsec ike-group IKE1 dead-peer-detection interval 15 # set vpn ipsec ike-group IKE1 dead-peer-detection timeout 90 # set vpn ipsec ike-group IKE1 proposal 1 encryption aes128 # set vpn ipsec ike-group IKE1 proposal 1 hash sha1 # set vpn ipsec ike-group IKE1 proposal 1 dh-group 2 # set vpn ipsec ike-group IKE1 lifetime 28800
- ESPの暗号・ハッシュアルゴリズム設定
- ESPグループ名「ESP1」は任意の名前で問題ありませんが、その場合は後の手順でも一致したESPグループ名を使用してください。
# set vpn ipsec esp-group ESP1 proposal 1 encryption aes128 # set vpn ipsec esp-group ESP1 proposal 1 hash sha1 # set vpn ipsec esp-group ESP1 lifetime 3600
- IPsec用のインターフェースとしてWAN側のeth0を指定
# set vpn ipsec ipsec-interfaces interface eth0
- ニフティクラウドに作成したVPNゲートウェイのIPアドレスおよび事前共有鍵を設定
# edit vpn ipsec site-to-site peer xxx.xxx.xxx.xxx # set authentication mode pre-shared-secret # set authentication pre-shared-secret niftyAWSVPN
- ニフティクラウドへのVPNに作成したIKE1・ESP1グループを使用
# set ike-group IKE1 # set default-esp-group ESP1
- VyOSのWAN側IPアドレス設定
今回の構築ではAWSのVPCを利用しているので、WAN側IPアドレスはElastic IPの「yyy.yyy.yyy.yyy」ではなく、実際にVyOSに付与している「10.0.0.10」のIPアドレスを設定します。
また、先ほど掲載した参照ページでは「set local-ip」と記載されていますが、AWS AMIのVyOS1.1では「set local-address」コマンドとなります。
# set local-address 10.0.0.10
- ニフティクラウド・AWSそれぞれのトンネリングするネットワークを設定
作成したVPCの/16をまるごと使用することも可能ですが、今回はサブネットとして/24で切るかたちでトンネリング設定を構築します。
remote側はニフティクラウドのプライベートLANアドレスを指定します。
# set tunnel 1 local prefix 10.0.1.0/24 # set tunnel 1 remote prefix 172.16.0.0/16
- VyOSのeth1にLAN側IPアドレスを設定
VyOS作成時にeth1に「10.0.1.10/24」を指定しているものの、AWS上だと確保されただけのようで、実際にはVyOS上からだとeth1のIPアドレスは未設定状態となるため、追加で設定をします。
# top # set interfaces ethernet eth1 address 10.0.1.10/24
- idおよびremote-idの設定
本構成では以下のようにidおよびremote-idをVyOS側で指定しないとVPN接続が不可でした。
idにはVyOSのLAN側IPアドレスを、remote-idにはニフティクラウドVPNゲートウェイのWAN側IPアドレスを設定します。
- 動的IPを利用している場合、IKEのIDとしては、ローカル側IPを指定する必要があります。
# set vpn ipsec site-to-site peer xxx.xxx.xxx.xxx authentication id 10.0.1.10 # set vpn ipsec site-to-site peer xxx.xxx.xxx.xxx authentication remote-id xxx.xxx.xxx.xxx # set authentication pre-shared-secret niftyAWSVPN
- 設定の保存
# commit # save
- VPNステータスの確認
IKE/IPsecの両方がupでsessionが張れている状態となり、疎通確認にニフティクラウドVPNゲートウェイのLAN側IPアドレスにpingを打ちます。
# run show vpn ike sa # set interfaces ethernet eth1 address 10.0.1.10/24 Peer ID / IP Local ID / IP ------------ ------------- xxx.xxx.xxx.xxx 10.0.0.10 State Encrypt Hash D-H Grp NAT-T A-Time L-Time ----- ------- ---- ------- ----- ------ ------ up aes128 sha1 2 no 1345 28800 # run show vpn ipsec sa Peer ID / IP Local ID / IP ------------ ------------- xxx.xxx.xxx.xxx 10.0.0.10 Tunnel State Bytes Out/In Encrypt Hash NAT-T A-Time L-Time Proto ------ ----- ------------- ------- ---- ----- ------ ------ ----- 1 up 420.0/420.0 aes128 sha1 no 1617 3600 all # run ping 172.16.0.1 PING 172.16.0.1 (172.16.0.1) 56(84) bytes of data. 64 bytes from 172.16.0.1: icmp_req=1 ttl=64 time=87.9 ms 64 bytes from 172.16.0.1: icmp_req=2 ttl=64 time=87.8 ms 64 bytes from 172.16.0.1: icmp_req=3 ttl=64 time=87.7 ms 64 bytes from 172.16.0.1: icmp_req=4 ttl=64 time=87.7 ms
7. ローカルサーバー間通信の確認
VPNコネクションを張った後に、それぞれのLAN側に設置したローカルサーバーで相互に通信が可能なことを確認します。
- 構成概要図内のローカルサーバー同士の通信
- 本手順ではLinuxサーバー間で確認
- サーバーの作成
LAN側ネットワークに属するインターフェースを所持するサーバーをそれぞれで作成し、IPアドレス設定します。
今回はニフティクラウド側は「172.16.0.20」を、AWS側は「10.0.1.20」を設定しました。
- AWSのインスタンス作成についてはVyOSインスタンス作成手順を参考にしていただき、ニフティクラウドのサーバー作成手順についてはサーバーの作成を参考にしてください。
- ルーティングの追加
今回はOS側でルーティングの追加をし、接続の確認をします。
- ニフティクラウドローカルサーバー
AWSのLAN側ネットワーク「10.0.1.0/24」接続時は、VPNゲートウェイのLAN側IPアドレス「172.16.0.1」をゲートウェイとします。
# route add -net 10.0.1.0/24 gw 172.16.0.1
- AWSローカルサーバー
ニフティクラウドのLAN側ネットワーク「172.16.0.0/16」接続時は、VyOSのLAN側IPアドレス「10.0.1.10」をゲートウェイとします。
# route add -net 172.16.0.0/16 gw 10.0.1.10
- ニフティクラウドローカルサーバー
AWSのLAN側ネットワーク「10.0.1.0/24」接続時は、VPNゲートウェイのLAN側IPアドレス「172.16.0.1」をゲートウェイとします。
- ssh確認
sshでログインし、接続確認をします。
- ニフティクラウドローカルサーバー
AWSローカルサーバーにawsユーザーを作成し、sshログインを行います。
# ssh aws@10.0.1.20 aws@10.0.1.20's password: Last login: Wed Nov 11 06:51:23 2015 from ip-172-16-0-20.ap-southeast-1.compute.internal __| __|_ ) _| ( / Amazon Linux AMI ___|\___|___| https://aws.amazon.com/amazon-linux-ami/2015.09-release-notes/ [aws@ip-10-0-1-20 ~]$
- AWSローカルサーバー
ニフティクラウドローカルサーバーにniftyユーザーを作成し、sshログインを行います。
# ssh nifty@172.16.0.20 nifty@172.16.0.20's password: Last login: Wed Nov 11 15:53:15 2015 from 10.0.1.20 [nifty@awsvpn001 ~]$
- ニフティクラウドローカルサーバー
AWSローカルサーバーにawsユーザーを作成し、sshログインを行います。
検証結果まとめ
本検証の通り、ニフティクラウド/AWS間でVPNコネクションを張り、相互のプライベートLANに対して通信ができることが確認できました。
この検証によりマルチベンダーでのクラウド構築などが可能になるのではと考えられます。 各クラウドベンダーメリットデメリットを理解して上手く使うと、いい所取りをしたシステム構築が可能になるかもしれないですね。
- 本手順については検証結果の1つであり、利用される際は事前にそれぞれの環境で十分に検証を行っていただくようお願いします。