GMOクラウド VPS 活用ガイド

サポートトップ » GMOクラウド VPS トップ » 活用ガイド

OpenVPNのインストールと設定方法

ご注意

  • IPアドレスは、OpenVPNのデフォルト設定をご利用ください。VPSコンソール上で設定したローカルおよびグローバルIPアドレスはご利用にならないよう、ご注意ください。
  • ブリッジモードはご利用できません。ルーティングモードで構築してください。
  • Windowsでサーバ動作をさせる場合、各種証明書の作成ができないため、サーバとクライアントそれぞれ1台づつの接続(静的鍵接続)しか行えません。複数のクライアントで利用したい場合には、caファイルを使った証明書をLinuxサーバ等で作成する必要があります。

設定環境について

下記の環境で、OpenVPNを設定した場合の方法をご紹介します。

サーバー

OS…Linux、Windows
LAMP設定を行ったサーバー上に、OpenVPNをインストールします。

クライアント

OS…Windows
複数のPCから接続ができます。
※サーバーにWindowsを選択した場合は、基本的に1サーバーに対し1クライアントの接続となります。(但し、Linuxサーバー等でcaファイルを使った証明書を作成し、利用することで、複数クライアントの接続も可能です。)

1:OpenVPNをLinuxサーバーで設定する

LinuxサーバーでOpneVPNを導入するには下記の手順で行います。

「パッケージの取得」
   ↓
「インストール」
   ↓
「キー(証明書)の作成」
   ↓
「設定」
1-1、Linuxサーバについて

今回OpenVPNをインストールするLinuxサーバは以下の仕様で設定しました。
GMOクラウド VPSのOSテンプレートをそのまま利用し構築を行いました。

CentOS 6.0 LAMP x64

1-2、パッケージの取得

パッケージの取得には2通りの方法があります。

  • rpmパッケージを直接ftpサイト等からダウンロードする方法。
    …安定したバージョンを長く使いたいという実運用の方におすすめです。
  • rpmfoge等のパッケージサイトが提供するリポジトリをパッケージシステムに登録し、yumコマンド等で直接インストールするようにする方法。
    …とにかく新しいバージョンを試したいという検証用におすすめです。

今回、入手したrpmパッケージのバージョンは以下のとおり。
OpenVPN本体:openvpn-2.2.1-1
依存パッケージその1:lzo-2.03-3.1
依存パッケージその2:pkcs11-helper-1.07-5

ダウンロード:

パッケージをダウンロードするためにwgetをインストールします。
yum -y install wget
wget ftp://ftp.kddlabs.co.jp/pub/Linux/packages/fedora/epel/6/x86_64/openvpn-2.2.1-1.el6.x86_64.rpm
wget ftp://ftp.kddlabs.co.jp/pub/Linux/packages/fedora/epel/6/x86_64/pkcs11-helper-1.07-5.el6.x86_64.rpm
lzoライブラリは、yumで取得できるためyumでインストールします。
yum install lzo.x86_64
(今回はRedHat系のfedoraリポジトリを使っています。)

1-3、インストール

rpmコマンドにてインストールを行います。

rpm -ivh openvpn-2.2.1-1.el6.x86_64.rpm pkcs11-helper-1.07-5.el6.x86_64.rpm

1-4、キーの作成:

OpenVPNで使用する各種証明書(キーファイル)の作成を行います。
OpenVPNはインストールすると、証明書発行用のユーティリティーも一緒にインストールされるため、それの簡単な設定から行います。

  • 1. ユーティリティーのコピー
    インストールディレクトリから、一般的に利用しやすい/etc/openvpnディレクトリへツール類を移動します。

cp -r /usr/share/openvpn/easy-rsa/2.0/ /etc/openvpn/easy-rsa

  • 2. 設定の変更
    証明書に書き込む所属情報などは設定ファイルを編集しておくと、毎回入力する必要が無いため、クライアントが多いような場合は編集しておくと便利です。
    (ここは絶対に必要な工程ではありません。)

vi /etc/openvpn/easy-rsa/vars

ファイルの最後あたりに

export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="me@myhost.mydomain"

とあるので、以下のように変更します。

