■ UT-VPNの構築 2011/01/22 作成
 インターネットから自宅サーバに接続するには幾つかの方法があります。 利用したいポートを直接解放しする方法と、VPNを張る方法が一般的かと思いますが、VPNを張る方法が公開するポートを制限することができ、ファイアウォールの管理も楽になるため、こちらをお勧めします。 ネットワークとネットワークをつなぐ場合は IPsec-VPN、ネットワークとPCをつなぐ場合は SSL-VPN を使います。 0円でVPNの構築を目指している当サイトの管理者がお勧めするソフトは 『筑波大学 UT-VPN』 です。 何といっても純国産の強力な商用VPN製品 『ソフトイーサ(株) PacketiX VPN』 のオープンソース版で著作権の問題で一部の機能制限があるものの、自宅サーバに実装するには十分すぎるほどの性能があります。

構築手順の前に一般的な外部接続の 利点/欠点 を以下に示します。 (もちろん私の私感100%です)
 
接続方法 利点/欠点 コメント 
SSH+ポートフォワード 利点 ・OS組み込みなので無料 (Unix、Linuxの場合)
・プログラムの追加は不要
・設定が簡単
欠点 ・接続するIPアドレス、ポート毎に設定の追加が必要
・SSHを開放するにはリスクを感じる
・Windowsは単独での使用が出来ない (フリーソフトで対応可能)
PPTP、L2F、L2TP 利点 ・サーバ側はOS組み込みなので無料 (Unix、Linuxの場合)
・クライアント側は多くのOSが対応しているので使いやすい
・サーバ側は安価なブロードバンドルータを使用して構成することができる製品もある
・ダイアルアップ接続設定を追加することになるが、他と競合することが殆どない
欠点 ・安価なブロードバンドルータではスループットに難がある
・1グローバルIPで運用している場合、GREプロトコルをDNAPTできない機器では使用不可
・ファイアウォールが存在する場合、GREプロトコルが通過できること
IPsec-VPN
アプライアンス製品
利点 ・通常ルータ間で使用するので高スループット
・クライアントはVPNの存在を意識しなくてよい
欠点 ・ルータの価格が比較的高い
・固定グローバルIPが必要な製品もある
・設定項目が多く素人には扱いにくい
SSL-VPN
アプライアンス製品
利点 ・通常 TCP/443 を使うのでファイアウォールの影響を受けない
・多くの認証システムと連携できるのでユーザ管理が柔軟
欠点 ・一部の製品は TCP/443 以外のポートも使用しており、ファイアウォール設定が必要
・SSL-VPN用の仮想IFが作成され、これが他社の仮想IFと競合する場合がある
・業務用製品がほとんどなので、「費用をかけずに」 を目指している人にとっては、超高価なもの
UT-VPN 利点 ・純国産のオープンソース製品で無料
・商用製品 (PacketiX VPN) のオープンソース版で、ほぼ同等の機能が利用可能
・日本語マニュアルがあり使いやすい
・仮想的なL2レベルのネットワークを築くため、接続後はどんな通信もOK
・専用クライアントで管理しているので競合が無い
・TCP/443のみでリッスンさせることができるので、ファイアウォールも楽々通過
欠点 ・オープンソースなのでノーサポート
・Linux、Solaris は、ソースからインストールなので少し面倒
・構成によってはPCにスタティックルートが必要
・グローバルIPが一つの場合、TCP/443 は取り合いになる (VPN用か、https用かどっち?)
・プロミスキャスモードが使えるNICが必要 (これはあまり問題にならない)
SSL Explorer
adito
Open VPN ALS
利点 ・オープンソース製品で無料
・java ベースのVPNソフトなので、ブラウザから操作できる
欠点 ・開発が終わっていたり、名前が変わったり、買収後商用化されたりしていて、情報収集が面倒
・java をインストールしなければならない (欠点でないかもしれない)
・ブラウザベースなので通常のエクスプローラではサーバのファイルは見れない
・使いたい機能(RDP、ファイル共有)は予め、設定しておく必要がある
VPNに共通する  利点 ・外出先から社内 (自宅) のリソースにアクセスができる
・VPN接続することで開放するポートを減らすことができる
欠点 ・ファイアウィールを通過してVPNを張るために管理者が意図しないプロトコルが流れ込む
・不正なアクセスを防ぐためには、専用クライアントソフトの利用と強固なパスワード設定が望ましい
 

我が家のネットワーク簡易図 (Visio で作ってみました)
 

