ニフクラ ブログ

ニフクラ/FJ Cloud-Vやクラウドの技術について、エンジニアが語るブログです。

ニフティクラウド Machine Learningのご紹介

こんにちは。ニフティクラウドで開発を担当している大友と言います。

本日は、2016年10月25日にリリースされましたニフティクラウド Machine Learning(現在トライアルα版として受付中)をご紹介します。
ニフティクラウド Machine Learningは、クラウド上に機械学習のモデルを構築して、UIやAPI経由でモデルの出力する予測値を得ることのできるサービスです。

※本記事は2016年11月28日時点での情報を元に執筆しています。

img_ml

機械学習とは

機械学習とは、データに含まれるパターンなどをコンピュータに学習させることで、データを入力として与えた際に、何らかの有益な出力を返すプログラムを構築する仕組みです。出力を返すプログラムをモデルと呼びます。機械学習にはいくつか種類があります。以下に代表的なものを挙げます。

  • 教師あり学習:正解を含むデータを学習させて、未知のデータに対する正解を予測するモデルを構築する
  • 教師なし学習:データに含まれるパターンなどを抽出して出力するモデルを構築する
  • 強化学習:環境と行動を定義し、環境に対して行動した結果を学習して最適な行動を出力するモデルを構築する

実際の応用例として、以下のようなものがあります。

  • メールとスパムか否かのラベルをデータとして新たに受信したメールが、スパムか否かを予測するモデルを構築する(教師あり学習)
  • 店舗への来客データから抽出したパターンに基づいてセグメントを分割し、施策などに活用する(教師なし学習)
  • 囲碁の盤面を環境、差し手を行動として、盤面に対する差し手を学習して最適な差し手を出力するモデルを構築する(強化学習)

今回はニフティクラウド Machine Learningの機能として提供している、教師あり学習について説明していきます。

機械学習における課題

モデルを構築する際に、少なくとも下記のような課題があると考えられています。

モデル構築アルゴリズムを適用するためのデータの前処理

一つめは、いわゆる前処理と呼ばれている処理です。機械学習のモデルを構築するアルゴリズムは数値を入力とするものが主になります。そこで、入力するデータを適切な形にあらかじめ処理しておく必要があります。例えば、入力の中に記号が含まれている場合などには数値化する必要があります。また、アルゴリズムによっては、入力する数値のカラムごとの大きさに影響を受けるものがあるため、数値の大きさを調整する必要があります。

機械学習のモデル選択や各モデルのハイパーパラメーターのチューニング

二つめはモデルの選択と各モデルのハイパーパラメーターのチューニングです。機械学習にいくつか種類があることは前述しましたが、その中の教師あり学習のモデルについても、いくつか種類があります。それぞれのモデルごとに特性が異なっており、あるデータでは精度の高かったモデルでも別のデータに対しては精度が低く、別のモデルの方が適している場合などがあります。このため、色々なモデルに対して精度の検証を行い、適切にモデルを選択する必要があります。また、各モデルにはハイパーパラメーターという構築を行う前にあらかじめ設定する必要のあるパラメータが存在するモデルもあり、ハイパーパラメーターの値によっても精度が変わってくるためチューニングが必要となります。

データ処理パイプラインの永続化

加えて、このようなモデルを構築する際の前処理を行い、データを入力するパイプラインは予測時にも同様に適用する必要があるため、永続化して予測時に呼び出せるようにしておくためのシステムが必要となります。

flow

ニフティクラウド Machine Learning について

ニフティクラウド Machine Learningは、前述の様な機械学習のモデル構築における課題を解決することに注力したサービスです。主な機能として、下記を提供しています。

  • 一部の前処理を行う機能の提供
  • モデルの選択とハイパーパラメーターのチューニングの自動化
  • 一連のパイプラインを利用した予測APIの提供

今回はこれらの機能を用いて予測モデルの構築を行ってみたいと思います。

予測モデルの構築

UCI Machine Learning Repositoryで公開されている乳がんの良悪性の予測を行うデータセットBreast Cancer Wisconsin (Diagnostic) Data Set(以下Breast Cancerデータセット)を利用して予測モデルを構築していきます。

データソースの登録

