PacketiX VPN 2.0 Client (vpnclient-5280-rtm-linux-x86)

14/March/2006 tested on openSUSE10.2

PacketiX VPN は Layer 2 VPN over the TCP/IP network を簡単に確立でき、プロキシー経由でも接続をすることが出来るすばらしいソフトウエアです。設定方法は詳しくヘルプファイル(packetix_vpn.chm)に書いてありますが、補足説明や自分が変更した方法などを記述します。Linuxに関しては、サーバーの設定方法は書いてありますが、クライアントについては記述していません。しかしインストール方法は途中まで同じです。

まずはここからダウンロード。Softether.

インストール

コンパイルする前にこれがインストールされていることを確認する。

  1. openssl-devel
  2. zlib-devel
  3. readline-devel
  4. ncurses-devel

Linuxバージョンのクライアントをここからダウンロード。

http://www.softether.com/jp/download/

コンパイル

# cp vpnclient-5280-rtm-linux-x86.tar.gz /usr/local/src
# cd /usr/local/src
# tar zxvf vpnclient-5280-rtm-linux-x86.tar.gz
# cd vpnclient/
# ./.install.sh

コンパイルが始まる前に"1"と"Enter"を3回押してライセンスを確認する。ターミナルで日本語が読めない場合(teraterm等)はEUCに変更すると読めると思います。

コンパイルが成功すると以下のメッセージが出ます。

ranlib libssl.a
ranlib libcrypto.a
ranlib vpnclient.a
gcc vpnclient.a -pthread -lrt -lm -lz libssl.a libcrypto.a -lpthread -ldl -lreadline -lncurses  -o vpnclient
ranlib vpncmd.a
gcc vpncmd.a -pthread -lrt -lm -lz libssl.a libcrypto.a -lpthread -ldl -lreadline -lncurses  -o vpncmd

openSUSE10.2の場合

ちなみにopenSUSE10.2では以下のエラーが出てコンパイル出来ない。

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
/usr/lib/gcc/i586-suse-linux/4.1.2/../../../../i586-suse-linux/bin/ld: cannot find -lcurses
collect2: ld returned 1 exit status
make: *** [vpnclient] Error 1

openSUSE10.2でコンパイルするためにはMakefileの -lcurses を -lncurses に変更するとコンパイルすることが出来る。

...
                        gcc vpnclient.a -pthread -lrt -lm -lz lib
ssl.a libcrypto.a -lpthread -ldl -lreadline -lncurses  -o vpnclie
nt

vpncmd:         vpncmd.a
                        -ranlib vpncmd.a
                        gcc vpncmd.a -pthread -lrt -lm -lz libssl
.a libcrypto.a -lpthread -ldl -lreadline -lncurses  -o vpncmd
...

vpnclientをサービスとして起動

コンパイルしたバイナリーを丸ごとコピー

# cp /usr/local/src/vpnclient /usr/local/ -R
# cd /usr/local/vpnclient
# chmod 600 *
# chmod 700 vpncmd vpnclient

動作を確認する(Fedoraの場合は日本語が表示されますが、openSUSEの場合は表示されません)

# ./vpncmd
vpncmd コマンド - PacketiX VPN コマンドライン管理ユーティリティ
PacketiX VPN コマンドライン管理ユーティリティ (vpncmd コマンド)
Version 2.20 Build 5280
Compiled Nov 25 2006 11:08:25 by yagi at ILC308
Copyright (C) 2004-2006 SoftEther Corporation. All Rights Reserved.

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

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

1 - 3 を選択: 3

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

VPN Tools>check
Check コマンド - PacketiX VPN の動作が可能かどうかチェックする
---------------------------------------------------
PacketiX VPN 動作環境チェックツール

Copyright (C) 2004-2006 SoftEther Corporation.
All Rights Reserved.

この動作環境チェックツールを実行したシステムがテストに合格した場合は、PacketiX VPN ソフトウェアが動作する可能性が高いです。チェックにはしばらく時間がかかる場合があります。そのままお待ちください...

'カーネル系' のチェック中...
              [合格] ○
'メモリ操作系' のチェック中...
              [合格] ○
'ANSI / Unicode 文字列処理系' のチェック中...
              [合格] ○
'ファイルシステム' のチェック中...
              [合格] ○
'スレッド処理システム' のチェック中...
              [合格] ○
'ネットワークシステム' のチェック中...
              [合格] ○

すべてのチェックに合格しました。このシステム上で PacketiX VPN Server / Bridge が正しく動作する可能性が高いと思われます。

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

VPN Tools>exit

設定