この構成の特徴
  1. インターネットサーバは VMware ESXi 上の CentOS 5.5 で構築。
  2. VMware ESXi 仮想スイッチはプロミスキャス (無差別) モードを有効化。
  3. UT-VPN Server によりインターネットサーバ内に仮想HUBを作成。
  4. 仮想HUBはインターネットサーバのNICと内部で接続されており同一セグメントとして構成。
  5. ユーザ認証は UT-VPN Server のローカルユーザ認証。
  6. リッスンポートは TCP/443 とするために、apche の https を無効化。
  7. ファイアウォール上で TCP/443 を DNAPT(宛先ポートNAT) しインターネットサーバに転送。
  8. UT-VPN Client をインストールしたPCからクライアントソフトを使用して接続。
  9. PCには内部サーバに向けたスタティックルートを設定。

 
構築手順
  1. UT-VPN Server を ポート 443 で待ち受けるのであれば、apache の https を無効にしてく必要があります。
     
  2. VMware vSphere Client を使用し ESXiサーバ の仮想スイッチのプロミスキャス (無差別) モードを有効にします。
     (これは、UT-VPNのシステム要件にプロミスキャスモードをサポートしたNICが必要となっているための処置です。
      実施しない場合は UT-VPN が作成する 仮想HUB と NIC(ここでいうVMwareのvmnic) との間の通信ができません。)

      
      こんな感じかな。
     
  3. 筑波大学 UT-VPN オープンソース・プロジェクト』 からプログラム、スタートアップガイドをダウンロードします。
      ・UT-VPN Server
      ・UT-VPN Server Only Files (ここにサーバ管理マネージャがあります)
      ・UT-VPN Client
      ・UT-VPN Startup_Guide_for_UNIX (Windows版は存在していなそうですが、インストーラ付なんで問題ないでしょう)
     
  4. ソフトイーサ株式会社』 の PacketiX VPN の情報も見ておこう。 こちらのオンラインマニュアルで全ての作業ができます。
     
  5. スタートアップガイドにある環境を確認し、コンパイル&インストール
      ・動作環境
      ・必要なライブラリ、コンパイラを確認し事前にインストールしておくきます
     
  6. インストール作業
    ■ アーカイブの展開 (一般ユーザで実施する)
    $ tar -xvzf utvpn-src-unix-v101-7101-public-2010.06.27.tar.gz
    $ ls utvpn-unix-v101-7101-public
    License-ja.txt              UT-VPN_Startup_Guide_for_UNIX.pdf makefiles
    UT-VPN_Developers_Guide.pdf configure                         src



    ■ ビルドの実行 (一般ユーザで実施する)
    $ ./configure
    -------------------------------------------------------------
    SoftEther UT-VPN for Unix

    Copyright (C) 2004-2010 SoftEther Corporation.
    Copyright (C) 2004-2010 University of Tsukuba, Japan.
    Copyright (C) 2003-2010 Daiyuu Nobori. All Rights Reserved.

    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License
    version 2 as published by the Free Software Foundation.
    -------------------------------------------------------------

    Please select your Operating System below:
    1: Linux
    2: FreeBSD
    3: Solaris
    4: Mac OS X

    Which is your operating system (1-4):
    1 
    ← CentOSなので "Linux" を選択する。

    Please select your CPU Bits below:
    1: 32-bit
    2: 64-bit

    Which is the bits of your CPU (1-2):
    1 
    ← 32bit OSなので "32-bit" を選択する。

    Makefile is generated. Please execute 'make' to build UT-VPN.

    $ make
    gcc -DNDEBUG -DVPN_SPEED -DUNIX -DUNIX_LINUX -D_REENTRANT -DREENTRANT -D_THREAD_SAFE
    -D_THREADSAFE -DTHREAD_SAFE -DTHREADSAFE -I./src/ -I./src/Cedar/ -I./src/Mayaqua/ -O2
    -fsigned-char -c src/Mayaqua/Cfg.c -o tmp/objs/Mayaqua/Cfg.omake
      :
      :
    gcc tmp/as/utvpncmd.a -O2 -fsigned-char -lm -ldl -lrt -lpthread -lssl -lcrypto -lreadline
    -lncurses -lz -o output/utvpncmd/utvpncmd
    $
    $ find output/
    output/
    output/utvpnserver
    output/utvpnserver/hamcore.utvpn
    output/utvpnserver/utvpnserver
    output/ham
    output/ham/hamcore.utvpn
    output/ham/ham
    output/utvpnclient
    output/utvpnclient/hamcore.utvpn
    output/utvpnclient/utvpnclient
    output/utvpncmd
    output/utvpncmd/hamcore.utvpn
    output/utvpncmd/utvpncmd

     ↑以上のファイルが生成されていればOK


    ■ インストール (スーパユーザで実施する)
    $ su
    パスワード:********
    # make install
    cp output/utvpnserver/hamcore.utvpn /usr/utvpnserver/hamcore.utvpn
    cp output/utvpnserver/utvpnserver /usr/utvpnserver/utvpnserver
      :
      :
    --------------------------------------------------------------------
    Installation completed successfully. ← 確認
    Please execute 'utvpnserver start' to run UT-VPN Server Background Service.
    Or please execute 'utvpnclient start' to run UT-VPN Client Background Service.
    And please execute 'utvpncmd' to run UT-VPN Command-Line Utility to configure
    UT-Server or UT-VPN Client.
    --------------------------------------------------------------------
    #
     
  7. プログラムの起動・停止の確認
    ■ プログラムの起動
    # utvpnserver start
    UT-VPN Server Service Started.

    ■ プログラムの停止
    # utvpnserver stop
    Stopping SoftEther UT-VPN Server Service...
    SoftEther UT-VPN Server Service Stopped.
     
  8. 起動スクリプトの作成とサービス登録
    ■ 起動スクリプトの作成
    # vi /etc/init.d/utvpnserver
    緑:ソフトイーサ社のサンプル、オレンジ:システムに合わせた変更箇所
     
    #!/bin/sh
    # chkconfig: 2345 99 01
    # description: UT-VPN server

    DAEMON=/usr/bin/utvpnserver
    LOCK=/var/lock/subsys/utvpnserver

    test -x $DAEMON || exit 0

    case "$1" in

    start)
          $DAEMON start
          touch $LOCK
          ;;
    stop)
          $DAEMON stop
          rm $LOCK
          ;;
    restart)
          $DAEMON stop
          sleep 3
          $DAEMON start
          ;;
    *)
          echo "Usage: $0 {start|stop|restart}"
          exit 1

    esac
    exit 0

    ■ 作成した起動スクリプトに実行権を付与
    # chmod 755 /etc/init.d/utvpnserver

    ■ 作成した起動スクリプトに実行権を付与
    # chkconfig --add utvpnserver
    # chkconfig --list utvpnserver
    utvpnserver 0:off 1:off 2:on 3:on 4:on 5:on 6:off
    ←この行が表示されればサービス登録完了

    ■ Serviceコマンドによる起動、停止等の確認
    # service utvpnserver stop
    # service utvpnserver start
    # service utvpnserver retart
     
  9. OSを停止して、ローカルブリッジ接続用に NIC を追加します。 (具体的には ESXi 上の仮想マシンに NIC を追加することになります。)
     ※UT-VPN Server をインストールしたホストを VPN接続したクライアントから管理する場合に必要な措置で、Linux特有のものです。
       (インストールガイドより)
     
      
      こんな感じかな。
     
  10. システムを起動して、増設したNICに適応なIPアドレスを 割当てます。 eth1 には 0.0.0.0 を設定しましょう。
     ※このNICは VPN Server が生成する、仮想HUB内のトラフィックを物理ネットワークに中継するためのものなので
      接続しているサブネットに有効な IPアドレス でなくても構いません。
      (インストールガイドより)
     
  11. PCに展開した 『UT-VPN サーバ管理マネージャ』 を起動し、ホスト名かIPアドレスを入力し接続します。
    デフォルトでは 443、992、5555 でリッスンしているのでどれかで接続すると、管理パスワードを設定するように要求されます。 

      
     
  12. UT-VPN Server の設定は GUI で簡単にできるので、好きに構成してください。

     但し、最低限設定が必要なことは以下の通りです。
       1.「リスナーの一覧」 に表示されている、リッスンポートを設定する。
       2.「仮想HUBの管理」 を開き、ユーザの作成を行う。
       3.「ローカルブリッジの設定」 を開き、仮想HUBを接続するNICを選択する。

      
     
  13. VPN接続を行うPCに UT-VPN Client をインストールします。
     
  14. UT-VPN Client に Server に合わせた接続情報を設定します。

       1.「接続先の設定」 に、ホスト名、ポート番号、VPNを接続する仮想HUB を指定する。
       2.「経由するプロキシサーバの設定」 を開き、必要であれば Proxy サーバ、ユーザ情報を指定する。
       3.「ユーザ認証」 に認証方法、とログイン情報を指定します。

      
     
  15. インターネット側から接続する場合は、リッスンポートに設定しているポート番号を開放し通信可能な状態に設定します。
     
  16. UT-VPN Client から Server に接続します。

     接続が完了すると、仮想インターフェイスがリンクアップし通信が可能な状態となります。 この構成での接続先は 「ローカルブリッジ」 が
     接続されているネットワークに接続となります(レイヤ2で接続されます)。 このセグメントに DHCP サーバがあれば、IPアドレスを自動で
     取得します。 DHCPサーバがなければ、IPアドレスを指定します。

     UT-VPN 仮想インターフェイス側にはデフォルトルートは設定してはいけません。 デフォルトルートとは宛先が不明なネットワークへの
     通信を行う場合に使用するゲートウェイなので、通常はそのネットワークの中でインターネットにより近いゲートウェイデバイスを指定する
     ものです(プロキシサーバがある場合はこの限りではありません)。 VPNで接続した先のルータを超える必要がある場合は、スタティック
     ルートを設定する必要があります。

     スタティックルートの設定例
      route -p add 192.168.100.0 mask 255.255.255.0 192.168.10.1
 インターネットVPN を自前で構築しようと考えている方は、この程度の知識はお持ちでしょうから、これ以上詳しくは書きません。
 

 ■ UT-VPN スループット測定 2011/01/22 作成
 せっかく導入したVPNのスループットはどれほどのものでしょう。 UT-VPNにはそれを測定するツールも組み込まれています。
