ReadyNAS Ultra‎ > ‎

VPN

VPNもAdd-onで見つかればよかったのですが見つからなかったです。代わりにPPTPサーバを動かす方法が見つかったので、実践してみることにしました。
モジュールのコンパイル作業なども必要なので、あくまで所有しているマシン、Ultra4についてになります。

参考資料

準備

コンソール作業が必須なので、まずはEnable Root SSH Add-onをインストールしておく。

pptpd

インストール

apt-getコマンドでpptpdをインストールする。
まずは、apt-get自身のアップデートを行う。

# apt-get update

Get:1 http://www.readynas.com 4.2.22/ Release.gpg [490B]
Ign http://www.readynas.com 4.2.22/ Translation-ja
Get:2 http://archive.debian.org etch Release.gpg [1033B]
Ign http://archive.debian.org etch/main Translation-ja
Get:3 http://www.readynas.com 4.2.22/ Release [2364B]
Get:4 http://archive.debian.org etch Release [67.8kB]
Get:5 http://www.readynas.com 4.2.22/ Packages [37.1kB]
Get:6 http://archive.debian.org etch/main Packages [5477kB]
Fetched 5586kB in 16s (346kB/s)
Reading package lists... Done

次に、pptpdのインストールを行う。

# apt-get install pptpd build-essential

Reading package lists... Done
Building dependency tree... Done
The following extra packages will be installed:
  bcrelay binutils bzip2 cpp cpp-4.1 dpkg-dev g++ g++-4.1 gcc gcc-4.1
  libc6-dev libssp0 libstdc++6-4.1-dev libtimedate-perl linux-libc-dev make
  patch ppp
Suggested packages:
(略)

設定ファイル編集

pptpd.conf にIPの割り当て設定を記述する

# vi /etc/pptpd.conf

以下の設定を追加する。

# pptpの動作しているマシンのIPアドレス

localip 192.168.2.202
# クライアントに割り当てる範囲
remoteip 192.168.2.90-99

サーバのIPアドレスを指定する。ReadyNASを固定IPで運用していない場合はどうすればいいか分からない。
クライアントに割り当てるIPの範囲は、DHCPの割り当て範囲と被らないように注意。 

chap-secrets に接続するユーザとパスワードを記述する

# vi /etc/ppp/chap-secrets

ユーザ名、サーバ名、パスワード、IP、の4項目を1行に記述する。

# Secrets for authentication using CHAP

# client        server  secret                  IP addresses
username * pasuwa-do *

サーバ名、IPの項目は接続制限を更に厳しくする場合に指定するようだ。今回は指定しない。

pptpdのオプション設定を行う

chap-secrets ファイルに option /etc/ppp/pptpd-options という記述があるので、オプションについてはこのファイルを編集する。

# vi /etc/ppp/pptpd-options

標準でMS-CHAPv2と128bitMPPEを使用する設定になっている。これが一番強い暗号化らしいのでそのままにしておく。

# Encryption

# Debian: on systems with a kernel built with the package
# kernel-patch-mppe >= 2.4.2 and using ppp >= 2.4.2, ...
# {{{
refuse-pap
refuse-chap
refuse-mschap
# Require the peer to authenticate itself using MS-CHAPv2 [Microsoft
# Challenge Handshake Authentication Protocol, Version 2] authentication.
require-mschap-v2
# Require MPPE 128-bit encryption
# (note that MPPE requires the use of MSCHAP-V2 during authentication)
require-mppe-128
# }}}

sysctl.conf を編集し、IPフォワードを許可する

# vi /etc/sysctl.conf

net.ipv4.ip_forward=1

変更した設定を反映させる。
 

# /sbin/sysctl -p

pptpdを自動起動するようにする

debianでは自動起動スクリプトは /etc/init.d/ に置き、/etc/rc0.d/ ~ rc6.d/ にシンボリックリンクを置くとのこと。
シンボリックリンクを置いてくれる update-rc.d コマンドを使って自動起動するように設定する。
 

# update-rc.d pptpd defaults

 
自動起動を解除する場合は

# update-rc.d pptpd remove

手動でサービスを起動する場合は

# /etc/init.d/pptpd start

お膳立て

pptp接続のためには /dev/ppp というノードが必要となる。
このノードは再起動すると消えてしまうため、起動スクリプトで自動的に作成するようにしておく。

# cp /etc/init.d/rc.local /etc/init.d/create_ppp

# vi /etc/init.d/create_ppp

ノード作成コマンド do_start()内に記述。

do_start() {
        mknod /dev/ppp c 108 0
}

作成したスクリプトを自動起動するようにする。

# update-rc.d create_ppp defaults
 Adding system startup for /etc/init.d/create_ppp ...
   /etc/rc0.d/K20create_ppp -> ../init.d/create_ppp
   /etc/rc1.d/K20create_ppp -> ../init.d/create_ppp
   /etc/rc6.d/K20create_ppp -> ../init.d/create_ppp
   /etc/rc2.d/S20create_ppp -> ../init.d/create_ppp
   /etc/rc3.d/S20create_ppp -> ../init.d/create_ppp
   /etc/rc4.d/S20create_ppp -> ../init.d/create_ppp
   /etc/rc5.d/S20create_ppp -> ../init.d/create_ppp

カーネルモジュール構築

pptpカーネルモジュールが無いので、自前でビルドする必要がある。
ディレクトリに含まれるバージョンは適宜読み替えてください。

ソースのダウンロードと展開

まず、作業ディレクトリへ移動する。場所はどこでもいいですが、共有されているディレクトリにしておくと、Windowsからエクスプローラで操作することもできるのでお勧めです。