export KEY_COUNTRY="JP" ← サーバ所在地(国名)を指定(例:JP)
export KEY_PROVINCE="Tokyo" ← サーバ所在地(都道府県名)を指定
export KEY_CITY="Shibuya-ku" ← サーバ所在地(市区町村名)を指定
export KEY_ORG="gmocloud.com" ← サーバ名を指定
export KEY_EMAIL="vpn-root@gmocloud.com" ← サーバ管理者メールアドレスを指定

(上記は一例です、お客さまの情報に応じて変更してください。)

  • 3. キーの作成
    キーの作成では、サーバの証明書、クライアントPCで使用するクライアント証明書、OpenVPNで使用する証明書の3種類の作成を行います。

準備:
設定を有効にするため、以下のコマンドを実行します。

cd /etc/openvpn/easy-rsa
mv openssl-1.0.0.cnf openssl.cnf
. ./vars

これは以下のコマンドと一緒です。
先頭の“.”がコマンドですので忘れないでください。

source ./vars

でも同じ効果があります。

実行後ちょっとしたメッセージが出ますがエラーではありません。

次に一旦、キーファイルの出力先を初期化します。今回はインストール直後のため、実行しなくても問題ありませんが、念のため実行します。

./clean-all

準備の最後にca(認証局)証明書を作成します。

