リモートアクセス

PPTP

別の節でも書いたけれど、ここでは、どちらかというと技術的な細かいこと を書く。

NAT付きのルータを超えられない(超えるには技がいる)という問題はあるものの、 普通のユーザーが、プライベートアドレス空間に設置された仮想サーバーに アクセスするための手段としては、Windowsに標準に備わっている VPN機能(PPTP)を 使う以外に現実的な解答はなさそうだ。

ただ、VPNの本来の使い方としては、セキュリティの強化という面が強いのだが、 今回は、セキュリティについては何も考慮せずに、「ファイヤウォールの向こう側に あるサーバーにアクセスするための手段」としてだけ使う。
セキュリティについては、VPNの枠組みでなく、アクセスされる側のサーバーの 設定に任せることにする。

言い換えると、VPNのためのパスワードは、公開パスワード状態での運用を する。例えば、ユーザー名:guest, パスワード: guest のような状態での 運用をする。

poptopを使った場合

FreeBSDの場合、いくつかのパラメータがプログラムに埋め込みになっていて、 設定ファイルで設定しても反映されない。(もちろん、将来的には変わるかも しれない)

portsからインストールすると、/usr/local/etc/pptpd.conf.sample という 名前のファイルができる。このままだと全文がコメント状態なので 何か設定したくなるが、ここで何を設定しても反映されないの。
ただし、/usr/local/etc/pptpd.conf という名前のファイルが存在しないと プログラムが起動しないので、そのまま /usr/local/etc/pptpd.conf という 名前に変更する。
/usr/local/etc/rc.d/pptpd.sh.sample も同様。

pptpdはコンパイル時に、ユーザーモードの pppか、カーネルモードの pppd のどちらを使っているかをチェックしている。カーネルモードの pptpdを利用する場合は、poptopのコンパイル時に、WITH_KERNPPPを 定義する。
この場合には、/usr/local/etc/pptpd.conf の内容も有効になる。

カーネルモードのpppdを利用する場合の pptpd.conf のサンプル

option /etc/ppp/options.pptpd
localip 192.168.2.254
remoteip 192.168.2.201-238,192.168.2.250
poptopの解説をインターネットで調べると、カーネルモードのpppdを 前提に記述されていることが多いので気をつけよう。

説明には、optionファイルや、chap-secretファイルを用意するように書かれているが これらを参照することはない。パスワードは、/etc/ppp/ppp.secretに記述する。

ppp.conf のエントリも、pptp: で固定である。これ以外の名前で定義しても 動作しない。( 要するに、ユーザーモードpppを使う場合には、 /usr/sbin/ppp -direct pptp が呼び出されることが プログラムに埋め込まれている。 )

アドレスの割り当ては、ppp.confに

set ifaddr 192.168.2.254 192.168.2.201-192.168.2.250 255.255.255.0

のように記載する。上の例では同時に50ヶ所から PPTPアクセスができる。
クライアントには、192.168.2.201から192.168.2.250のどれかのアドレスが割り当てられ、 RASサーバーには、192.168.2.254が割り当てられる。( 実際には大きい方のアドレスから 順に割り当てられているみたいだ)

接続してきたクライアント同志が通信できてしまうのもいやなので、 これらのアドレス間の通信はできないように設定しておく。
RASサーバーに割り当てられたアドレスでは何もサービスを動かさない。

仮想サーバー達には、192.168.2.1-192.168.2.200の範囲で (まあ、1IPならせいぜい30個とか50個くらいが実用の範囲だと思う) 適当に割り当てておく。

クライアント側の注意

Windows NT/98 以降では OSに標準で PPTPによるリモートアクセス機能が 備わっていると書いたが、必ずしも標準でインストールされているわけでは ない。
例えば、Windows 98 では、アプリケーションの追加と削除で、 「Windowsファイル」の「通信」から「仮想プライベートネットワーク」の機能を 追加インストールする必要がある。 Windows 2000では、標準でインストールされている。Windows 95では 追加の機能をダウンロードしてインストールすればよいらしいが、 もうサポートも切れていることだし、今でもダウンロードできるか どうかは不明だ。

クライアントが、NAT機能付きのルータを使っている場合は、 ルータが PPTPパススルー( VPNパススルーと呼ばれることもある )機能に 対応していないといけない。
ルータが対応していても、設定なしでは機能しないことが多いだろう。
設定の仕方はルータによって違うのでここでは説明しない。
端的に言えば、外からきた greパケットを、クライアントのPCに転送する機能が必要だ。

pptpclient

FreeBSD用のPPTPクライアントを探すと、pptpclientというものがあるのだが、 どうもうまくつながらない。( &rarrow; つながった。文章を整理中 m∩m)
portsから普通にインストールすると、ユーザーモードpppを使うようにコンパイルされる のだけれども、どうも認証で失敗しているようだ。
カーネルモードのpppdを使うようにコンパイルし直すと、なんとかつながる。

pptp pptpサーバーのホスト名 name ユーザー名
chap-secretにパスワードを記載しておく。

PPTPサーバーの方は、ユーザーモードpppを使ったものでも、カーネルモードpppdを 使ったものでもどちらでもつながる。
ただ、つながり方が多少違うようだ。もしかしたら、暗号化されていないかもしれない。 カーネルモードpppdだと、MS-CHAPV2/MPPEが使えないので、パスワードは暗号化されるが 通信そのものは暗号化されない。

ユーザーモードの方がサポートしている機能が多いみたいだけれど、 poptopやpptpclientは、主に linux上の pppd-2.4(カーネルモード)で 主にデバッグされている感じ。FreeBSDのpppdは2.3相当なので、機能に多少 違いがある。MS-CHAPV2やMPPEは2.3ではサポートされていないので、 linux上での解説があまりあてにならない。
設定の変更で対応できるのなら、FreeBSD上ではユーザーモードpppを使うように したほうが無難なのだが。

ユーザーモードでつなぐ場合は、パスワードの記載方法に注意。 CHAPの場合はサーバー側のパスワードが CHARENGE/RESPONSEに使われる。 ... 詳細は後日