設定はvpncmdコマンドからできますが、マニュアルに書いてあるように、「VPNクライアント接続マネージャー」を使って制御することが推奨されています。なので、VPN ClientをインストールしてあるほかのWindowsマシンから設定することにします。

# ./vpncmd
vpncmd コマンド - PacketiX VPN コマンドライン管理ユーティリティ
PacketiX VPN コマンドライン管理ユーティリティ (vpncmd コマンド)
Version 2.20 Build 5280
Compiled Nov 25 2006 11:08:25 by yagi at ILC308
Copyright (C) 2004-2006 SoftEther Corporation. All Rights Reserved.

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

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

1 - 3 を選択: 2

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

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

コマンドラインで設定するのは面倒なので、リモートのWindowsからの設定を許可する

VPN Client>RemoteEnable
RemoteEnable コマンド - VPN Client サービスのリモート管理の許可
コマンドは正常に終了しました。
VPN Client>exit

PacketiX VPN 2.0 ClientのインストールしてあるWindowsマシンから、「別のコンピュータのPacketiX VPN Clientの管理」を起動し、IPアドレスを入力

新規仮想LANカードの作成を選択。

仮想LANカードの名前を入力。

[1]と入力すると仮想LANカードが[vpn_1]になります。

# ifconfig
...
vpn_1     Link encap:Ethernet  HWaddr 00:AC:0C:AE:42:D0
          inet6 addr: fe80::2ac:cff:feae:42d0/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

次に、「新しい接続の作成」を選択。この設定方法はソフトイーサ株式会社が提供している実験用オンラインサービスの公開HUBに接続します。

高度な「通信設定」ボタンを押すと、さらにいくつかの詳細設定を行える。
通信速度が遅い場合や、自前のVPN Serverに接続する場合は、「データ圧縮を使用する」を有効にすると通信が安定しない場合があります。「VPN Serverとの間の通信をSSLで暗号化する」を有効にしても通信が安定しない場合があるので、もし安定しない場合は無効にしてテストをすると良いかもしれません。

「スタートアップ接続に設定」を有効にするとサービスが起動したらすぐに接続を開始します。

テストで接続を開始。

接続状況はclient_logを監視。

# tail -f /usr/local/vpnclient/client_log/client_20070101.log
2007-03-12 00:44:27.691 接続設定 "セキュアインターネット接続" への接続処理を開始しました。
2007-03-12 00:44:27.691 接続設定 "セキュアインターネット接続": 1 回目の接続動作を開始します。
2007-03-12 00:44:28.163 接続設定 "セキュアインターネット接続": 接続が完了しました。セッション名: "SID-PUBLIC-111111"

しかし、このままでは以下のようにIPアドレスは取得できてません。

# ifconfig
...
vpn_1     Link encap:Ethernet  HWaddr 00:AC:0C:AE:XX:XX
          inet6 addr: fe80::2ac:cff:feae:42d0/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:6529 errors:0 dropped:0 overruns:0 frame:0
          TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500
          RX bytes:483530 (472.1 KiB)  TX bytes:3352 (3.2 KiB)

DHCPよりアドレスを取得するために、/etc/sysconfig/network-scripts/ に仮想 NIC の設定を追加します。仮想カード名が 1 なので、ファイル名は ifcfg-vpn_1 となります。/etc/sysconfig/network-scripts/ifcfg-vpn_1 を作成。

BOOTPROTO=dhcp
ONBOOT=no
DEVICE=vpn_1

VPNインターフェースを再起動する。

# ifdown vpn_1
# ifup vpn_1

Determining IP information for vpn_1... done.

アドレスが取得できているのを確認できます。

# ifconfig
...
vpn_1     Link encap:Ethernet  HWaddr 00:AC:0C:AE:42:D0
          inet addr:10.1.207.35  Bcast:10.255.255.255  Mask:255.0.0.0
          inet6 addr: fe80::2ac:cff:feae:42d0/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:6972 errors:0 dropped:0 overruns:0 frame:0
          TX packets:128 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500
          RX bytes:512250 (500.2 KiB)  TX bytes:25566 (24.9 KiB)

スタートアップスクリプト /etc/init.d/vpnclient を作成。

このスクリプトでは、VPN側のデフォルトゲートウェイの優先順位を上げて、インターネットへの接続にVPNを使うようにし、VPNサーバー(130.158.6.0/24)へは、物理インターフェースのゲートウェイを使うようにしています。デフォルトゲートウェイやインターフェース名を必要に応じて変更する必要があります。Windows版のクライアントでは自動で設定されますがLinux版は手動で設定する必要があります。

