ニフクラ ブログ

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

【シンプルVPN】RHEL6.7をVPNクライアントとしてニフクラからオンプレに接続してみる

こんにちは、ニフティクラウド シンプルVPNチームです。 今回は、シンプルVPNのリモート接続サービスを用いて、RHEL 6.7 をサービスアダプターのあるオンプレミス環境にVPN接続してみたいと思います。

はじめに

シンプルVPN リモート接続サービス とは、サービスアダプターというVPN専用機器を用いることで、拠点と遠隔地を簡単に接続することができるサービスです。 VPNルーターやVPNサーバーを用意する必要もなく、VPNに関する知識がほとんどない方でも簡単にVPNを構築することができてしまいます。 従来はPCやモバイル端末などから拠点へのVPN接続が可能でしたが、2017年6月27日に、ニフティクラウドサーバー(Windows Server 2012 R2/RDS、Ubuntu 16.04、RHEL 6.7)からもVPN接続が可能になりました。 今回はRHEL 6.7 をVPNクライアントとしてニフティクラウド(以降ニフクラ)からVPN接続してみたいと思います(図1↓)。

図1. おおまかな構成イメージ 図1. おおまかな構成イメージ

前提

本ブログ記事では、主に以下のような方を対象としています。

  • Linuxの基本操作ができる方
  • 簡単安価にオンプレ環境とニフクラ環境をVPN接続したい方

シンプルVPN利用中であれば数分で拠点とサーバー間のVPN接続が可能になります。 まだ利用中でなくとも、基本的な部分は一般的なVPNクライアントの構築手順と変わらないので、そちらにご興味がある方も是非ご一読ください。

RHEL 6.7 VPN接続設定

シンプルVPNリモート接続サービスでは、L2TP/IPsecでVPN接続を行いますので、今回は strongSwan と xl2tpd というミドルウェア(OSS)を用いて、L2TP/IPsec を実現します。 ということで、まずこの2つをインストールします。

# rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
# yum -y install strongswan-5.4.0-2.el6.x86_64
# yum -y install xl2tpd-1.3.8-1.el6.x86_64

最初のコマンドはEPELリポジトリをインストールしています。これは yum で strongSwan と xl2tpd をインストールするためのものと考えてください。 インストールが完了したら、それぞれの設定をしていきましょう。

strongSwan 設定

strongSwan は IPsec接続を実現しますので、このセクションでは IPsec に関する設定をしていきます。

ipsec.conf 編集

まずは /etc/strongswan/ipsec.conf なる IPsec の設定ファイルを編集します。 とりあえず安全のためバックアップを取っておきます。

# cp -ip /etc/strongswan/ipsec.conf /etc/strongswan/ipsec.conf.`date +%Y%m%d`

実際に編集していきます。

# vi /etc/strongswan/ipsec.conf

vi コマンドでファイルを開き、以下を最後に追加します。

conn %default
    ikelifetime=60m
    keylife=20m
    rekeymargin=3m
    authby=secret
    rekey=no
    keyingtries=3
    type=transport
    keyexchange=ikev1
    left=%defaultroute
    leftprotoport=17/1701
    rightprotoport=17/1701
    auto=add
    ike=3des-sha1-modp1536
    esp=3des-sha1

conn {ipsec:任意の名前}
    right={接続先IPアドレス}

{ipsec:任意の名前}にはお好きな名前を入力してください。 後々の手順でこの名前を指定しますので、メモを取っておくと良いでしょう。 {接続先IPアドレス}については、ニフクラコンパネから、リモート接続サービスの設定画面(図2参照)を開き、赤枠の部分のFODNをIPアドレスにして入力してください。 図2. 接続先アドレスの参照 図2. 接続先アドレスの参照 また、FQDNからIPアドレスへの変換は、ここから確認できます。 ※nifty法人IDとパスワードでログインする必要があります。 以降{接続先IPアドレス}とあったら同じものを入力してOKです。

ipsec.secrets 新規作成

次に、/etc/strongswan/ipsec.secrets というファイルを作成します。

