作成日:2009年03月01日、更新日:2009年03月01日 作成:鷹の巣

リモートデスクトップ接続の設定例を示します。前編では、その準備段階として、OpenVPN を使用して、仮想プライベートネットワークを構築する為の証明書と鍵(錠前)を作成します。


新作 リモートデスクトップ接続の設定例前編(仮想プライベートネットワークの構築)

このページでは、Windows XP Professional のサーバー機に Windows のクライアント機をインターネット経由で VPN 接続する例を示します。サーバー機とクライアント機には、各々ルータが設置されていることを想定しています。OpenVPN の構築に当って、OpenVPN 2.0 HOWTO 日本語訳OpenVPN 日本語情報サイト 《プラムシステムズ株式会社》を参考にさせて頂きました。自宅サーバー機がすでに稼動している方は、追加費用は、ゼロです。尚、サーバー機とクライアント機は、どちらも非固定 IPアドレスでもVPN を構築可能ですが、セキュリティ上、どちらも固定 IPアドレスであることを推奨します。(月に1000円程度の負担で、固定 IPアドレス環境になれます。)

CA(認証局)と証明書と鍵の作成方法については、OpenVPN-2.0.5 証明書を使う [FC4]に判りやすい説明がありました。このページでは、もっと簡単にかつWindows的?な作成方法を提示します。仮想プライベートネットワークについては、下記のサイトを事前にご一読されることをお奨めします。

尚、この設定例は、以下の環境で動作の確認を行いました。

設定の方針は、

  1. インストール先や設定ファイルは、極力そのまま使用した
  2. OpenVPN は、最新版を導入するため、日本語版は使用しない。
  3. CA(認証局)と証明書と鍵の作成方法については、誤入力防止と入力データの再現性を重視して、Windows のコピー&ペーストを活用した作業を行なう。
  4. 初めての人でも、間違いなく、2台のPC機へのインストールから OpenVPN 構築完了まで、2日間程度を想定(クライアント証明書の発行は、3個として)。
という相当クセのある方法となっています。

目次

  1. はじめに
  2. 概要
  3. インストール
  4. コマンドプロンプト画面の変更
  5. 証明書と鍵データ作成前の事前準備
  6. 証明書と鍵データの作成
  7. [後編]設定ファイルの編集とVPN サーバー機の動作試験
  8. [後編]VPN クライアント機の動作試験
  9. [後編]VPNサーバー機とVPNクライアント機の通常の起動方法
  10. [後編]OpenVPN用ルータの設定
  11. [後編]リモートデスクトップ接続用Windows ファイアウォールの設定
  12. [後編]OpenVPN を使用したWindows のリモートデスクトップ接続の設定例
  13. [後編]まとめ
  14. [後編]おまけ1(OpenVPN をサービスアカウントでサービス動作をさせる設定)
  15. [後編]おまけ2(OpenSSL の設定放置で、ISC BIND9 のサービス動作開始せず)

1. はじめに

私は会社で、AUTOCADで作成されたデータのインデックスをWindows XPで作成し、全文検索システム( NAMAZU )を構築しています。Windows にも FastCopy というネット越しの同期(差分)高速コピーができるフリーソフトがあり、非常に助かりました。

必要に迫られて、VPN を構築した訳ではありませんが、大変興味深く面白い内容でした。会社が固定 IPアドレスなので、OpenVPN の構築は、予想以上に簡単でした。この面白さが伝えられたらと、Webページに書いた次第です。

上記の様な訳で、会社にあるWindows XP Professional のサーバー機を自宅からリモート操作して、楽をしようと考えています。Windows に標準インストールされているリモートデスクトップ接続は、素晴らしく、ファイルのコピーも簡単です。こういう便利なソフトには必ずセキュリティホールがあるという考えで、VPN とWindows ファイアウォールを設定することにしました。