ニフティクラウド Machine Learningでデータを利用するためには、まずデータソースを登録する必要があります。データソースにはMySQLかニフティクラウド オブジェクトストレージ(以下オブジェクトストレージ)にアップロードされたCSVが対応しています。今回は前述のデータセットをCSVに変換して、オブジェクトストレージから利用することにします。また、実際に利用する際は必要ありませんが、後ほど予測機能を利用するためにあらかじめテスト用のデータを分けて登録しておきます。登録には下記の様にコントロールパネルからデータソースの登録を選択し、前述のアップロードしたCSVファイルを入力します。

モデルの登録

続いてモデルの登録を行います。モデルの登録には先ほど登録した学習用のデータソースと予測対象となるカラムを選択します。今回予測したい属性は良悪性のため良性の場合に1となるカラムであるbenignを選択します。

データの前処理

次に前処理の設定を行います。前処理の内容は欠損値補完、正規化、特徴抽出に対応しています。Breast Cancerデータセットは予測対象以外のカラムは実数値のため欠損値を平均値で補完し、平均0分散1で正規化します。

学習の開始

前処理の設定が終わったので学習を開始します。

学習が完了するとモデル一覧からスコアを確認することができます。評価指標のF値は再現率(陽性のデータのうち、正しく陽性と予測できた割合)と適合率(陽性と予測したうち、正しく予測できた割合)の調和平均になります。単純に予測の正解率を指標とすると正解ラベルに偏りがある場合に多いラベルを常に予測するモデルのスコアが良くなってしまうため、機械学習では上記のような指標を用いることが多いです。

データの予測

コントロールパネルからの予測

ステータスが学習済みになると予測APIが利用可能になります。実際に利用する場合はここで正解が分からないデータに対して予測を行いますが、今回はデータソースを登録する際に用意したテスト用のデータを利用します。UIから予測を行う場合はモデル構築の際に利用する場合と同様に登録済みのデータソースに対して予測値の出力を行います。

実際の値(左側)と予測した結果(右側)とを比較してみると、正しく分類できていることがわかります。

result

APIを用いた予測

APIを用いて予測することも可能です。APIはAWSのSignature V4互換のためPythonの場合は下記の様にboto/botocoreを利用してリクエストすることができます。

$ cat predict.py
import os
import sys
import json
import requests
from botocore.auth import SigV4Auth
from botocore.credentials import Credentials
from botocore.awsrequest import AWSRequest

endpoint = 'https://ml.api.cloud.nifty.com/'
req = AWSRequest(
    method='POST',
    headers={
        'x-amz-target': 'MachineLearning_20161025.Predict',
        'host': 'ml.api.cloud.nifty.com',
        'content-type': 'application/json',
    },
    data=json.dumps(json.load(open(sys.argv[1]))),
)
cred = Credentials(os.environ['ACCESS_KEY'], os.environ['SECRET_KEY'])
SigV4Auth(cred, 'machinelearning', 'east-2').add_auth(req)
print(requests.post(endpoint, headers=req.headers, data=req.body).text)
$ python predict.py payload.json | xmllint --format -
<?xml version="1.0" encoding="utf-8"?>
<PredictResponse>
  <predictedLabels>
    <predictedLabel>0</predictedLabel>
  </predictedLabels>
  <modelId>1</modelId>
</PredictResponse>

まとめ

ニフティクラウド Machine Learningを用いて、予測モデルの構築と予測を実施しました。
このようにCSVデータからカジュアルに予測モデルの構築が行えるサービスとなっておりますのでぜひご利用ください。
トライアルα版の申し込みはこちらから受付中です 。

プライベートLAN上のサーバーに複数の異なるネットワーク帯のIPを付与してみる

こんにちは。ニフティクラウドテクニカルアカウントエンジニアチームです。

今回はニフティクラウド上で実現するネットワーク構成のちょっとした工夫について記載したいと思います。具体的には、プライベートLANに所属するサーバーで複数の異なるネットワーク帯のIPを付与した構成の検証を行ってみます。以降に記載する実際の検証では次の構成を実現しています。

ニフティクラウドの仕様

ニフティクラウドでサーバーを作成するとグローバル側とプライベート側のNIC2つが割り当てられた状態で作成されます。その中でもプライベート側のNICは「プライベートLAN」オプションを使用し、プライベート側のNICをプライベートLANに適用することによりユーザー側で自由にIPアドレスを付与することが可能です。

お客様の要望

・各サーバーに複数のNIC(複数のIPアドレス)が欲しい。
・システム移行の案件で既存環境のままネットワークの体系を維持したい。

