PacketiX の導入 〜導入の容易な VPN 〜

Linux 版クライアントの導入


パッケージの入手と実行形式の作成

 PacketiX のパッケージは、SoftEther 社の Web サイトから入手できます。Linux 版は tarball (vpnclient-5080-rtm-linux-x86.tar.gz 2006/05/03 現在) で配布されており、展開すると中間ファイル形式となっていることがわかります。


 $ tar zxvf vpnclient-5080-rtm-linux-x86.tar.gz
 $ ls vpnclient
  License_ReadMeFirst.txt*      Makefile*     libssl.a*
  License_ReadMeFirstSjis.txt*  hamcore.se2*  vpnclient.a*
  License_ReadMeFirstUtf.txt*   libcrypto.a*  vpncmd.a*

 従って、実行可能ファイルを作るために、コンパイルが必要となり、開発環境のインストールが必須となります。また、いくつかのライブラリをリンクするため、事前に用意する必要があります。Vine Linux の場合、下記のパッケージが必要となります。標準インストールでは、devel パッケージはインストールされないため、apt-get install でパッケージを入手する必要があります。

 先ほど展開したディレクトリにて、make を実行します。ライセンス文の表示および承認を求められますので 同意すると、実行形式が作成されます。同意しない場合には、処理が中断されます。


$ make
./.install.sh
PacketiX VPN Software Install Utility
Copyright (C) 2004-2005 SoftEther Corporation. All Rights Reserved.


Do you want to read the License Agreement for this software ?

 1. Yes
 2. No

Please choose one of above number:
1

*** This text file is encoded with EUC-JP in Japanese.

(ライセンス文のため省略)

Did you read and understand the License Agreement ?
(If you couldn't read above text, Please read License_ReadMeFirst.txt
 file with any text editor.)

 1. Yes
 2. No

Please choose one of above number:
1


Did you agree the License Agreement ?

1. Agree
2. Do Not Agree

Please choose one of above number:
1

make[1]: ディレクトリ `/home/xxxxxxxx/vpnclient' に入ります
ranlib libssl.a
ranlib libcrypto.a
ranlib vpnclient.a
gcc vpnclient.a -pthread -lrt -lm -lz libssl.a libcrypto.a -lpthread -ldl -lreadline -lcurses -o vpnclient
strip vpnclient
ranlib vpncmd.a
gcc vpncmd.a -pthread -lrt -lm -lz libssl.a libcrypto.a -lpthread -ldl -lreadline -lcurses -o vpncmd
strip vpncmd
make[1]: ディレクトリ `/home/xxxxxxxx/vpnclient' から出ます

 make が完了すると、vpncmd および vpnclient が作成されます。

PacketiX 2.0 の実行

サービス vpnclient の実行

 PacketiX 2.0 は、本体となる vpnclient と設定ツールの vpncmd から構成されます。PacketiX を使うためには、vpnclient を実行して、サービスを起動させます。サービスとして起動するため、root 権限での起動が必要となります。 サービスの確認は、ps コマンドで行います。

# ./vpnclient start 
# ps ax | grep vpnclient
 1284 ?        S      0:00 /home/xxxxxxxx/vpnclient/vpnclient execsvc
 1285 ?        S      0:00 /home/xxxxxxxx/vpnclient/vpnclient execsvc
 1286 ?        S      0:00 /home/xxxxxxxx/vpnclient/vpnclient execsvc
 1287 ?        S      0:00 /home/xxxxxxxx/vpnclient/vpnclient execsvc
 1288 ?        S      0:00 /home/xxxxxxxx/vpnclient/vpnclient execsvc
 1289 ?        S      0:00 /home/xxxxxxxx/vpnclient/vpnclient execsvc
 1290 ?        S      0:00 /home/xxxxxxxx/vpnclient/vpnclient execsvc
 1291 ?        S      0:00 /home/xxxxxxxx/vpnclient/vpnclient execsvc
 1292 ?        S      0:00 /home/xxxxxxxx/vpnclient/vpnclient execsvc
 1295 pts/1    R      0:00 grep vpnclient