尚、Windows XP HOME EDITION 等のサーバー機を自宅からリモート操作したい場合は、リモートデスクトップ接続が使用できません。これらの場合、UltraVNC ( UltraVNC 日本語版 | NANASI's Home Page )等を追加インストールし、Windows ファイアウォールを設定して下さい。(このページでは、解説していません。)

2. 概要

  1. このページでは、下図に示すVPNの構成で、説明を行います。(会社のネットワーク管理者の許可を受ける必要があります。)遠隔地の会社にホスト名が www.example.com(208.77.188.166)の Windows XP Professional のサーバー機があり、鷹の巣の自宅(203.212.55.105)に Windows XP HOME EDITION のクライアント機があります。自宅から会社のサーバー機にリモートデスクトップ接続を行って、会社のサーバー機を管理者権限で操作することを想定しています。(VPNの環境が出来ていれば、その逆操作も可能です。)VPNを構築するため、会社に VPN サーバーを、自宅に VPN クライアントをインストールすることにします。

    サイト間VPN

    上図は、Network Notepad Homepage (フリーウェア、言語に日本語選択有)にて作成しました。有難うございました。紙上を借りてお礼を言わせて頂きます。独特な操作方法とよく落ちたので、4時間もかかりました。(荒々しい説明書は、 Network Notepad Homepage 日本語ページ にありました。)

  2. OpenVPNを使用して、VPN(仮想プライベートネットワーク)を構築するには、VPN用サーバーが必要となります。VPN用サーバー機には、プライベートアドレスの10.8.0.1が割り付けられ、仮想DHCPサーバー機には、10.8.0.2が割り付けられています。クライアント機には、10.8.0.4以降が割り付けられる仕組みになっています。

  3. 同じLAN内にVPNサーバー機(192.168.0.11)とVPNクライアント機(192.168.0.21)を設置して、接続し、ネットワークアナライザのSqueezer Ver.2(フリーウェア)を使用して、パケットを捕捉した結果(DNSパケットは、後で消去)を見て下さい。OpenVPNのパケットは、全てUDPパケットですし、VPNサーバー機は、送受信共、UDP1194番ポートしか使用していません。VPNクライアント機は、UDP1024番以上のポートが使用されています。これらを踏まえて、ルータの設定を行う必要があります。(詳細は、項10で述べます。)

  4. 会社側のルータで、UDPポート1194番の全パケットをサーバー機(192.168.0.11)へ転送(ポートフォワード)できない場合は、基本的にあきらめる。会社のネットワーク管理者の許可を受けずに自宅側にVPNサーバー機を設置し、会社側をVPNクライアント機にすると、犯罪行為になります。

  5. 今回の設定では、VPNサーバー機とVPNクライアント機間のping(疎通)は通りますが、VPNクライアント機同士の疎通はありません。

3. インストール

  1. まず、LAN内に2台のPCを準備して下さい。これは、確実にVPNのトンネルが掘れるかどうかを試験するためです。1台をVPNサーバー機とし、もう1台をVPNクライアント機とします。以下の作業は、証明書や鍵(錠前)を作成する Windows XP HOME EDITION (Professional) の VPN クライアント機での作業です。

  2. OpenVPN Downloads より Windows Installer の openvpn-2.1_rc15-install.exe (2009年2月現在)をダウンロードして、ダブルクリックして、下記の順でインストールする。
    「Next> 」-「I Agree」-「Next> 」(全コンポーネントをインストール)-「Install」(C:\Program Files\OpenVPN)-
    「続行」(下図の TAP-Win32 Adapter V9 をインストール)-「Next> 」-「Finish」で、インストールが終わります。
    TAP-Win32 Adapter V9 インストール

    注)TAP-Win32 Adapterは、仮想NIC(ネットワークインターフェィスカード)で、後述するVPN用の10.8.0.0/24のプライベートアドレスを使用可能にします。

  3. 上記のインストール作業で、仮想NICが1台追加されましたので、このNICの名前を「ローカル エリア接続2」より「OpenVPNローカル エリア接続」に変更しておきます。
    OpenVPNローカル エリア接続へ名称変更

  4. インストールされた C:\Program Files\OpenVPN\bin のフォルダの openssl.exe と libssl32.dll と libeay32.dll は、古いので、書き換えます。OpenSSL のバイナリファイルを Shining Light Productions - Win32 OpenSSL より入手します。2009年2月現在は、Win32 OpenSSL v0.9.8j Light(1MB Installer) をダウンロードします。

    ダウンロードしたファイルをダブルクリックして、インストールを行いますが、下図の画面が出た時は、キャンセルを押して中止し、Visual C++ 2008 ライブラリのランタイム コンポーネントを先にインストールします。2009年2月現在のダウンロード先は、 Microsoft Visual C++ 2008 SP1 再頒布可能パッケージ (x86) です。尚、既にインストールしているにもかかわらず、下図の画面が出る場合は、無視して「OK」をクリックします。
    Microsoft Visual C++ 2008 runtime なし表示

    「OK」-「NEXT」-「I accept the agreement を選択して、NEXT」-「C:\OpenSSL でNEXT」-
    「OpenSSL でNEXT」-「The OpenSSL binaries [/bin] directory を選択して、NEXT」(下図参照)-「Install」-「とりあえず、チェックを全て外して、Finish」でインストールが終わります。

    OpenSSL binaries install

    C:\OpenSSL\binのフォルダの openssl.exe libssl32.dll libeay32.dll を C:\Program Files\OpenVPN\bin のフォルダへ上書きコピーします。(OpenSSL は、環境変数 OPENSSL_CONF に C:\OpenSSL\bin\openssl.cfg を設定して、設定ファイルを利用します。OpenVPN は、C:\Program Files\OpenVPN\easy-rsa\openssl.cnf の設定ファイルを利用します。)

  5. 以上で、VPN クライアント機のインストールは、完了しました。LAN内で、接続試験を行うためにもう1台、 Windows XP HOME Professional ( EDITION ) の VPN サーバー機を準備して下さい。VPN サーバー機に上記の b 項と c 項のインストールを行って下さい。(VPN サーバー機には、 d 項のOpenSSL のインストールを行なう必要は、ありませんが、C:\Program Files\OpenVPN\bin のフォルダの openssl.exe と libssl32.dll と libeay32.dll は、上書きコピーして下さい。)