要望実現について

上記要望がありますが、ニフティクラウドの仕様ではどうしてもNICの数は増やすことはできません。。。
2021年1月現在、追加NICによりサーバーに追加のNICを付与することが可能となりました。追加NICの利用方法はブログ「NICを追加してみた(追加NIC機能)」も参考にしてください。
そのため本ブログはは追加NICの上限(1サーバーあたり6個など)を越えて利用したい場合の参考としてください。

しかし、プライベートLANに所属させたプライベート側のNICであれば自由にIPアドレスを付与することができるため、複数のIPアドレスを付与することが可能です。
FAQ:プライベートLAN利用時、1つのサーバーにプライベートIPアドレスは複数振れますか?

※共通グローバル、共通プライベートのNICには複数のIPアドレスの付与設定、staticのIPアドレスの設定は行わないでください。禁止事項に抵触します。 ニフティクラウド 禁止事項

ここまでは通常の仕様ページでわかるものとなります。以降にちょっとした工夫をご紹介します。

プライベートLAN作成時には以下のようにCIDRを指定します。 例:192.168.0.0/24

各仮想サーバーのプライベート側のIPアドレスも指定したCIDRにあったプライベートのIPアドレスを設定します。
例:192.168.0.5
複数のIPアドレスを設定する場合も同一のCIDRで設定する必要があると思われる方が多いかと思います。
例:192.168.0.5 192.168.0.6

実は各仮想サーバーのIPアドレスはプライベートLANで指定したCIDR通りにIPアドレスを設定することが必須という制限はありません。そのため以下のようなことが可能となります。
・プライベートLANで設定したCIDR
 192.168.0.0/24
・仮想サーバーAに設定するプライベートIPアドレス
 ①192.168.0.5/24
 ②10.0.0.5/8
・仮想サーバーBに設定するプライベートIPアドレス
 ①192.168.0.6/24
 ②10.0.0.6/8

①は業務LAN用、②は管理用、バックアップ用などでネットワーク帯を分けることが可能です。そのため既存システムのIPアドレス体系を維持できる可能性があります。
また、プライベートLAN作成時に指定できるプレフィックス長は16~28ですが手動で仮想的に指定する分にはプレフィックス長を8で付与することも可能です。

ただし、以下を注意点として認識しておく必要があります。

NIC自体は一つであることは変わらない バックアップでネットワーク流量を逼迫することを懸念としてネットワーク帯を分けたいなどの要望であればあまり意味を成さないことになります
十分にネットワーク構成を検討する必要がある ニフティクラウドのルーター、VPNゲートウェイなどはプライベートLANで設定したCIDR内のIPアドレスを指定する必要があります
プライベートLANは1本である あくまで1本のプライベートLAN内に複数のネットワークセグメントを設定している形になります

また、ルーターとVPNゲートウェイはOS上の操作は不可のため、複数IPを付与することはできません。そのため、プライベートLANで指定したCIDR以外のIPアドレスでほかのネットワーク帯のIPアドレスと通信するためにはルーティング用のサーバー構築を行うなどの検討が必要です。

検証実施

これまでの記載が実現可能か確認するために、以下図の構成で実際に検証してみました。

1つのプライベートLAN上で複数の仮想IP(各IP異なるセグメント)を作成しています。 以下表にそれぞれのセグメントを記載します。

セグメント ネットワーク帯 備考
セグメントA 192.168.0.0/24 実際にコントロールパネルより作成
セグメントB 10.0.0.0/8 -
セグメントC 172.16.0.0/16 -
セグメントD 192.168.2.0/24 -
セグメントE 192.168.3.0/24 共通セグメント
セグメントF 192.168.1.0/24 コントロールパネルより作成(セグメントAとルーターで接続)

複数のIPアドレスを付与する対象のOSとしては、Windows(サーバー①)とCentOS(サーバー②、③)どちらも検証しています。サーバー④はルーティング用のサーバーでCentOSで構築しています。仮想的に複数のネットワーク帯を実装するプライベートLAN(セグメントA(B~E))とは別のプライベートLAN(セグメントF)を作成し、プライベートLAN同士をルーターで接続して別のプライベートLANとの疎通も検証してみます。

各登場機器達のIPアドレスは以下で設定しています。