./build-ca ← CA証明書・秘密鍵作成
Generating a 1024 bit RSA private key
.......++++++
......++++++
writing new private key to 'ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [JP]: ← ENTER
State or Province Name (full name) [Tokyo]: ← ENTER
Locality Name (eg, city) [Shibuta-ku]: ← ENTER
Organization Name (eg, company) [gmocloud.com]: ← ENTER
Organizational Unit Name (eg, section) []: ← ENTER
Common Name (eg, your name or your server's hostname) [gmocloud.com CA]: ← ENTER
Name []: ← ENTER
Email Address [vpn-root@gmocloud.com]: ← ENTER

設定を変更している場合は上のように変更した情報が予め入力された状態となりますので、必要に応じて変更します。(設定を変更していない場合もできるだけ自分の組織に合ったものに変更する方が望ましい)

ファイルができたか確認しておきます。

ls keys/

ca.crt ca.keyの2つのファイルがあること。(他にもファイルができていますが重要なのはこの2ファイルのみです。)

サーバ証明書:

  • サーバ証明書を作成します

./build-key-server server

以下のように追加情報の入力を促されるため、入力していきます。

Generating a 1024 bit RSA private key
...++++++
.....................++++++
writing new private key to 'server.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [JP]: ← ENTER
State or Province Name (full name) [Tokyo]: ← ENTER
Locality Name (eg, city) [Shibuya-ku]: ← ENTER
Organization Name (eg, company) [gmocloud.com]: ← ENTER
Organizational Unit Name (eg, section) []:← ENTER
Common Name (eg, your name or your server's hostname) [server]:miya-vpn-Linux ← ホスト名を入力しENTER
Name []:← ENTER
Email Address [vpn-root@gmocloud.com]: ← ENTER

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:← ENTER
An optional company name []:← ENTER
Using configuration from /etc/openvpn/easy-rsa/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'JP'
stateOrProvinceName :PRINTABLE:'Tokyo'
localityName :PRINTABLE:'Shibuya-ku'
organizationName :PRINTABLE:'gmocloud.com'
commonName :PRINTABLE:'miya-vpn-Linux'
emailAddress :IA5STRING:'vpn-root@gmocloud.com'
Certificate is to be certified until May 15 09:21:19 2022 GMT (3650 days)
Sign the certificate? [y/n]:y← yを入力しENTER


1 out of 1 certificate requests certified, commit? [y/n]y← yを入力しENTER
Write out database with 1 new entries
Data Base Updated

ここでも設定ファイルを変更した場合、初期値が入力されているため、必要な部分のみ入力を行います。

ファイルができているか確認します。

ls keys/

server.crt server.csr server.keyの3ファイルができていること。

OpenVPNの使う各種証明書、キーファイルの作成:

  • 鍵交換の際に使用される暗号キーファイル(dhファイル)を作成します。

./build-dh

しばらく“.”や“+”の文字がたくさん出ますが、しばらくすると、完了します。

ファイルができているか確認します。

ls keys/

dh1024.pemができていること。

  • 最後にTLSキーファイルを作成します。

openvpn --genkey --secret /etc/openvpn/ta.key

TLSキーファイルは直接/etc/openvpnに作成します。

ファイルができているか確認します。

ls ../

ta.keyがあること。

  • 作成したキーを移動します。

OpenVPNの設定ファイルを記述する際にわかりやすいように、各キーファイルを移動します。
(設定ファイルにpath込みで記述する場合は移動は必要ありませんが、今回の活用術では設定ファイルと同じ場所に置く形式とします。)

cp keys/ca.crt /etc/openvpn/
cp keys/server.crt /etc/openvpn/
cp keys/server.key /etc/openvpn/
cp keys/dh1024.pem /etc/openvpn/

ユーザー(クライアント)キーファイル(証明書)の作成:
クライアントのキーファイルもサーバ側で作成します。

./build-key-pass client_pc1
Generating a 1024 bit RSA private key
...................++++++
.........++++++
writing new private key to 'client_pc1.key'
Enter PEM pass phrase: ← パスフレーズを入力ENTER
Verifying - Enter PEM pass phrase: ← もう一度入力ENTER
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [JP]: ← ENTER
State or Province Name (full name) [Tokyo]: ← ENTER
Locality Name (eg, city) [Shibuya-ku]: ← ENTER
Organization Name (eg, company) [gmocloud.com]: ← ENTER
Organizational Unit Name (eg, section) []:← ENTER
Common Name (eg, your name or your server's hostname) [client_pc1]: ← ENTER
Name []:pc1← 何か識別できるものを入力しENTER(必須ではありません)
Email Address [vpn-root@gmocloud.com]:client1@gmocloud.com← ENTER

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:← ENTER
An optional company name []:← ENTER
Using configuration from /etc/openvpn/easy-rsa/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'JP'
stateOrProvinceName :PRINTABLE:'Tokyo'
localityName :PRINTABLE:'Shibuya-ku'
organizationName :PRINTABLE:'gmocloud.com'
commonName :T61STRING:'client_pc1'
name :PRINTABLE:'pc1'
emailAddress :IA5STRING:'client1@gmocloud.com'
Certificate is to be certified until May 15 10:25:47 2022 GMT (3650 days)
Sign the certificate? [y/n]:y← yを入力しENTER


1 out of 1 certificate requests certified, commit? [y/n]y← yを入力しENTER
Write out database with 1 new entries
Data Base Updated

ファイルができているか確認します。

ls keys/

client_pc1.crt client_pc1.key client_pc1.csrの3ファイルができていること。
また、複数のクライアントキーファイルを作成する場合は、コマンド実行時の引数につける名前は必ず一意のものにするようにします。

1-5、設定

最後にOpenVPNのサーバとしての設定を行います。

設定ファイルのサンプル(元)をコピーします。

cp /usr/share/doc/openvpn-2.2.1/sample-config-files/server.conf /etc/openvpn/

設定ファイルを編集する。

vi /etc/openvpn/server.conf

英文コメントでパラメーターの説明がありますが、ここでは変更点だけに絞って記載します。

tls-auth ta.key 0 # This file is secret← 先頭の“;”を取って有効化します

user nobody← 先頭の“;”を取って有効化します
group nobody← 先頭の“;”を取って有効化します

変更したらセーブしてエディタを終了します。

以上でサーバ側の設定は完了となります。

1-6、サーバの起動

OpenVPNサーバとして起動させるには以下のコマンドを実行します。

service openvpn start

OKの表示が出ない場合は設定ファイルの間違いがないかを見直し、それでもわからない場合は設定ファイル中の以下の部分

;log         openvpn.log

の先頭の“;”を取り有効化して、再度起動し、エラーメッセージ等を見て修正を行います。

1-7、サーバの停止

OpenVPNサービスの停止は以下のコマンドを実行します。

service openvpn stop

1-8、その他

サーバ起動時の自動実行のための設定等については通常のサービスと同じです。ここでは割愛します。

2:OpenVPNをWindowsサーバーで設定する

ご注意

Windowsでサーバ動作をさせる場合、各種証明書の作成ができないため、サーバとクライアントそれぞれ1台づつの接続(静的鍵接続)しか行えません。複数のクライアントで利用したい場合には、caファイルを使った証明書をLinuxサーバ等で作成する必要があります。(詳細は、コラム参照

WindowsサーバへのOpenVPNのインストールはOpenVPNのサイトにてインストーラー形式になった状態で配布されているため、インストール自体は非常に簡単に作成が可能です。
設定に関しても、基本的にはLinuxサーバと変わらないため、メモ帳などの簡単なアプリケーションを利用して設定できます。

2-1、Windowsサーバについて

今回OpenVPNをインストールするWindowsサーバは以下の仕様としました。

Windows 2008 Standard Edition R2 JP x64

GMOクラウドVPSのOSテンプレートをそのまま利用し構築を行います。また、大まかな構築の流れはLinuxサーバと同じです。

2-2、インストーラーの取得

OpenVPNの公式サイトから最新版がダウンロードできます。

ここから、“openvpn-2.2.2-install.exe”をダウンロードします。
(Linuxと同じ2.1系の安定バージョン2.1.4もブラウザーをスクロールさせるとあるので、それを利用しても大丈夫です。)

2-3、インストール

.exeファイルをダブルクリックし、インストールを行います。途中ネットワークドライバーなどをインストールするため、何度かクリックするところがありますが、そのまま設定を進めてください。

2-4、キーの作成

最初のご注意に記載いたしましたが、Windows版のOpenVPNは基本的にはクライアント動作をメインと考えられているところがあります。そのため、鍵を生成するツールなどは最低限の物しか提供されていません。ここではそれを踏まえた上で、構築します。(詳細は、コラム参照

メニューから“すべてのプログラム->OpenVPN->Utilityes->generate a static OpenVPN key”とたどり、キーファイルを作成します。

キーファイルはコンフィグファイルを置くデレクトリとして設定された場所に作成されます。
(デフォルトではC:\Program Files(x86)\OpenVPN\config)
一旦、作成できたか確認しておくと良いでしょう。

コラム:キーファイルについて

1-4で述べたLinuxサーバによるキーファイル作成で作成されたキーは上に書いたとおり、変換などを経ずにWindowsでも利用可能です。したがって、Linuxを利用しキーの作成さえできれば、Windowsでも1対多接続に対応ができます。Linuxサーバで作成した各種キーファイルをscpソフト(WinSCP等)の安全なファイル転送ソフトを利用し、Windowsサーバへ転送しておき、必要に応じてクライアント証明書を発行して接続可能なクライアントを増やすことが可能です。
仮想サーバとしてキーファイル作成サーバを作り、必要のない時はバックアップからテンプレート化しておいて、必要のあるときだけ、キー作成サーバを構築し、利用する方法もあります。

2-5、設定

最後にサーバ動作させるための設定ファイルの作成を行います。

静的鍵認証の設定ファイルは非常にシンプルなので、メモ帳などを利用し、設定のみを記述しても問題ありません。もちろんサンプルファイルがあるので、それを利用して作成しても良いでしょう。本文章では設定値だけ記載します。

dev tun
ifconfig 10.8.0.1 10.8.0.2
secret static.key
comp-lzo
keepalive 10 60
persist-tun
persist-key

設定ファイルの拡張子には“.ovpn”を使い、設定ファイルディレクトリに置くことで、GUIを使ったON/OFFにも対応します。

例:C:\Program Files(x86)\OpenVPN\config\server.ovpnに上記の設定を保存する。

以上でサーバ側の設定は完了となります。

なお、Windowsのファイヤーウォールの設定を行う必要がありますが、今回の検証時には、新規に追加されたTapデバイス(VPN用の仮想ネットワークデバイスで、OpenVPNのインストール時に同時にインストールされるものです)に対するフィルタリングをoffにしているため、実際の利用には、社内の技術者と協議した上で正しいフィルタリングを導入する事により、よりセキュアな利用が可能です。

2-6、サーバの起動

Windowsでは以下のようにOpenVPNを実行させます。

スタートメニュー->すべてのプログラム->OpenVPN->OpenVPN GUI

と、GUIユーティリティーを起動させます。次に、タスクトレイに常駐しますので、タスクトレイの出たアイコン(モニターが2つあるようなアイコンです)を右クリックし、connectを選択します。
設定ファイルが正しい場所に置かれ、正しい拡張子が付いていると、それを読み込みサーバとして動作します。

2-7、サーバの停止

サーバの停止は、上記のOpenVPN GUIから、同じように右クリック、Disconnectを選択することにより、停止させることが可能です。

2-8、その他

Windowsサーバでも、このOpenVPNアプリケーションをサービスとして登録することが可能ですが、Linuxサーバと同じように、一般的なサービス登録可能なアプリケーションの設定方法と同一なため、ここでは割愛します。

3:WindowsPCをOpenVPNサーバへ接続するためのクライアントとして構築

WindowsPCをOpenVPNサーバへ接続するためのクライアントとして構築します。2で述べたとおり、OpenVPNのアプリケーションはサーバ動作もクライアント動作も同じアプリケーションが設定の違いのみで挙動を変えるしくみのため、インストール方法については割愛します。

3-1、Windowsクライアントについて

本文章では検証時に利用したWindowsPCを参考にしています。

Windows XP professional SP3

3-2、パッケージの取得

2-1と同じ物が利用できるため、割愛します。

3-3、インストール

2-3を参照

3-4、キーファイル

クライアントでは、サーバで作成したキーファイルを利用し、クライアントであることの証明とします。そのため、ここでは必要なキーファイルの取得について以下に記載します。

  • 3-4-1、Linuxサーバに接続する場合
    Linuxサーバの場合は本文章では最初から1対多に対応したクライアント証明書の作成ができているため、それをベースに以下のようにキーファイルをサーバから転送します。
    転送についてはscp等のセキュアな転送方法を利用してください。

クライアントPCに転送するファイル

/etc/openvpn/ca.crt
/etc/openvpn/easy-rsa/keys/client_pc1.key
/etc/openvpn/easy-rsa/keys/client_pc1.crt
/etc/openvpn/ta.key

この4つのファイルをクライアントのWindowsPCに転送する。転送先は以下のとおり。

デフォルトではC:\Program Files(x86)\OpenVPN\config

  • 3-4-2、Windowsサーバに接続する場合
    Windowsサーバは静的鍵認証に使用する鍵ファイル1つを転送する。

デフォルトではC:\Program Files(x86)\OpenVPN\config\key.txt

このファイルをクライアントのWindowsPCに転送する。転送先は以下のとおり。

デフォルトではC:\Program Files(x86)\OpenVPN\config

3-5、設定

クライアントの設定は、2-5で記載した様に設定ファイルのみクライアントとして動作するように設定していきます。

  • 3-5-1、Linuxサーバに接続する場合
    以下のように設定します。

ここでは設定が必要な項目のみを記載する。

client
dev tun
proto udp
remote 000.000.000.000 1194 ← 実際に構築したサーバのIPアドレスを指定する
persist-key
persist-tun
ca ca.crt
cert client_pc1.crt
key client_pc1.key
comp-lzo
tls-auth ta.key 1
keepalive 10 60

例:C:\Program Files(x86)\OpenVPN\config\client.ovpnに上記の設定を保存する。

  • 3-5-2、Windowsサーバに接続する場合(静的鍵認証)
    静的鍵認証を利用し、1対1の接続を行う場合の設定は以下のとおり。

こちらでも、必要な項目のみを記載します。

dev tun
proto udp
remote 000.000.000.000 1194 ← 実際に構築したサーバのIPアドレスを指定する
ifconfig 10.8.0.2 10.8.0.1
persist-key
persist-tun
comp-lzo
secret key.txt
keepalive 10 60

例:C:\Program Files(x86)\OpenVPN\config\client.ovpnに上記の設定を保存する。

3-6、起動

起動方法は2-6を参照

3-7、停止

停止方法は2-7を参照

最終確認

サーバとクライアントの接続が完了しクライアント側のOpenVPN GUIのアイコンにあるモニターが緑色になると、ネットワークの確立となります。

その後は、コマンドプロンプトなどから、pingコマンド等で簡単な疎通確認ができます。

サービスへのアクセスはOpenVPNが確立させたVIP(仮想IP)を利用して行います。

例:

ping 10.8.0.1

また、サーバ側で動作しているサービスにアクセスすることで疎通確認も行えます。

例:

ブラウザーでhttp://10.8.0.1/

このガイドで問題は解決しましたか?

ご回答ありがとうございました。

引き続きGMOクラウド サポートサイトをご利用ください。

ご回答ありがとうございました。

GMOクラウド VPS サポートまでお問い合わせください。

お問い合わせ