4. コマンドプロンプト画面の変更

コマンドプロンプト画面での作業が多くなるので、まずコマンドプロンプト画面の変更を行います。コマンドプロンプト画面の上部の表題バーで、下図の様に右クリックして、プロパティを左クリックし、コマンドプロンプトのプロパティを開けます。

コマンドプロンプト画面

下図の様に変更して、UNIX のワークステーション端末の様にします。(コマンドプロンプト画面で、コピーや貼り付けが出来る様になります。)

コマンドプロンプト画面のプロパティのオプションタブとレイアウトタブ

設定が終わったら、「OK」を押します。今後もこのコマンドプロンプト画面を使用し続けるので、「ショートカットへのプロパティの適用」画面で、「このウィンドウを起動したショートカットを変更する」を選択して、「OK」を押します。

コマンドプロンプト画面のショートカットへのプロパティの適用

5. 証明書と鍵データ作成前の事前準備

  1. 証明書と鍵データの作成は、コマンドプロンプト画面での入力になり、同じデータを何度も入力しなればなりません。ここでは、入力データを事前に準備することにします。

  2. 鷹の巣が作成した OpenVPN-build-key-input.lzh をダウンロードして解凍し、C:\Program Files\OpenVPN\easy-rsa フォルダに設置します。内容は「大阪府箕面市」、VPN サーバーのネットワークセグメントが「 10.8.0.0/24」、VPN 管理者のメールアドレスが「 abuse@example.jp 」になっています。下図の赤囲み箇所を貴方の環境に合わせて変更して下さい。改行も意味をもっていますので、文字列だけを変更して下さい。フォルダにeasy-rsa という名称がついていますが、この作業は、no-miss-easy-easy-rsa にする作業だと考えて、辛抱して実施して下さい。

    証明書と鍵データ作成用ファイルの内容