対象 IPアドレス 備考
サーバー① 10.0.0.2 B:10.0.0/8セグメントのIPアドレス
192.168.3.2 E:192.168.3.0/24のIPアドレス
サーバー② 172.16.0.2 C:172.16.0.0/16セグメントのIPアドレス
192.168.3.3 E:192.168.3.0/24のIPアドレス
サーバー③ 192.168.2.2 D:192.168.2.0/24セグメントのIPアドレス
192.168.3.4 E:192.168.3.0/24のIPアドレス
サーバー④ 192.168.0.2 A:192.168.0.0/24セグメントのIPアドレス
10.0.0.1 B:10.0.0.0/8セグメントのIPアドレス
172.16.0.1 C:172.16.0.0/16セグメントのIPアドレス
192.168.2.1 D:192.168.2.0/24セグメントのIPアドレス
192.168.3.1 E:192.168.3.0/24セグメントのIPアドレス
サーバー⑤ 192.168.1.2 F:192.168.1.0/24セグメントのIPアドレス
ルーター 192.168.0.1 A:192.168.0.0/24セグメントのIPアドレス
192.168.1.1 F:192.168.1.0/24セグメントのIPアドレス

本構成で各機器に設定したルーティング情報は以下で設定しています。

対象 デスティネーション ターゲット(ゲートウェイ) 備考
サーバー① 0.0.0.0/0 10.0.0.1 デフォルトゲートウェイで設定
サーバー② 0.0.0.0/0 172.16.0.1 デフォルトゲートウェイで設定
サーバー③ 0.0.0.0/0 192.168.2.1 デフォルトゲートウェイで設定
サーバー④ 192.168.1.0/24 192.168.0.1 route add コマンドで設定
サーバー⑤ 0.0.0.0/0 192.168.1.1 デフォルトゲートウェイで設定
ルーター 10.0.0.8/8 192.168.0.2
172.16.0.0/16 -
192.168.2.0/24 -
192.168.3.0/24 -

ここまでで今回必要な構成自体は完成しました。

最後に各登場機器間でそれぞれpingの疎通が可能かどうかのテストを実施したところ、すべて問題無く疎通が可能なことまで確認できました。
※各機器でニフティクラウドファイアウォールは適切に設定しています。

まとめ

本検証の通り、各仮想サーバーに複数の異なるネットワーク帯のIPアドレスを付与できることがわかります。既存のIPアドレスの体系を維持したい要件が強い場合には選択肢の1つになると考えられます。 実際に本検証内容を利用し、以下のような構成で実装されているお客様もいらっしゃいます(下図を参照)。

この構成ではセキュリティ面を鑑みて、WEB/AP層、DB層のネットワーク帯を分けた形になっています。具体的な通信フローは以下のようになります。
・ご利用者様はL7LB(L7ロードバランサー(Brocade Virtual Traffic Manager))にグローバル側からアクセス
・L7LBからWEB/APサーバー「192.168.1.0/24」のネットワーク帯のIPアドレスに対して負荷分散を行う
・WEB/APサーバーからDBサーバーへは「192.168.2.0/24」のネットワーク帯を利用して通信を行う

注意事項

本検証内容に関してはOS以上の動作となり、お客様責任で実施いただく範疇になります。そのため、実装をご検討いただく場合は十分に検討/設計/検証いただくようお願いします。
ブログ中にもいくつか記載していますが、注意事項/制約事項などが多くあるため、それらを鑑みてご利用いただければと思います。

【注意事項/制約事項(ブログ中に記載した注意事項の再記載を含む)】
・共通グローバル、共通プライベートのNICには複数のIPアドレスの付与設定、staticのIPアドレスの設定は行わないでください。禁止事項に抵触します。
・あくまで1本のプライベートLAN内に複数のネットワークセグメントを設定している形になります。
・上記のとおり、プライベートLAN自体はあくまで1本となります。コントロールパネルのネットワーク図上では作成時に指定したCIDRの情報のみ見える形になります。
・コントロールパネル上でサーバーのIPアドレスを確認しても複数設定したIPアドレスのうち1つのみ表示されている状況になります。
-設計書等で明確に管理しておくなどの運用が必要になります。
・構成によっては、ルーティング用のサーバーを別途構築するなどの対応が必要です。
・ニフティクラウドのルーター、VPNゲートウェイなどのネットワークサービスの設定は原則プライベートLANで設定されるCIDRのみに制限されます。またOSの操作はできないため複数IPアドレスを付与することはできません。具体的には以下制限があります。
-ルーターのDHCPの払い出しレンジはプライベートLANで設定されるCIDRのみに制限される
-VPNゲートウェイでL3VPN接続(IPSec)の場合、対向拠点から受け付けられる通信もプライベートLANで設定されるCIDRのみに制限される
-ルーター、VPNゲートウェイともにルートテーブルでnext hopで指定できるのはプライベートLANで設定されるCIDRのみに制限される