測定手順
  1. UT-VPN Server にログインし測定ツールを起動します。
    # /usr/bin/utvpncmd
    utvpncmd コマンド - SoftEther UT-VPN コマンドライン管理ユーティリティ
    SoftEther UT-VPN コマンドライン管理ユーティリティ (utvpncmd コマンド)
    Version 1.01 Build 7101 (Japanese)
    Compiled 2010/06/27 18:40:28 by yagi at pc25
    Copyright (C) 2004-2010 SoftEther Corporation.
    Copyright (C) 2004-2010 University of Tsukuba, Japan.
    Copyright (C) 2003-2010 Daiyuu Nobori.
    All Rights Reserved.

    utvpncmd プログラムを使って以下のことができます。

    1. VPN Server または VPN Bridge の管理
    2. VPN Client の管理
    3. VPN Tools コマンドの使用 (証明書作成や通信速度測定)

    1 - 3 を選択: 3

    VPN Tools を起動しました。HELP と入力すると、使用できるコマンド一覧が表示できま す。

    VPN Tools>TrafficServer
    TrafficServer コマンド - 通信スループット測定ツールサーバーの実行
    サーバープログラムを起動しています...
    サーバープログラムを起動しました。IPv4 TCP ポート 9821 を待機状態にしてクライア ントからの接続を待機しています。
    IPv6 TCP ポート 9821 を待機状態にしてクライアントからの接続を待機しています。

    ----------------------------------------
    通信スループット測定ツールのサーバープログラムを起動しました。

    Enter キーを押すと、サーバープログラムを停止します。
    ----------------------------------------
     
  2. クライアントのスタートメニューから 「通信スループット測定ツール」 を起動、「測定クライアント」 を選び、UT-VPN Server の
    アドレスとポートを指定し実行します。

       
      こんな感じかな。
     
  3. UT-VPN Server にログインし測定ツールを終了します。
    ----------------------------------------
    通信スループット測定ツールのサーバープログラムを起動しました。

    Enter キーを押すと、サーバープログラムを停止します。
    ----------------------------------------

    コネクション 1: クライアント VPN-CLIENT のポート 1382 から接続されました。
    コネクション 2: クライアント VPN-CLIENT のポート 1384 から接続されました。
    コネクション 1 (VPN-CLIENT) が切断されました。
    コネクション 2 (VPN-CLIENT) が切断されました。

    サーバープログラムを停止しています...
    待機ポートを閉じました。
    サーバープログラムの停止が完了しました。
    コマンドは正常に終了しました。

    VPN Tools>exit
    #

 スクリーンショットのスループットは、ノートPC ~ [ EMOBILE ] ~ [ eoホームファイバー ] ~ VPNサーバ という通信ルートです。
 以前は バッファローの安もんルータについているPPTPサーバを使っていたのですが、それとは比べ物にならないくらい速いですね。
 とっても快適です。