vpncmd の実行

仮想 NIC の作成

 PacketiX 2.0 を使うためには、NIC と Hub を用意する必要があります。まず、仮想 NIC を作成します。仮想 NIC を作成するときの注意点は、仮想 NIC 名にはアンダースコア(_)は使わない、ということです。これは、PacketiX の制限というよりも、Linux における Ethernet デバイスの制限といえます。実際のところ、うかつに使用してしまい、デバイスを使用不能にしてしまい、原因を追求するまでに時間がかかりました。β版字には、デバイス名に3文字以上使えない、という仕様があったようですが、製品版では解消されているようです。

 仮想 NIC の作成は、vpncmd にて行います。vpncmd は PacketiX に関するすべての設定を行うための、コマンドラインユーティリティです。オプションを付けることで、バッチ的な実行も可能となっています。カレントディレクトリに vpncmd がある場所で、./vpncmd を実行します。

$ ls
License_ReadMeFirst.txt*      client_log/        vpnclient*
License_ReadMeFirstSjis.txt*  hamcore.se2*       vpnclient.a*
License_ReadMeFirstUtf.txt*   libcrypto.a*       vpncmd*
Makefile*                     libssl.a*          vpncmd.a*
backup.vpn_client.config/     vpn_client.config

(vpncmd があることを確認します)

$ ./vpncmd (行頭に ./ を追加します)  
vpncmd コマンド - PacketiX VPN コマンドライン管理ユーティリティ
PacketiX VPN コマンドライン管理ユーティリティ (vpncmd コマンド)
Version 2.10 Build 5080
Compiled Dec 25 2005 19:56:59 by yagi at ILC308
Copyright (C) 2004-2005 SoftEther Corporation. All Rights Reserved.

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

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

1 - 3 を選択: 2 (Clien を設定するので、2 を入力します。)

接続先の VPN Client が動作しているコンピュータの IP アドレスまたはホスト名を指定してください。
何も入力せずに Enter を押すと、localhost (このコンピュータ) に接続します。
接続先を入力: (このコンピュータに設定をするので、そのまま enter を押します。)

VPN Client "localhost" に接続しました。

VPN Client> (このプロンプトが表示されていれば、vpnvmd は正しく起動されています。)

 仮想 NIC の作成は、NicCreate コマンドを使います。vpncmd のプロンプトに NicCreate と入力します。その後対話型で設定していきます。仮想 NIC が作成できたかどうかの確認は、NicList コマンドで行います。


VPN Client>NicCreate
NicCreate コマンド - 新規仮想 LAN カードの作成
仮想 LAN カードの名前: 001

コマンドは正常に終了しました。

VPN Client>NicList
NicList コマンド - 仮想 LAN カード一覧の取得
項目             |値
-----------------+-----------------------
仮想 LAN カード名|SE2
状態             |有効 (使用可能)
MAC アドレス     |00AC6D18772B
バージョン       |Version 2.10 Build 5080
-----------------+-----------------------
仮想 LAN カード名|001
状態             |有効 (使用可能)
MAC アドレス     |00AC27D1D9B9
バージョン       |Version 2.10 Build 5080
コマンドは正常に終了しました。

 仮想 NIC は複数作成することができます。複数の仮想 Hub に接続する場合には、複数の仮想 NIC を使う必要が生じますので、そのような場合には、いくつかの仮想 NIC を作成します。複数の NIC を作成する場合にも、同じ手順を必要回繰り返すことになります。vpncmd コマンドを終了するには、exit コマンドを実行します。

接続先の設定

 仮想 NIC に続いては、接続先の設定を行います。接続先とは、接続する仮想 Hub の設定を行う、ということになります。ここで、仮想 Hub を自前で建てる必要が生じる、と考えられますが、まずが SoftEhter 社が用意しています、実験用公開 Hub を使って、接続できることを確認します。仮想 Hub と併せて設置すると、なんらかの接続障害が発生した場合に、その原因が仮想 Hub にあるのか、接続設定にあるのか、が区別できなくなるため、最初に正しく動作している仮想 Hub に接続して、動作の確認を行うことが重要になります。これは、LAN の導入時にも当てはまります。

 接続先設定は、vpncmd コマンドの Account コマンド群で行います。Account コマンド群とは、Account で始まる vpncmd のコマンドグループを指します。Account コマンド群は多くのコマンドがあり、いくつか使い分けることが必要となりますので、整理して把握します。