【その他】
・VPNゲートウェイやダイレクトポート(専用線・閉域網 接続サービス)などを利用して拠点と接続する構成の場合、ルーティングの設定などネットワーク構成がより複雑となることが想定され、事前に緻密な設計が必要になります。

上記に記載した注意事項/制約事項などを把握していただき、本構成を実現する必要があります。
使いやすさやネットワーク図上での見やすさなどを優先されるのであれば、通常通りにニフティクラウドのサービスに則った形で構成した方が良い可能性があります。

[2021年1月22日追記:現在では追加NICが利用できるようになっています。詳しくは下記の記事をご覧ください。] blog.pfs.nifcloud.com

faq.support.nifcloud.com

文系出身のIT初心者でも中国にサーバーが立てられる!?

はじめまして。文系大学出身で、まったくのクラウド初心者である新入社員です。 私はこれまでITと無縁の人生を送っており、ニフティクラウドどころかクラウドコンピューティングを利用したことがありません。 ニフティクラウドは「コンパネなどの使い勝手がいい」との評判を受けることがありますが、果たして自分のような右も左も分からない初心者(いわゆるド素人)にもサーバーを立てることができるでしょうか・・・。

今回は、私の所属部署で担当している方がいることもあり、中国にて展開しているパブリッククラウドサービス「鴻図雲」で初心者が中国に簡単にサーバーを作れるのかを試してみました。

china_pic1

「鴻図雲」とは?

鴻図雲(ホンツーユンと読みます)は、中国ビジネス展開に最適化した中国国内向けのパブリッククラウドサービスです。クララオンライン社が提供を行っていますが、ニフティが共同提供会社として参画し、ニフティクラウドの技術を採用しています。 > 鴻図雲

実際に操作してみた

以下の順で操作したいと思います。(ワクワク) 1.ログイン 2.ファイアウォールグループ作成 3.SSHキー作成 4.サーバー作成

1.ログイン

ログインは以下のような画面になります。私の場合、「既存IDですぐにログイン」。これぐらいはわかる!

china_pic2

2.ファイアウォールグループ作成

まず始めにセキュリティ対策として、ファイアウォールグループを作成します。 外部から攻撃にさらされないよう、通信をフィルタリングする「壁」が必要になるそうです。

左側のサービスメニューからファイアウォールを発見。選択後、「ファイアウォールグループ作成」をクリック。

china_pic3 china_pic4

「グループ名」を入力して、「ゾーン」で「china-11」を選択。 今回は「グループ名」に「ChinaTest(例)」と入力。入力後、「INルール設定へ」をクリック。

china_pic5

IN???OUT???わからないので解説してもらいました・・・。 INルール設定とは、サーバーにアクセスするためのルール設定のこと(外部からの攻撃を防ぐ「壁」に対して、自分が希望する位置に「穴」を作る作業らしいです。なるほど~)

「+追加」をクリック。 「プロトコル」はニフティクラウドの用途によって異なるため、利用目的から考えるのが良いそうです。例えば、お客様のグローバルIPアドレスを入れる場合は「SSH」を選択。基本はこの設定が必要!SSHについては後述します。

「接続元種別」は調べなくても「接続してくれるIPアドレス」を選択することで自動入力(いま自分が利用しているグローバルIPアドレスをいちいち調べる必要が無いから助かりました(汗))。

プロトコル」、「ポート」、「接続元種別」と「IPグループ・アドレス」を入力後、「OUTルール設定へ」をクリック。

china_pic6

OUTルールは初期設定のままにして、「サーバー選択へ」をクリック。 ※OUTルールを設定すると、ルール以外のOUT方向の通信がすべて拒否されるため注意が必要だそうです。

china_pic7

あれ!?ファイアウォールを適用するサーバーがない!?と一瞬思いましたが、まだ作成していませんでした(恥ずかしい・・・)。そのため、特に設定せずに「ルーター選択へ」をクリック。

china_pic8

