一般に Linux を PPTP サーバとして利用するには以下のものが必要です。
1. の MPPE パッチを当てなくても PPTP 自体は利用できますが、 MS-CHAPv2 (認証方式) や MPPE-128bit (暗号化方式) が使えないので、 セキュリティ的に問題があります。
OpenBlockS の Linux カーネルにパッチを当てる方法としてはいくつか考えられますが、 i386 版 SSD/Linux で PowerPC 用 SSD/Linux をクロスビルドし、 その途中で MPPE パッチを当てておくのが最も楽だと思います。
別紙「OpenBlockSをほげってみる」 のとおりにクロスビルド環境を整えた上、以下の2つのパッチを入手します。
1. の MPPE 機能追加パッチのうち、2.4.26 用のものは Debian GNU/Linux の kernel-patch-mppe パッケージから取り出したパッチを私が SSD/Linux のカーネルソースツリーに 適用して、.rej が出たところは手で編集したものです。 2.6.12 用のものは kernel-patch-mppe パッケージに入っているものそのままです。 SSD/Linux のバージョンが 0.3 なら 2.4.26 用を、0.4 なら 2.6.12 用を使ってください。 このパッチは SSD/Linux ソースツリーのカーネルパッチの置き場所 (/usr/src/mkdist/kernel/2.x.x) に置きます。
client$ wget http://www.luna2.org/~yatt/dist/linux-2.4.26-mppe-20060204.patch client$ wget http://www.luna2.org/~yatt/dist/linux-2.6.4-mppe-20040216.patch client$ scp linux-2.4.26-mppe-20060204.patch root@ssdlinux: client$ scp linux-2.6.4-mppe-20060216.patch root@ssdlinux: ssdlinux# mv ~/linux-2.4.26-mppe-20060204.patch /usr/src/mkdist/kernel/2.4.26 ssdlinux# mv ~/linux-2.6.4-mppe-20040216.patch /usr/src/mkdist/kernel/2.6.12
2. のパッチは SSD/Linux のソースツリーに当てます。 中身は Makefile.inc と .config に MPPE 関係の行を付け加えて 1. のパッチを有効にするものです。
client$ wget http://www.luna2.org/~yatt/dist/ssdlinux-mppe.diff client$ scp ssdlinux-mppe.diff root@ssdlinux: ssdlinux# cd / ssdlinux# patch -p0 < ~/ssdlinux-mppe.diff
ソースツリーを cvs update した場合はこのパッチの内容が消えるので、 パッチを再適用してください。
あとは bmake build するだけです。 途中、MPPE を有効にするかどうか質問されますので y と答えてください。
ssdlinux# cd /usr/src ssdlinux# bmake CROSS_BUILD=powerpc OPENBLOCKS=obs266 DESTDIR=/home/dest build (略) PPP MPPE compression (encryption) (CONFIG_PPP_MPPE) [N/y/m/?] (NEW) y (略) ssdlinux# cd distrib ssdlinux# bmake CROSS_BUILD=powerpc OPENBLOCKS=obs266 DESTDIR=/home/dest bootfs ssdlinux# cd powerpc-obs2xx/product/treeboot ssdlinux# scp zImage.initrd.treeboot-product root@obs266: obs266# flashcfg -f zImage.initrd.treeboot-product
私の OpenBlockS 箱は Debian GNU/Linux 3.1 (sarge) をインストールした状態で常用しているので、 PPP サーバ (パッケージ名 ppp) は既にインストールされていました。 バージョンも 2.4.3-20050321 で、MPPE-128bit に対応済みです。
PPTP サーバのほうもパッケージでインストールするだけで OK です。
obs266# apt-get install pptpd
PPTP サーバの設定は以下のようにします。
obs266# vi /etc/pptpd.conf option /etc/ppp/pptpd-options logwtmp localip 192.168.1.254 remoteip 192.168.1.244-253
localip は PPTP サーバ側の ppp0 インターフェイスに振る IP アドレスを 指定します。 普通は LAN 内のアドレス体系のうちの一つを振れば OK でしょう。 LAN 側インターフェイス (eth0) と同じ IP アドレスを振っても問題なく動作するようです。
remoteip は PPTP クライアントに振るアドレスです。 同時接続を許可する数の分だけ IP アドレスを確保しておきます。
PPTP サーバから呼ばれたときの PPP サーバの動作設定は以下のようにします。
obs266# vi /etc/ppp/pptpd-options name pptpd refuse-pap refuse-chap refuse-mschap require-mschap-v2 require-mppe-128 ms-dns 192.168.1.13 proxyarp nodefaultroute lock nobsdcomp
PAP、CHAP、MS-CHAP は全て拒否、MS-CHAPv2 と MPPE128 でしか接続できないように設定します。 name 行は chap-secrets ファイルで利用するためのネームタグです。 適当に設定して OK。
PPP のユーザとパスワードを設定して準備完了です。
obs266# vi /etc/ppp/chap-secrets user1 pptpd "hogehoge" *
ユーザ名 user1、パスワード hogehoge でログインします。 第2フィールドの pptpd は /etc/ppp/pptpd-options の name 行で設定したものを書きます。
Windows 2000/XP には標準で PPTP クライアント機能が搭載されているので、 それを利用します (ただし Windows 2000 は SP2/暗号化アップグレード以上で 128bit 鍵長に対応とのこと)。
以下の記述では Windows XP SP2 を例にしています。
「ネットワーク接続」ウインドウを開き、左の「新しい接続を作成する」 または「ファイル」メニューから「新しい接続(N)...」を選択します。
「新しい接続ウィザード」が開きます。
「次へ」を選択して進むと、接続の種類の選択画面になります。 「職場のネットワークへ接続する」を選択して「次へ」。
ダイヤルアップか VPN かを選択します。 「仮想プライベート ネットワーク接続(V)」を選択して「次へ」。
接続の名前を決定します。例では「自宅」となっていますが 何でも良いです。適当に決めて「次へ」。
Linux PPTP サーバのグローバル IP アドレスを指定します。
以上で接続の作成は終了です。「完了」をクリックします。
ウィザードが閉じられて接続ダイアログが表示されますので、 サーバで設定したユーザ名とパスワードを入力してください。 サーバ側の設定により、認証と暗号化は自動的に「MS-CHAPv2・MPPE128」 が選ばれるはずですが、クライアント側でも指定するならば「プロパティ」 を開きます (そのまま「接続」しても OK)。
接続のプロパティを開き、「セキュリティ」タブを選択します。 デフォルトでは「セキュリティで保護されたパスワードが必要」 なので CHAP 以上の認証方式を使い、「データの暗号化を必ず要求する」 にチェックがついていないので、 暗号化を使うかどうかはネゴシエーション次第になります (サーバ側で MS-CHAPv2 と MPPE128 しか許可していないので、これでも 問題ありません)。
あえて手動で設定するなら下の「詳細 (カスタム設定)(D)」を選択して 「設定」ボタンを押します。
上のメニューでは「最強の暗号化」を選択し、下の認証方式では 「Microsoft CHAP Version 2」だけにチェックをつけます。 これでクライアント側でも強制的に MS-CHAPv2 と MPPE128 を使用するようになります。
接続画面に戻って、「接続」ボタンを押すと PPTP サーバに接続しに行きます。 以下のようなダイアログが出た後、認証とネゴシエーションに成功すれば タスクトレイにアイコンが出て、接続完了です。
現在の接続状態を確認するには、 タスクトレイのアイコンを右クリックしてメニューから「状態」を選び、 状態プロパティ画面を出します。
「詳細」タブをクリックすると現在の認証と暗号化方式が確認できます。
PPTP で利用するポートは TCP/1723 番と GRE (IP プロトコル番号 47) です。 この2つの通信が Linux PPTP サーバまで届くようにファイアウォールを 設定しておく必要があります。 私の場合は Linux PPTP サーバ自身が自宅のルータ/FWを兼ねていますので、 WAN 側インターフェイスからそれらのプロトコルを受けられるようにすることに なります。
# vi /var/lib/iptables/active
(以下の4行を追加)
-A INPUT -d a.b.c.d -i eth1 -p tcp -m tcp --dport 1723 -j ACCEPT
-A INPUT -d a.b.c.d -i eth1 -p gre -j ACCEPT
-A INPUT -i ppp0 -j ACCEPT
-A FORWARD -i ppp0 -j ACCEPT
a.b.c.d は WAN 側グローバルアドレスです。
INPUT チェインのデフォルトを DROP にしているなら、PPTP の使う仮想インターフェイス ppp0 からの INPUT も開けてやらねばなりませんので、上の3行目が必要です。 同様に、FORWARD チェインのデフォルトが DROP なら、 上記の4行目が必要です。
クライアントの PPTP 接続を普通に作成すると、 実際に PPTP 接続したときにデフォルトゲートウェイが PPTP サーバになります。
C:\Documents and Settings\yatt>netstat -rn
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 192.168.100.250 192.168.100.202 30
0.0.0.0 0.0.0.0 192.168.1.244 192.168.1.244 1
127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1
192.168.1.244 255.255.255.255 127.0.0.1 127.0.0.1 50
192.168.1.255 255.255.255.255 192.168.1.244 192.168.0.244 50
224.0.0.0 240.0.0.0 192.168.1.244 192.168.1.244 50
224.0.0.0 240.0.0.0 192.168.100.202 192.168.100.202 30
(略)
ルーティング表示の1行目が最初からあるデフォルトゲートウェイです。 それよりも優先度の高い (メトリック値の低い) デフォルトゲートウェイが 2行目にできてしまったために、あらゆる通信が PPTP トンネル側へ 入っていってしまいます。
すべて自宅経由にするならこれでも良いのですが、私は
という形態にしたいと思います。 そのためには、クライアントの接続設定を少し変更します。 まずはタスクトレイのアイコンから接続のプロパティを開いて、 「ネットワーク」タブを選択してください。
この中の「インターネット プロトコル (TCP/IP)」を選択し、 「プロパティ」を押します。
「インターネット プロトコル (TCP/IP) のプロパティ」が開きますので、 「詳細設定(V)...」ボタンを押します。
「全般」タブを選択し、 「リモート ネットワークでデフォルト ゲートウェイを使う(U)」 のチェックボックスを外します。 これで VPN トンネル方向にはデフォルトゲートウェイが作成されなくなります。 あとは「OK」を押してプロパティを閉じてください。
以上の設定を終えた後、ルートテーブルを見ると以下のようになります。
C:\Documents and Settings\yatt>netstat -rn
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 192.168.100.250 192.168.100.202 30
127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1
192.168.1.0 255.255.255.0 192.168.1.244 192.168.1.244 1
192.168.1.244 255.255.255.255 127.0.0.1 127.0.0.1 50
192.168.1.255 255.255.255.255 192.168.1.244 192.168.0.244 50
224.0.0.0 240.0.0.0 192.168.1.244 192.168.1.244 50
224.0.0.0 240.0.0.0 192.168.100.202 192.168.100.202 30
(略)
ご覧のように、デフォルトゲートウェイはローカルネットワークへの1つだけで、 トンネル方向には作成されていません。 3行目に自宅ネットワーク (192.168.1.0/24) へのスタティックルートが 作られているので、自宅へは問題なく接続できます。
最終的に出来上がったネットワーク構成は以下のようなものです。
とりあえず Google の網で引っかかった参考文献をリストアップ。 ほかにもぐぐれば色々見つかります。