6. 証明書と鍵データの作成

コマンドプロンプト画面より、証明書と鍵を作成します。クライアント用の証明書と鍵は、1つあれば、試験出来ますが、とりあえず3つ作成します。
画面では、水色がコマンド入力、緑色が得られた結果の注目すべき表示、赤色が注目すべき説明としています。

  1. コマンドプロンプト画面を起動し、「cd \Program Files\OpenVPN\easy-rsa 」と入力し、作業フォルダに移動します。
  2. インストール後の1回だけ、「 init-config 」と入力し、必ず実行します。これにより、vars.bat と openssl.cnf が sample より生成(コピー)されます。
  3. 「 vars 」と入力し、コマンドプロンプト画面の環境変数を設定します。(コマンドプロンプト画面で、鍵を作る場合は、毎回行う。)
  4. 「 clean-all 」と入力し、「C:\Program Files\OpenVPN\easy-rsa\keys 」フォルダ内の全ての証明書と鍵を初期化します。証明書と鍵は、「C:\Program Files\OpenVPN\easy-rsa\keys 」フォルダ内に生成されます。
  5. 「 build-ca 」と入力し、認証局(CA)の証明書と鍵を作成します。入力には、「 build-ca.input.txt 」の内容を貼付けます。
  6. 「 build-key-server server 」と入力し、サーバーの証明書と鍵を作成します。入力には、「 build-key-server.input.txt 」の内容を貼付けます。
  7. 「 build-key client1 」と入力し、クライアント1用の証明書と鍵を作成します。入力には、「 build-key-clientA.input.txt 」の内容を貼付けます。
    クライアント番号「1」を入力して、「ENTER」を押した後に「 build-key-clientB.input.txt 」の内容を貼付けます。
  8. 「 build-key client2 」と入力し、項g と同様にしてクライアント番号「2」を入力して、クライアント2用の証明書と鍵を作成します。
  9. 「 build-key client3 」と入力し、項g と同様にしてクライアント番号「3」を入力して、クライアント3用の証明書と鍵を作成します。
  10. 「 build-dh 」と入力し、DH (Diffie Hellman) パラメータを生成します。

コマンドプロンプト画面より、上記のコマンド入力を行って、証明書と鍵を作成している内容を下記に示します。
画面では、水色がコマンド入力、緑色が得られた結果の注目すべき表示、赤色が注目すべき説明としています。

証明書と鍵の作成要領

C:\>cd \Program Files\OpenVPN\easy-rsa      <----証明書と鍵の作成時の場所移動

C:\Program Files\OpenVPN\easy-rsa>init-config <----インストール後の1回だけ、必ず実行する。

C:\Program Files\OpenVPN\easy-rsa>copy vars.bat.sample vars.bat
 1 個のファイルをコピーしました。

C:\Program Files\OpenVPN\easy-rsa>copy openssl.cnf.sample openssl.cnf
 1 個のファイルをコピーしました。

C:\Program Files\OpenVPN\easy-rsa>vars <----------環境変数の設定で、コマンドプロンプト画面で本作業をする前に必ず実行すること。

C:\Program Files\OpenVPN\easy-rsa>clean-all <------全証明書と鍵の消去。

 1 個のファイルをコピーしました。
 1 個のファイルをコピーしました。

C:\Program Files\OpenVPN\easy-rsa>build-ca <-------CA(認証局)の証明書と鍵の作成。
Loading 'screen' into random state - done
Generating a 1024 bit RSA private key
.................++++++
...................................................++++++
writing new private key to 'keys\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]:JP <----------ここで、build-ca.input.txt の内容を全てコピーし、右クリックして張り付ける。
State or Province Name (full name) [OSAKA]:OSAKA
Locality Name (eg, city) [MINOU]:MINO
Organization Name (eg, company) [OpenVPN]:OpenVPN
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:OpenVPN-CA
Email Address [abuse@example.jp]:abuse@example.jp