ルーター選択は初期設定のままにして、「VPNゲートウェイ選択へ」をクリック。

VPNゲートウェイ選択も初期設定のまま、「確認へ」をクリック(恥ずかしながらVPNゲートウェイについてもわかりませんので、割愛します・・・)。

入力内容に間違えがないかを確認後、「作成する」をクリック。 「ChinaTest」のグループが作成されたことを確認(これでファイアフォールグループ完成や!)。

3.SSHキー作成

次にSSHキーの作成です。 SSHキーとは、不正アクセスを防ぐためのカギで、このカギを使ってサーバーと接続します。

ファイアウォールグループ作成時と同様、左メニューから「SSHキー」を選択後、SSHキーの作成をクリック。

china_pic9

SSHキー名(例:hongtucloud)」と「パスフレーズ」を入力し、「作成する」をクリック。SSHキー「hongtucloud」が追加されたことを確認し、pemファイルをローカルに保存。

基本的にローカルであれば何処に保存しても問題ないが、「デスクトップ」に保存するのはさすがに抵抗があったため、「マイドキュメント」に保存しました(これを開くと数字の羅列が出てきます。人によっては鍵のギザギザ具合が分かるらしいです。私にはわかりませんが・・・)。

china_pic10

4.サーバー作成

最後にサーバーの作成です。鴻図雲上の仮想サーバーですね。 左メニューの「サーバー」を選択後、「サーバー作成」をクリック。

china_pic11

利用するOSを選択します。今回は「CentOS 7.1 64bit Plain」を選択。 次に「ゾーン」で「china-11」を選択後、お好みのサーバータイプを選択。

china_pic12 china_pic13

サーバー名(例:ChinaWebTest)を入力し、「料金プラン」、「SSHキー」、「ファイアウォール」を選択(気づいてしまった!SSHキーとファイアウォールを先に作成した理由がココにあったことを!)。

ネットワークとスクリプトは初期設定値のままにして、「確認」をクリック(ここも割愛します・・・)。メモ欄は必ず入力する必要はありませんが、複数のサーバーを立てる場合の用途や説明などに活用できます(例:私の初サーバー など)。

china_pic14

入力内容に誤りがないことを確認して、問題がなければ「作成する」をクリック。 IPアドレスとしてお控えください(SSHでログインするときにIPアドレスが必要だそうです!)。

サーバーが作成されたことが確認し、起動できれば、無事に完成! china_pic15

サ、サーバーの立ち上げができている・・・。サーバーの中にはいるところまでデキターーー!

%e6%96%b0%e3%82%b3%e3%83%b3%e3%82%bd%e3%83%bc%e3%83%ab%e8%b5%b7%e5%8b%95%e7%94%bb%e5%83%8f

まとめ

・約4分でコンパネログインからサーバーの作成までできた。 ・コントロールパネルは直感的に操作できるため、IT初心者でも簡単にサーバーが立てられることがわかった。

クラウドの感想

クラウド初心者のため、サーバーを立てるのに一苦労するかと思いきや、意外と簡単だった。 ・「INルール設定」では色々と調べる必要があったが、その他で理解に苦しむことはなかった(まだわからないことはありますが・・・)。 ・コントロールパネルの操作に関しても、各項目の作成手順がほとんど変わらなかったため、とても分かりやすい構成であることがわかった。 ・また、すべてのオプションや項目を理解しなくてもサーバーを立てられる(理解はした方がよいと怒られました・・・)。 ・注意を払う必要がある設定には、注意書きが記載されているため、誤った設定をせずに済んだ。 ・ここまでシンプルで使いやすいクラウドが他にあるだろうか!(初クラウドだけど・・(笑)) ・中国国内に向けてビジネスをお考えでサーバーなどの用意が必要な場合、準備が早くて直感的に操作できる鴻図雲がオススメです。 ・無料でお試し可能です!鴻図雲の詳細は下記のサイトからご覧ください。 > 鴻図雲

VPNゲートウェイでVTIを使ったVPN接続方法

みなさんこんにちは!ニフティの蓮沼です。 2年ぶりのユーザブログ投稿になります。もう3年目になりました。 普段はニフティクラウドのVPNゲートウェイやルーターの開発、運用などを行っています。

今回は多くのお客様からお問い合わせをいただいている、ニフティクラウドのVPNゲートウェイの「IPsec VTI」機能について機能概要、構成、設定方法についてご紹介したいと思います!