# cd /c/media/rndsource/

次に、ReadyNASのソースをダウンロードします。自分のマシンで稼働中のバージョンを選びます。かなりサイズが大きいので注意します。
ダウンロード化完了したら、kernelディレクトリのみ展開します。

# wget http://www.downloads.netgear.com/files/GPL/RNDP6xxx_4.2.22_WW_src.zip

# unzip -q RNDP6xxx_4.2.22_WW_src.zip kernel/* -d /c/media/rndsource/

ビルド作業

展開が完了したら、環境に合わせて .config ファイルをコピーしてきます。
CPUが64bitの場合は.smp。32bitの場合は.upをコピーします。

# cp defconfig.smp linux-2.6.37.6/.config

 

# cd linux-2.6.37.6/

# make oldconfig
# make all
コンパイルは結構時間がかかります。待ちます。

# make menuconfig

キャラクターベースのグラフィカルなメニューが表示されます。ここで新たにインストールしたいモジュールを選択します。
ここでの選択状態をざっと引用しておきます。
Device Drivers -> Network Support -> PPP (Point-to-Point protocol) support:
  x x    <M>   PPP (point-to-point protocol) support                      x x
  x x    [ ]     PPP multilink support (EXPERIMENTAL) (NEW)               x x
  x x    [*]     PPP filtering                                            x x
  x x    <M>     PPP support for async serial ports                       x x
  x x    <M>     PPP support for sync tty ports                           x x
  x x    <M>     PPP Deflate compression                                  x x
  x x    < >     PPP BSD-Compress compression (NEW)                       x x
  x x    <M>     PPP MPPE compression (encryption) (EXPERIMENTAL)         x x
  x x    <M>     PPP over Ethernet (EXPERIMENTAL)                         x x
  x x    < >   SLIP (serial line) support                                 x x
 
Cryptografic API:
  x x    -*-   CRC32c CRC algorithm                                       x x
  x x    <M>   CRC32c INTEL hardware acceleration                         x x
  
  x x    {M}   SHA1 digest algorithm                                      x x
  x x    <M>   SHA224 and SHA256 digest algorithm                         x x
  x x    <M>   SHA384 and SHA512 digest algorithms                        x x
 
Library Routines:
  x x    {M} CRC-CCITT functions                                          x x
 

インストール

保存したらモジュールをビルド、インストールします。

# make modules

# make modules_install
  INSTALL arch/x86/crypto/crc32c-intel.ko
  INSTALL crypto/sha1_generic.ko
  INSTALL crypto/sha256_generic.ko
  INSTALL crypto/sha512_generic.ko
  INSTALL drivers/net/ppp_async.ko
  INSTALL drivers/net/ppp_deflate.ko
  INSTALL drivers/net/ppp_generic.ko
  INSTALL drivers/net/ppp_mppe.ko
  INSTALL drivers/net/ppp_synctty.ko
  INSTALL drivers/net/pppoe.ko
  INSTALL drivers/net/pppox.ko
  INSTALL drivers/net/slhc.ko
  INSTALL drivers/scsi/scsi_wait_scan.ko
  INSTALL lib/crc-ccitt.ko
  DEPMOD  2.6.37.6.RNx86_64.2.4
 
成果物ができているか確認。

# ls /lib/modules/`uname -r`/kernel/drivers/net

ppp_async.ko    ppp_generic.ko  ppp_synctty.ko  pppox.ko
ppp_deflate.ko  ppp_mppe.ko     pppoe.ko        slhc.ko
# ls /lib/modules/`uname -r`/kernel/lib | grep -i crc
crc-ccitt.ko
# dmesg | grep -i ppp
PPP generic driver version 2.4.2

 
この状態でも動くはずですが、pptpdの自動起動の確認も含めて念のため再起動します。

動作確認

ローカルのPCからでも接続テストは可能です。WindowsXPマシンから接続してみます。
  1. 新しい接続ウィザードより、職場のネットワークへ接続を選択。
  2. 仮想プライベートネットワーク接続を選択。
  3. 接続に名前を付け、最初の接続にダイヤルしないを選択。
  4. NASのホスト名 or IPアドレスを入力。
  5. ウィザードが完了したらその流れでユーザ名をパスワードを入力して接続してみる。

上手くいかないとき

原因調査をするにあたって、/etc/pptpd.conf の debugオプションをコメントアウトして有効にすると捗ります。
/var/log/syslog に詳細なログが出力されるので、どの段階でコケているのか原因がすぐにわかります。具体的な対処方法も出力されます。

出力ログの例1

Jan 14 17:22:03 nas-101 pppd[10066]: Plugin /usr/lib/pptpd/pptpd-logwtmp.so loaded.
Jan 14 17:22:03 nas-101 pppd[10066]: pppd is unable to open the /dev/ppp device. You need to create the /dev/ppp device node by executing the following command as root: ^Imknod /dev/ppp c 108 0

/dev/ppp が無いよ、mknod コマンドで作ってよ、と言われました。言われたとおりにして事なきを得ました。

# mknod /dev/ppp c 108 0


出力ログの例2

Jan 14 18:47:55 nas-101 pppd[20753]: This system lacks kernel support for PPP.  This could be because the PPP kernel module could not be loaded, or because PPP was not included in the kernel configuration.  If PPP was included as a module, try `/sbin/modprobe -v ppp'.  If that fails, check that ppp.o exists in /lib/modules/`uname -r`/net. See README.linux file in the ppp distribution for more details.

modprobeを実行してみてよ、と言われました。pptpモジュールの構築をしなかった/できていないときに出力されます。
 
 
Comments