# vi /etc/strongswan/ipsec.secrets

このファイルには、IPsec接続に使う「事前共有キー」というものを書いておきます。 「secrets」というファイルには他人に公開すべきでない情報が入るのですね。

{接続先IPアドレス} %any : PSK "{事前共有キー}"

{事前共有キー}は、{接続先IPアドレス}と同じ画面に書いてあります(図3参照)ので、これをそのまま書いちゃいます。 図3. 事前共有キーの参照 図3. 事前共有キーの参照 これで strongSwanの設定は終わりです。

xl2tpd 設定

続いて xl2tpd の設定をしていきます。 xl2tpd はその名の通りL2TPを実現するOSSですね。

xl2tpd.conf 編集

最初に /etc/xl2tpd/xl2tpd.conf なる設定ファイルを編集します。 ipsec.conf 編集と同じようにバックアップを取ってから vi で開きます。

# cp -ip /etc/xl2tpd/xl2tpd.conf /etc/xl2tpd/xl2tpd.conf.`date +%Y%m%d`
# vi /etc/xl2tpd/xl2tpd.conf

まずは、以下のように[lns default]の配下にある行をすべて";"でコメントアウトします。

[lns default]
;ip range = 192.168.1.128-192.168.1.254
;local ip = 192.168.1.99
;require chap = yes
;refuse pap = yes
;require authentication = yes
;name = LinuxVPNserver
;ppp debug = yes
;pppoptfile = /etc/ppp/options.xl2tpd
;length bit = yes

そしたら、ファイルの末尾に以下を追加します。

[lac {xl2tpd:任意の名前}]
lns = {接続先IPアドレス}
require chap = yes
refuse pap = no
require authentication = yes
ppp debug = yes
pppoptfile = /etc/ppp/options.{ppp:任意のファイル名}
length bit = yes

{xl2tpd:任意の名前}と{任意のファイル名}にはお好きな名前を設定してください。 この後すぐ使いますので、覚えるかメモしておきましょう。

options.{ppp:任意のファイル名} 編集

次に、pppの設定ファイルを編集していきます。 1つ前の手順(xl2tpd の設定ファイルの編集)で、以下を設定しましたが、 pppoptfile = /etc/ppp/options.{ppp:任意のファイル名} これがpppの設定ファイルになっていますので、編集します。

# vi /etc/ppp/options.{ppp:任意のファイル名}

以下をファイルの最後に追加してください。

name {リモート接続アカウント名}
ipcp-accept-local
ipcp-accept-remote
netmask 255.255.255.0
noauth
crtscts
mtu 1410
mru 1410
defaultroute
refuse-chap
lock
proxyarp
ipparam monitor
logfile /var/log/xl2tpd/{log:任意のファイル名}
refuse-chap

{リモート接続アカウント名}も、{接続先IPアドレス}などと同じ画面から確認できます(↓図)。 図4. リモート接続アカウント名の参照 図4. リモート接続アカウント名の参照

まだアカウントがない場合は、「リモート接続アカウント追加」というボタンからポチッと作っちゃってください(月額1000円/アカウントなので作りすぎにご注意!) また、{log:任意のファイル名}には任意のファイル名を入力してください。ログファイルのディレクトリがまだないので、ここでついでに作成しておきます。

# mkdir /var/log/xl2tpd

pap-secrets 編集

ところで、{リモート接続アカウント名}に対するパスワードもどこかのファイルに書いておく必要があります。 というわけで、/etc/ppp/pap-secrets なるファイルを開いてそこに書きます。

# vi /etc/ppp/pap-secrets

# client server secret IP addresses と書かれた行があるので、その下に以下のように1行追加します。

# client server secret IP addressses
"{リモート接続アカウント名}" "{リモート接続アカウント名}" "{リモート接続パスワード}" *

{リモート接続アカウント名}は先ほど確認したとおりで、{リモート接続パスワード}は対応するパスワードになります。

ip-up.local 新規作成