C:\Program Files\OpenVPN\easy-rsa>build-key-server server <---サーバー証明書と鍵の作成。
Loading 'screen' into random state - done
Generating a 1024 bit RSA private key
.......................++++++
.........................++++++
writing new private key to 'keys\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]:JP <----------ここで、build-key-server.input.txt の内容を全てコピーし、右クリックして張り付ける。
State or Province Name (full name) [OSAKA]:OSAKA
Locality Name (eg, city) [MINOU]:MINO
Organization Name (eg, company) [OpenVPN]:OpenVPN
Organizational Unit Name (eg, section) []:10.8.0.0/24
Common Name (eg, your name or your server's hostname) []:server
Email Address [abuse@example.jp]:abuse@example.jp

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from openssl.cnf
Loading 'screen' into random state - done
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'JP'
stateOrProvinceName :PRINTABLE:'OSAKA'
localityName :PRINTABLE:'MINO'
organizationName :PRINTABLE:'OpenVPN'
organizationalUnitName:PRINTABLE:'10.8.0.0/24'
commonName :PRINTABLE:'server'
emailAddress :IA5STRING:'abuse@example.jp'
Certificate is to be certified until Feb 22 09:29:51 2019 GMT (3650 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

C:\Program Files\OpenVPN\easy-rsa>build-key client1 <---クライアント1証明書と鍵1の作成。
Loading 'screen' into random state - done
Generating a 1024 bit RSA private key
...................................++++++
...........++++++
writing new private key to 'keys\client1.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]:JP <----------ここで、build-key clientA.input.txt の内容を全てコピーし、右クリックして張り付ける。
State or Province Name (full name) [OSAKA]:OSAKA
Locality Name (eg, city) [MINOU]:MINO
Organization Name (eg, company) [OpenVPN]:OpenVPN
Organizational Unit Name (eg, section) []:10.8.0.0/24
Common Name (eg, your name or your server's hostname) []:OpenVPN-client1 <---ここで、1を入力して、エンターを押す。
Email Address [abuse@example.jp]:abuse@example.jp <---ここで、build-key clientB.input.txt の内容を全てコピーし、右クリックして張り付ける。

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from openssl.cnf
Loading 'screen' into random state - done
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'JP'
stateOrProvinceName :PRINTABLE:'OSAKA'
localityName :PRINTABLE:'MINO'
organizationName :PRINTABLE:'OpenVPN'
organizationalUnitName:PRINTABLE:'10.8.0.0/24'
commonName :PRINTABLE:'OpenVPN-client1'
emailAddress :IA5STRING:'abuse@example.jp'
Certificate is to be certified until Feb 22 09:30:59 2019 GMT (3650 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

C:\Program Files\OpenVPN\easy-rsa>build-key client2 <----------クライアント2証明書と鍵2の作成、F3キーを押して、client1を2にする。


......................................... 以下、同様に必要数のclientを作成する .............................................



C:\Program Files\OpenVPN\easy-rsa>build-dh <----------OpenVPNサーバー用Diffie Hellmanパラメータの作成。
Loading 'screen' into random state - done
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
......+.....................+..................................+.....................
.............................................................+.................+.....
......................+................................................+..++*++*++*

C:\Program Files\OpenVPN\easy-rsa>

注)画面では、水色がコマンド入力、緑色が得られた結果の注目すべき表示、赤色が注目すべき説明としております。

以上で、証明書と鍵が作成できました。
VPN サーバーに必要なファイル----ca.crt 、server.crt 、server.key 、dh1024.pem
VPN クライアントに必要なファイル---ca.crt 、client1.crt 、client1.key

今後、クライアントの証明書と鍵を追加作成する場合は、コマンドプロンプト画面を起動し、「 cd \Program Files\OpenVPN\easy-rsa 」と入力して、作業フォルダに移動後、「 vars 」と入力して、画面の環境変数を設定して下さい。

目次▲頁先頭