サービスが開始した際に、ルーティングテーブルを変更する前にsleepが挿入されていますが、これはサービスを起動した際にすぐレスポンスが帰ってしまうので、接続後にルーティングテーブルを変更するために少し時間を空けています。もしこの時間以内に接続が完了しなければ、この後に接続完了してもルーティングテーブルが更新されていないためにVPN経由の接続は出来ません。sleepの値は必要に応じて変更する必要があるかもしれません。

このサービスはネットワークサービスの後に起動する必要があります。openSUSE, Fedora以外ではこのスクリプトを変更するか、手動でrc.d以下を修正する必要があるかもしれません

#!/bin/sh

### BEGIN INIT INFO
# Provides:                     vpnclient
# Required-Start:               $local_fs $remote_fs $network
# X-UnitedLinux-Should-Start:   $named $time
# Required-Stop:                $local_fs $remote_fs $network
# X-UnitedLinux-Should-Stop:
# Default-Start:                3 5
# Default-Stop:                 0 1 2 6
# Short-Description:            PacketiX VPN Client 2.0
# Description:                  Start the vpnclient daemon PacketiX VPN Client 2.0
# chkconfig: 35 99 30
### END INIT INFO

GW=192.168.0.1                          # Default Gateway
ETH=eth0                                # Physical Adapter
VPN=vpn_1                               # VPN Adapter

DAEMON=/usr/local/vpnclient/vpnclient
LOCK=/var/lock/subsys/vpnclient
IFUP=/sbin/ifup
ROUTE=/sbin/route

test -x $DAEMON || exit 0
case "$1" in
    start)
        $DAEMON start
        touch $LOCK
        sleep 10        # Adjust according to your env
        $IFUP vpn_1
        $ROUTE add default gw $GW netmask 0.0.0.0 metric 20 $ETH
        $ROUTE del default gw $GW netmask 0.0.0.0 metric 0 $ETH
        $ROUTE add default gw 10.0.0.1 netmask 0.0.0.0 metric 0 $VPN
        $ROUTE add -net 130.158.6.0 netmask 255.255.255.0 gw $GW metric 0 $ETH
        ;;
    stop)
        $DAEMON stop
        rm $LOCK
        ;;
    restart)
        $0 stop
        sleep 3         # Adjust according to your env
        $0 start
        ;;
    *)
        echo "Usage: $0 {start|stop|restart}"
        exit 1
esac
exit 0

実行権限を追加して、自動起動に設定

# chmod 755 vpnclient
# chkconfig vpnclient on
# chkconfig --list | grep vpnclient
vpnclient       0:off   1:off   2:off   3:on    4:off   5:on    6:off

VPN Clientを起動

# /etc/init.d/vpnclient start
PacketiX VPN Client Service Started.

確認

再起動、またはランレベルをシングルユーザーに変更してから3, 又は5にして自動でVPNに接続するか確認する。たとえば、、、

# telinit 1
...
# telinit 5

/usr/local/vpnclient/client_log/以下のログファイルで、接続完了しているか確認する。

...
2007-03-12 00:44:28.163 接続設定 "セキュアインターネット接続": 接続が完了しました。セッション名: "SID-PUBLIC-111111"

ifconfigでアドレスを取得しているか確認

# ifconfig
...
vpn_1     Link encap:Ethernet  HWaddr 00:AC:0C:AE:42:D0
          inet addr:10.1.207.35  Bcast:10.255.255.255  Mask:255.0.0.0
...

ping, tracerouteコマンドでVPN経由で接続しているか確認

# ping www.google.com
...
# traceroute www.google.com
...

vpn_1にアドレスがあるのに接続できない場合はルーティングテーブルを確認。以下のように130.158.6.0/24への経路が必要です。もし、このようなルーティングテーブルになっていない場合は、/etc/init.d/vpnclientスクリプトをもう一度確認する。

# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.0.0     *               255.255.255.0   U     0      0        0 eth0
130.158.6.0     192.168.0.1     255.255.255.0   UG    0      0        0 eth0
link-local      *               255.255.0.0     U     0      0        0 eth0
10.0.0.0        *               255.0.0.0       U     0      0        0 vpn_1
loopback        *               255.0.0.0       U     0      0        0 lo
default         10.0.0.1        0.0.0.0         UG    0      0        0 vpn_1
default         192.168.0.1     0.0.0.0         UG    20     0        0 eth0

ブラウザーで確認君(http://www.ugtop.com/spill.shtml)を表示して、クライアントホスト名がsoftetherになっているか確認するのが簡単かもしれません。


Back Support & License Agreement

Google
Web www.grape-info.com