最後に、/etc/ppp/ip-up.local なるファイルを作成します。 これは、ppp接続が確立したのちに実行される bashファイルです。 ルーティング テーブルにppp接続の経路情報を追加するための処理を書き込んでおきます。 vi コマンドでファイルを作成して、

# vi /etc/ppp/ip-up.local

以下を追加します。

#!/bin/bash
case "$6" in
monitor)
sbin/route add -net ${4%.*}.0 netmask 255.255.255.0 gw $4
echo
;;
esac

ここで注意なのですが、以下のネットマスクの設定の部分、 netmask 255.255.255.0 これは、ご自身のローカルネットワークのサブネットマスク値を設定してください。

そして、作成したファイルを実行可能にしておきます。

# chmod 755 /etc/ppp/ip-up.local

これにて xl2tpd の設定も終了となります、お疲れ様です。

接続開始

ここまでで接続設定は全て終了したので、接続を開始していきます。

strongSwan, xl2tpd 起動

まずは strongSwan と xl2tpd を起動して行きましょう。 strongSwan を以下のコマンドで起動します。

# chkconfig strongswan on
# chkconfig --list strongswan
# service strongswan start

2行目の実行で以下の出力が出ることを確認してください。

strongswan 0:off 1:off 2:on 3:on 4:on 5:on 6:off

次に同じようにして xl2tpd を起動します。

# chkconfig xl2tpd on
# chkconfig --list xl2tpd
# service xl2tpd start

2行目の実行で以下の出力が出ることを確認します。

xl2tpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

L2TP/IPsec 接続確立

2つとも起動したらいよいよVPN接続を開始しましょう。 ここでようやくメモしておいた名前を使います。 以下のコマンドで IPsec 接続を確立して、

# strongswan up {ipsec:任意の名前}

出力の末尾に以下があることを確認します。

connection '{ipsec:任意の名前}' established successfully

そして、L2TP接続を以下のコマンドで確立します。

# xl2tpd-control connect {xl2tpd:任意の名前}

↑このコマンド、何故かこの xl2tpd のバージョンのデフォルトだと標準出力がないので、コマンドが成功したかどうかを一応確認しておきます(以前のバージョンだと 00 OK って言ってくれたのですが...)。

# echo $?

0と表示されれば、L2TP接続もOKです。 これでL2TP/IPsec接続、つまり、VPN接続が確立したはずです!

動作確認

最後に、本当にローカルネットワークとVPN接続されているのか確認しておきましょう。

まずは、pppインターフェースが作成されているかを確認してみます。

# ip a | grep ppp

以下の出力が確認できるはずです。

11: ppp0:  mtu 1410 qdisc pfifo_fast state UNKNOWN qlen 3
link/ppp
inet 192.168.11.103 peer 1.0.0.1/32 scope global ppp0

ここで、以下の部分はDHCPサーバーが ppp0 NIC に割り当てたローカルIPアドレスですので、一致している必要はありません。

inet 192.168.11.103

次に、route経路が作成されたかを確認してみます。

# route -n

出力された経路情報の中に、以下のような行があることが確認できるはずです。

192.168.11.0 192.168.11.103 255.255.255.0 UG 0 0 0 ppp0

目的地(オンプレミス環境)のネットワークが 192.168.11.0/24 で、GW(ppp0 NIC)のIPアドレスが 192.168.11.103 である場合の出力例ですね。

以上の2つの確認がとれれば基本的にOKですが、最後にダメ押しで ping を飛ばして確認しておきましょう。

# ping {オンプレミス環境内のルーターやホストのIPアドレス}

レスポンスがあれば確実にVPN接続されていることになりますね~。

最後に

本ブログ記事では、シンプルVPNのリモート接続サービスを使って、ニフクラサーバー環境の RHEL 6.7 をサービスアダプターのあるオンプレミス環境にVPN接続してみました。 これでクラウドとオンプレミス環境間でファイルのやり取りや遠隔メンテナンスなどが安全にできるようになります。 簡単でしたよね?

最後まで読んでいただきありがとうございました!