VTIとは?

VTIとはVirtual Tunnnel Interfaceの略で、VPNゲートウェイのVPN接続先を対象としたルーティング設定ができる機能です。この機能は2016年4月13日にルーター・VPNゲートウェイ 機能エンハンスで追加されました。 通常のIPsec接続では、ニフティクラウドのプライベートLANから対向機器LAN側IPアドレス帯、下の図では192.168.0.0/24のみ通信ができます。これはVPNゲートウェイの仕様になります。

VTIでの接続であればVPN接続先をInterfaceとして認識するため、VTIに対してルーティング設定を行うことが可能になります。VTIでは192.168.0.0/24 , 172.16.0.0/24に対しても通信ができます。

VTIが必要な構成例

ニフティクラウドにVPN接続するお客様拠点の異なるネットワークが、複数ある場合には原則VTIを利用する必要があります。 ※お客様拠点のVPN機器に接続されるネットワークが192.168.0.0/24 , 192.168.1.0/24と隣り合っている場合には、対向機器LAN側IPアドレス帯を192.168.0.0/23と設定する事で、2つのネットワークに対して通信が可能になる場合もあります。

VTIの設定方法

では構成例がわかったところで、実際に以下のネットワークを構築してみます。

ニフティクラウド上のサーバーとお客様環境のサーバー間でping疎通できるように構築していきます。 今回ニフティクラウドをeast-21 , お客様環境は擬似環境としてニフティクラウドのwest-12で構築を行っています。

各サーバー、ネットワークの作成

構成図の通り、各サーバーやネットワークをコンパネから作成していきます。

east-21(ニフティクラウド環境)

west-12(擬似お客様環境)

VPNゲートウェイにはバージョンがあります。過去VTIに関する不具合や仕様変更がありましたので、最新のバージョンか確認してください。 今回、執筆時点の最新バージョンであるv2.3を利用します。

カスタマーゲートウェイの作成

次にVPN接続を行うためのカスタマーゲートウェイを作成します。 以下はeast-21(ニフティクラウド環境)で設定する、対向拠点側west-12(擬似お客様環境)の設定です。ここではIPアドレス124.24.43.50を設定しています。

ポイントは以下2点です。

  • 対向機器LAN側IPアドレス帯にはVTIの場合でもIPsecと同様に、対向機器のLANネットワークアドレス帯を指定します。
  • 対向機器LAN側IPアドレスはVPNゲートウェイに設定される対向側IKE IDです。VPNゲートウェイはデフォルトで対向側IKE IDにグローバルIPアドレスである「対向機器IPアドレス」を利用するため、VPNゲートウェイ同士の接続の場合は空欄にします。接続する対向機器のIKE IDがプライベートIPを利用する場合には設定が必要です。

同様にwest-12(擬似お客様環境)でも、対向拠点側east-21(ニフティクラウド環境)のカスタマーゲートウェイを作成します。

VTIでのVPNコネクションの作成

それではVTIでVPNコネクションを作成し、VPN接続を行います。 以下はeast-21(ニフティクラウド環境)のVPNコネクションの作成画面です。

VTIの場合、接続方式で「VTI / IPsec」を選択します。

同様にwest-12(擬似お客様環境)でもVPNコネクションを作成します。 以下の様にコネクションステータスが接続済みとなればIPsec SAが確立された事を意味し、VPN接続が確立された状態となります。

east-21(ニフティクラウド環境)

west-12(擬似お客様環境)

もしVPN接続ができていなかったら

ニフティクラウドのVPNゲートウェイにはログ機能があります。このログからお客様の機器設定ミスなど接続できない原因を切り分ける事が可能です。 お客様はエラー番号から、エラー内容、解決方法を参照しトラブルシュートする事が可能になっています。とても便利な機能ですので「VPN接続できない!」という時にはぜひご活用ください!

ルートテーブルの設定

VTIでのVPN接続はできましたので、次にVPNゲートウェイに対してルートテーブルの設定を行います。まずVTIのVPNコネクションを作成すると、自動的にVPNゲートウェイに以下の様なルートテーブルの設定がされます。

このためVTIのVPN接続が確立された直後ではニフティクラウドの「10.0.0.0/24」とお客様環境の「192.168.0.0/24」のネットワーク帯のみ疎通が出来る状態になっています。 「10.0.0.0/24」と「172.16.0.0/24」のネットワーク間で疎通できるように以下のルートテーブルを作成します。