Account コマンド群
No. コマンド名 機能
1 AccountList 接続先設定の一覧を表示します。
2 AccountCreate 接続先設定を登録します。
3 AccountDelete 接続先設定を削除します。
4 AccountStatusGet 接続先設定の状態を表示します。
5 AccountConnect 接続先設定で接続を開始します。
6 AccountDisconnect 接続先設定の接続を解除します。

 まずは、接続先設定を登録します。AccountCreate コマンドを使って作成しますが、設定する内容の、接続するサーバー名およびポート番号、アカウント名、パスワード、接続する Hub 名、について確認しておく必要があります。実験用公開 Hub は下記の通りです。設定した内容は、AccountList コマンドで確認します。


AccountCreate コマンド - 新しい接続設定の作成
接続設定の名前: OpenHub

接続先 VPN Server のホスト名とポート番号: public.softether.com:443

接続先仮想 HUB 名: public

接続するユーザー名: public

使用する仮想 LAN カード名: 001

コマンドは正常に終了しました。

VPN Client>AccountList
AccountList コマンド - 接続設定一覧の取得
項目             |値
-----------------+---------------------------------------
接続設定名       |OpenHub
状態             |オフライン
接続先サーバー   |public.softether.com (直接 TCP/IP 接続)
仮想 LAN カード名|001
コマンドは正常に終了しました。

仮想 Hub への接続

 仮想 Hub への接続は、AccountConnect コマンドで行います。接続状態の確認は AccountList コマンドで簡易に、AccountStatusGet コマンドで詳細に、行えます。接続が正常に行われると、AccountList では『状態』が『接続済み(通信中)』となり、AccountStatusGet では『セッション接続状態』が『接続完了(セッション確率済み)』となります。


VPN Client>AccountList
AccountList コマンド - 接続設定一覧の取得
項目             |値
-----------------+---------------------------------------
接続設定名       |OpenHub
状態             |接続済み (通信中)
接続先サーバー   |public.softether.com (直接 TCP/IP 接続)
仮想 LAN カード名|001
コマンドは正常に終了しました。

VPN Client>AccountStatusGet OpenHub
AccountStatusGet コマンド - 接続設定の現在の状態の取得
項目                          |値
------------------------------+------------------------------------------
接続設定名                    |OpenHub
セッション接続状態            |接続完了 (セッション確立済み)
サーバー名                    |130.158.6.59
ポート番号                    |TCP ポート 443
サーバー製品名                |PacketiX VPN Server 2.0 Enterprise Edition
サーバーバージョン            |2.10
サーバービルド番号            |Build 5080
接続開始時刻                  |2006年 5月 4日(木) 13時14分25秒
初回セッションの確立時刻      |2006年 5月 4日(木) 13時14分30秒
現在のセッションの確立時刻    |2006年 5月 4日(木) 13時14分30秒
セッション確立回数            |1 回
半二重 TCP コネクションモード |いいえ (全二重モード)
TCP コネクション数            |1
TCP コネクション数最大値      |1
暗号化の使用                  |はい (暗号化アルゴリズム: RC4-MD5)
圧縮の使用                    |いいえ (圧縮無し)
セッション名                  |SID-PUBLIC-144126
コネクション名                |CID-111945
セッションキー (160bit)       |DCD97509C08F4A729847D278E70E0C5392AA5E6D
ブリッジ / ルータモード       |いいえ
モニタリングモード            |いいえ
送信データサイズ              |938 バイト
受信データサイズ              |30,648 バイト
送信ユニキャストパケット数    |0 パケット
送信ユニキャスト合計サイズ    |0 バイト
送信ブロードキャストパケット数|0 パケット
送信ブロードキャスト合計サイズ|0 バイト
受信ユニキャストパケット数    |16 パケット
受信ユニキャスト合計サイズ    |4,064 バイト
受信ブロードキャストパケット数|268 パケット
受信ブロードキャスト合計サイズ|23,947 バイト
コマンドは正常に終了しました。

 これで無事接続できました、と終わりたいところですが、Vine Linux では、IP アドレスの割り当てが受けられない、という状態になってしまいます。


