PPTPサーバ作成

今回の動機

2chユーザにとってiPhoneってかなり使いやすい閲覧デバイスだと思うんですが、最近ではiPhoneの書き込み規制が尋常じゃなく使い物になりません。私もp2とか●とか買って書き込めるようにしようか迷いましたけど、「iPhoneを自宅にVPNでログインして書き込めばいいんじゃね?」って気付きました。
iPhoneが接続可能なVPNの種類は「L2TP」「PPTP」「IPSec」の3種類。今まで自宅サーバには「L2動作で汎用性が高い」&「全ての通信がTCP/UDPに乗るのでNAT超えが楽チン」という理由から「OpenVPN」を仕込ませていましたがiPhoneからはどう足掻いても使えないっぽいです。
なので今回はLinkStation(LS-XHL)に比較的簡単に導入できる「pptpd(PPTP)」をインストールして、iPhoneから利用できるようにしてみようと思います。

作業手順

すんなり行けば簡単に設定できるはずなので、あんまり詳しくは説明しません。というか後で自分で思い出すためのメモ用です。

LinkStation(LS-XHL)の準備

まだdebian化してない場合はKirkwood Hack Blogさんのエントリを参考に環境を構築してください

pptpdのインストール
sudo apt-get install pptpd
/etc/sysctl.confの修正
net.ipv4.ip_forward=1

↑の行をコメントアウトしてフォワードできるようにします。

pptpd設定ファイル(/etc/pptpd.conf)の内容
option /etc/ppp/options.pptpd
localip  192.168.1.201-210
remoteip 192.168.1.211-220

localipはpptpdの居るネットワークと同じIPアドレスを指定、remoteipはPPTPで接続する側に割り当てられるアドレスを指定します。両方ともDHCPで配られない範囲のアドレスを指定します。

pptpdオプションファイル(/etc/ppp/options.pptpd)の内容
lock
nodefaultroute
name godmelon-pptp
auth
proxyarp
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
ms-dns  192.168.1.1
#ms-wins 192.168.1.1
debug
nobsdcomp
novj
novjccomp
logfile /var/log/pptpd.log

必ずmschap-v2で認証し、mppe-128で通信暗号化するように指定します。(これ以外の方式は脆弱性が高いらしいです)

認証ユーザ設定ファイル(/etc/ppp/chap-secrets)の内容
user            *       "passwd"               *

↑は見本なので実際は、userの文字列を「ユーザ名」に、passwdの文字列を「パスワード」に変えます。

必要なモジュールを読み込ませる(/etc/modules)
bridge
ipv6
tun
ecb
pcbc
ppp_generic
ppp_deflate
ppp_async
ppp_mppe
ppp_synctty

alias ppp-compress-18 ppp_mppe
alias ppp-compress-21 bsd_comp
alias ppp-compress-24 ppp_deflate
alias ppp-compress-26 ppp_deflate

bridgeとかtunとかはOpenVPN用なので要らないと思います。

再起動

ここまでできたら一旦再起動します。正常に動作しているなら、

netstat -tul
tcp        0      0 *:1723                  *:*                     LISTEN

TCP1723番で待機して、

lsmod
Module                  Size  Used by
ppp_synctty             8096  0
ppp_mppe                6916  0
ppp_async               9632  0
crc_ccitt               1728  1 ppp_async
ppp_deflate             5248  0
ppp_generic            24148  4 ppp_synctty,ppp_mppe,ppp_async,ppp_deflate
slhc                    5760  1 ppp_generic
pcbc                    4576  0
ecb                     2944  0
tun                     9056  0
ipv6                  262500  26
bridge                 44054  0
llc                     5876  1 bridge
mvsdmmc                12484  0

ppp_mppeモジュールまで有効化されている事が確認できるはずです。

ブロードバンドルータの設定

今までの設定でpptpdを動作させると、VPN通信のためにTCPの1723番とGREプロトコルを使います。ブロードバンドルータの設定で「TCPの1723番をポートフォワード」、「VPNパススルー」の2点を有効化します。

動作試験


iPhonePPTPで接続すると右上にVPNってアイコンが出ます。



VPNに繋いでない状態だと、書き込み規制で書き込めません。



VPNに繋いだ状態だと問題なく書き込めました。勿論末尾はO(携帯)とかi(iPhone)では無く、0(固定回線)判定になります。