east-21(ニフティクラウド環境) , west-12(擬似お客様環境)のVPNゲートウェイに設定するルートテーブル

作成後VPNゲートウェイの操作から、「ルートテーブル設定変更」でルートテーブルを変更します。

ここでポイントなのが、VPNゲートウェイに設定するルートテーブルは「172.16.0.0/24」のみという事です。VTIのVPNコネクションが設定されているVPNゲートウェイは、設定されるルーテーブルに自動的にVTIのルールを追加します。このため今回設定するルートテーブルは「172.16.0.0/24」のみのルールとなります。

また疎通確認のために、west-12(擬似お客様環境)のルーターのデフォルトゲートウェイの設定も行っておきます。

west-12(擬似お客様環境)のルーターに設定するルートテーブル

疎通確認

以上でVTIのVPN接続、ルーティング設定が完了しました。 さっそく172.16.0.0.100(擬似お客様環境)のサーバーから10.0.0.100(ニフティクラウド)のサーバーにping疎通してみます。 pingコマンドの前に、各サーバーのルーティング設定を行います。

10.0.0.100(ニフティクラウド)のサーバー CentOS 7.1
[root@localhost ~]# route add -net 192.168.0.0/24 gw 10.0.0.1
[root@localhost ~]# route add -net 172.16.0.0/24 gw 10.0.0.1
[root@localhost ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         27.133.232.1    0.0.0.0         UG    100    0        0 ens160
10.0.0.0        0.0.0.0         255.0.0.0       U     0      0        0 ens192
27.133.232.0    0.0.0.0         255.255.248.0   U     100    0        0 ens160
172.16.0.0      10.0.0.1        255.255.255.0   UG    0      0        0 ens192
192.168.0.0     10.0.0.1        255.255.255.0   UG    0      0        0 ens192

172.16.0.0.100(擬似お客様環境)のサーバー Microsoft Windows Server 2012 R2
PS C:\Windows\system32&gt; route add 192.168.0.0 mask 255.255.255.0 172.16.0.254
 OK!
PS C:\Windows\system32&gt; route add 10.0.0.0 mask 255.255.255.0 172.16.0.254
 OK!
PS C:\Windows\system32&gt;

172.16.0.0.100(擬似お客様環境)のサーバーからpingを実行します。

PS C:\Windows\system32&gt; ping 10.0.0.100 -t

10.0.0.100 に ping を送信しています 32 バイトのデータ:
10.0.0.100 からの応答: バイト数 =32 時間 =10ms TTL=61
10.0.0.100 からの応答: バイト数 =32 時間 =10ms TTL=61
10.0.0.100 からの応答: バイト数 =32 時間 =10ms TTL=61

10.0.0.100(ニフティクラウド)のサーバーのtcpdump

[root@localhost ~]# tcpdump  -n -i ens192 icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens192, link-type EN10MB (Ethernet), capture size 65535 bytes
17:38:36.027467 IP 172.16.0.100 &gt; 10.0.0.100: ICMP echo request, id 1, seq 24, length 40
17:38:36.027498 IP 10.0.0.100 &gt; 172.16.0.100: ICMP echo reply, id 1, seq 24, length 40
17:38:37.043041 IP 172.16.0.100 &gt; 10.0.0.100: ICMP echo request, id 1, seq 25, length 40
17:38:37.043066 IP 10.0.0.100 &gt; 172.16.0.100: ICMP echo reply, id 1, seq 25, length 40
17:38:38.058701 IP 172.16.0.100 &gt; 10.0.0.100: ICMP echo request, id 1, seq 26, length 40
17:38:38.058731 IP 10.0.0.100 &gt; 172.16.0.100: ICMP echo reply, id 1, seq 26, length 40
^C
6 packets captured
6 packets received by filter
0 packets dropped by kernel

無事VPNを介して疎通確認ができました!

まとめ

今回VTIを使ったVPN接続の要件、一連の設定内容をご紹介しました。
VTIのVPN接続によりお客様の既存のネットワークを維持しながら、ニフティクラウドへのセキュアな接続が可能です。
またVPNゲートウェイのログ機能により、VPN接続が出来ない原因をトラブルシュートできるなどユーザーフレンドリーなサービスになっています。
既存のシステムをクラウドに接続する事で柔軟に拡張する事が可能ですので、ぜひご活用ください!