$ /sbin/ifconfig

vpn_001   リンク方法:イーサネット  ハードウェアアドレス 00:AC:27:D1:D9:B9
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1  
          RXパケット:9518 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:0 エラー:0 損失:0 オーバラン:0 キャリア:0
          衝突(Collisions):0 TXキュー長:1000
          RX bytes:905219 (884.0 Kb)  TX bytes:0 (0.0 b)
(inetアドレスの行が含まれていないことから、IP アドレスの割り当てを受けていないことが確認できます。)

 対応するために、/etc/sysconfig/network-scripts/ に仮想 NIC の設定を追加します。引数に指定するファイル名は、ifcfg-VPN_仮想 LAN カード名になります。仮想 LAN カード名が 001 なので、引数は ifcfg-VPN_001 となります。なお、/etc 以下のファイルを変更するためには、root 権限が必要となります。


# cd /etc/sysconfig/network-scripts/
# vi ifcfg-vpn_001
# cat ifcfg-vpn_001
BOOTPROTO=dhcp
ONBOOT=no
DEVICE=vpn_001

 上記のファイルを作成して、ifdown 後 ifup すると、IP アドレスの割り当てを受けていることが確認できます。


# ifconfig 

vpn_001   リンク方法:イーサネット  ハードウェアアドレス 00:AC:27:D1:D9:B9
          inetアドレス:10.1.174.40 ブロードキャスト:10.255.255.255  マスク:255.0.0.0
          UP BROADCAST NOTRAILERS RUNNING MULTICAST  MTU:1500  Metric:1
          RXパケット:31772 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:866 エラー:0 損失:0 オーバラン:0 キャリア:0
          衝突(Collisions):0 TXキュー長:1000
          RX bytes:3084366 (2.9 Mb)  TX bytes:41454 (40.4 Kb)
(inetアドレスの行が追加されていますので、IP アドレスが割り当てられていることが確認できます)

 Linux 版では、このように、仮想 Hub に接続した後に、仮想 NIC の down/up 処理が必要となっています。

仮想 Hub の接続断後の注意事項

 仮想 Hub への接続を切断した後、名前解決ができなくなります。これは、/etc/resolv.conf が書き換えられるために発生します。このため、手動で /etc/resolv.conf を書き戻す必要があります。これは PacketiX の仕様となっているため、運用においては注意する必要があります。下記は、書き換えられた /etc/resolv.conf です。

# cat /etc/resolv.conf
nameserver 130.158.6.55
search public-vpn.softether.com

独自仮想 Hub を使う場合の注意点

 独自の仮想 Hub を使う場合には、接続設定に一手間増えます。これは、ユーザー認証をユーザー名+パスワードにて行う関係から、パスワードを使用するように設定しなければなりません。これを忘れると、いくら待っても、接続処理中のステータスから変わらず、なぜつながらないんだろう?と悩むことになります。(告白します。私はこれを忘れて、なぜ接続できないのか、半日悩みました。)

 パスワード認証をするためには、vpncmd コマンドを起動し、AccountPasswordset コマンドを使用します。入力するパスワードは、仮想 Hub に登録されているパスワードになります。


VPN Client>AccountPasswordSet OpenHub
AccountPasswordSet コマンド - 接続設定のユーザー認証の種類をパスワード認証に設定
パスワードを入力してください。キャンセルするには Ctrl+D キーを押してください。

パスワード:
確認入力  :


standard または radius の指定: standard

コマンドは正常に終了しました。


Last Update is 2006/05/04. CopyRights Tazoe Kazuya 2006.