iPad2で自宅環境にVPNで接続した時の備忘録です。

■ネットワークイメージ図


■説明
iPad2から先日契約したEモバのGP02を使ってインターネットに出ていき自宅にあるVPNサーバへ接続してみました。
VPNサーバにはpptpdを使用します。
※正直、iPad2の接続方法でハマりました・・・orz
pptpdはrpmパッケージ化してインストールします。

■使用OS
CentOS 6.0 64bit

■サーバのIP
192.168.0.97

■pptpdバージョン
pptpd-1.3.4
※最新版は下記URLを参照してください。
http://sourceforge.jp/projects/sfnet_poptop/releases/

■pppバージョン
2.4.5-5.el6

■使用するポート
TCP 1723
GRE(47)

■補足
iptables , selinux は off にしています。iptablesなどは適切に設定してください。

(1)ルーターの設定
ルーターで使用するポートをVPNサーバに対して開けてください。
うちの環境は、Atermを使用しているので参考文献1を参照しました。

(2)必要なパッケージのインストール

[root@example ~]# yum -y install ppp tcp_wrappers rpm-build

(3)pptpd-1.3.4.tar.gzをダウンロード
[root@example ~]# wget http://sourceforge.net/projects/poptop/files/pptpd/pptpd-1.3.4/pptpd-1.3.4.tar.gz/download?use_mirror=cdnetworks-kr-1

(4)pptpd-1.3.4のrpmパッケージ化
[root@example ~]# mkdir -p rpmbuild/{SOURCES,SPECS}
[root@example ~]# tar zxvf pptpd-1.3.4.tar.gz pptpd-1.3.4/pptpd.spec
pptpd-1.3.4/pptpd.spec
[root@example ~]# mv pptpd-1.3.4.tar.gz rpmbuild/SOURCES/
[root@example ~]# mv pptpd-1.3.4/pptpd.spec rpmbuild/SPECS/
[root@example ~]# rmdir pptpd-1.3.4/
[root@example ~]# cd rpmbuild/SPECS/
[root@example SPECS]# vi pptpd.spec
(echo '#undef VERSION'; echo '#define VERSION "2.4.3"') >> plugins/patchlevel.h
↓ # pppのバージョン修正
(echo '#undef VERSION'; echo '#define VERSION "2.4.5"') >> plugins/patchlevel.h
[root@example SPECS]# rpmbuild -bb pptpd.spec
※pppのバージョンを修正しないと、接続時にVPNサーバ側でエラーになり接続できません。

(5)pptpdのインストール
[root@example SPECS]# cd ../RPMS/x86_64/
[root@example x86_64]# rpm -ivh pptpd-1.3.4-1.el6.x86_64.rpm
準備中...                ########################################### [100%]
   1:pptpd                  ########################################### [100%]

(6)pptpdのIP設定
[root@example ~]# vi /etc/pptpd.conf
#--最終行にでも追加--
localip 192.168.0.97
remoteip 192.168.0.105-110
・localip -> VPNサーバのIP
・remoteip -> クライアントに付与するIP

(7)pptpdのオプション設定
[root@example ~]# vi /etc/ppp/options.pptpd
ms-dns 192.168.0.1 # 追加(内部DNS)

refuse-pap
↓ # コメントアウト
#refuse-pap

refuse-chap
↓ # コメントアウト
#refuse-chap

refuse-mschap
↓ # コメントアウト
#refuse-mschap

#debug
↓ # コメントアウト削除
debug

logfile /var/log/pptpd.log # 追加

オプション設定の全体は以下のようになる。

name pptpd
#refuse-pap
#refuse-chap
#refuse-mschap
require-mschap-v2
require-mppe-128
ms-dns 192.168.0.1
proxyarp
debug
lock
nobsdcomp
novj
novjccomp
nologfd
logfile /var/log/pptpd.log

(8)認証設定
[root@example ~]# vi /etc/ppp/chap-secrets
# Secrets for authentication using CHAP
# client        server  secret                  IP addresses
user01  pptpd   password        *
・client – > VPN接続時に入力する認証ユーザー名
・server -> nameで設定したもの、アスタリスクでもよい。アスタリスクの場合は全てと言う意味
・secret -> clientで設定したユーザーが利用するVPN接続時のパスワード
・IP address -> VPNで接続してくるクライアントのIPアドレス制限

(9)ip_forwardの設定
[root@example ~]# vi /etc/sysctl.conf
net.ipv4.ip_forward = 0
↓ # 変更
net.ipv4.ip_forward = 1
[root@example ~]# sysctl -p
[root@example ~]# cat /proc/sys/net/ipv4/ip_forward
1
※ip_forwardが1になっていること。

(10)pptpdを起動
[root@example ~]# service pptpd start
Starting pptpd:                                            [  OK  ]
[root@example ~]# ps aux | grep pptpd
root      3633  0.0  0.0   6080   640 ?        Ss   00:18   0:00 /usr/sbin/pptpd
[root@example ~]# chkconfig pptpd on
[root@example ~]# chkconfig --list pptpd
pptpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off
※pptpdのプロセスが起動していること、ここでは自動起動にもしています。

(11)iPad2の設定
1. 「設定」をタッチ
2. 「一般」 -> 「ネットワーク」 -> 「VPN」 -> 「VPN構成を追加」をタッチ



後は、こんな感じに設定する。

3. 「VPN」をオンにする

もし、VPN接続時に以下エラーが発生する場合
・エラー(/var/log/messages)
Aug 11 20:48:23 example pptpd[6898]: CTRL: Client IPアドレス control connection started
Aug 11 20:48:23 example pptpd[6898]: CTRL: Starting call (launching pppd, opening GRE)
Aug 11 20:48:23 example pppd[6899]: Plugin /usr/lib64/pptpd/pptpd-logwtmp.so is for pppd version 2.4.3, this is 2.4.5
Aug 11 20:48:23 example pptpd[6898]: GRE: read(fd=6,buffer=611860,len=8196) from PTY failed: status = -1 error = Input/outpu
t error, usually caused by unexpected termination of pppd, check option syntax and pppd logs
Aug 11 20:48:23 example pptpd[6898]: CTRL: PTY read or GRE write failed (pty,gre)=(6,7)
Aug 11 20:48:23 example pptpd[6898]: CTRL: Client IPアドレス control connection finished

iPadのネットワークをリセットしてください。
「設定」 -> 「一般」 -> 「リセット」 -> 「ネットワーク設定をリセット」をタッチ

iPadはOSをアップデートしたりすると、VPNが繋がらなくなるそうです。
これで、ハマりました。

接続が成功した場合、以下のようにログが出力されます。

・VPNサーバの/var/log/messages
Aug 12 00:32:30 example pptpd[3659]: CTRL: Client IPアドレス control connection started
Aug 12 00:32:30 example pptpd[3659]: CTRL: Starting call (launching pppd, opening GRE)
Aug 12 00:32:30 example pppd[3660]: Plugin /usr/lib64/pptpd/pptpd-logwtmp.so loaded.
Aug 12 00:32:30 example pppd[3660]: pptpd-logwtmp: $Version$
Aug 12 00:32:30 example pppd[3660]: pppd 2.4.5 started by root, uid 0
Aug 12 00:32:30 example kernel: PPP generic driver version 2.4.2
Aug 12 00:32:30 example pppd[3660]: Using interface ppp0
Aug 12 00:32:30 example pppd[3660]: Connect: ppp0 <--> /dev/pts/2
Aug 12 00:32:35 example kernel: PPP MPPE Compression module registered
Aug 12 00:32:36 example pppd[3660]: MPPE 128-bit stateless compression enabled
Aug 12 00:32:36 example pppd[3660]: Unsupported protocol 'IPv6 Control Protocol' (0x8057) received
Aug 12 00:32:37 example pppd[3660]: found interface eth0 for proxy arp
Aug 12 00:32:37 example pppd[3660]: local  IP address 192.168.0.97
Aug 12 00:32:37 example pppd[3660]: remote IP address 192.168.0.105
Aug 12 00:32:37 example pppd[3660]: pptpd-logwtmp.so ip-up ppp0 user01 IPアドレス]

・VPNサーバの/var/log/pptpd.log
Plugin /usr/lib64/pptpd/pptpd-logwtmp.so loaded.
pptpd-logwtmp: $Version$
using channel 1
Using interface ppp0
Connect: ppp0 <--> /dev/pts/2
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <auth chap MS-v2> <magic 0x997e0574> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <auth chap MS-v2> <magic 0x997e0574> <pcomp> <accomp>]
rcvd [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x17b23f0f> <pcomp> <accomp>]
sent [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x17b23f0f> <pcomp> <accomp>]
rcvd [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x17b23f0f> <pcomp> <accomp>]
sent [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x17b23f0f> <pcomp> <accomp>]
rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <auth chap MS-v2> <magic 0x997e0574> <pcomp> <accomp>]
sent [CHAP Challenge id=0x7b <d9a0ece409b870b26090963c194b99ea>, name = "pptpd"]
rcvd [LCP EchoReq id=0x0 magic=0x17b23f0f]
sent [LCP EchoRep id=0x0 magic=0x997e0574]
rcvd [CHAP Response id=0x7b <83b2e2ed5c557e91d729bf25864f827a00000000000000005f829c5e14e8d7c47d864e45
0b19caca690aff94f03ea21300>, name = "user01"]
sent [CHAP Success id=0x7b "S=F6E94A15433FE7A47C05770913B93F56F94E4F60 M=Access granted"]
sent [CCP ConfReq id=0x1 <mppe +H -M +S -L -D -C>]
rcvd [CCP ConfReq id=0x1 <mppe +H -M +S +L -D -C>]
sent [CCP ConfNak id=0x1 <mppe +H -M +S -L -D -C>]
rcvd [CCP ConfAck id=0x1 <mppe +H -M +S -L -D -C>]
rcvd [CCP ConfReq id=0x2 <mppe +H -M +S -L -D -C>]
sent [CCP ConfAck id=0x2 <mppe +H -M +S -L -D -C>]
MPPE 128-bit stateless compression enabled
sent [IPCP ConfReq id=0x1 <addr 192.168.0.97>]
rcvd [IPCP ConfReq id=0x1 <addr 0.0.0.0> <ms-dns1 0.0.0.0> <ms-dns2 0.0.0.0>]
sent [IPCP ConfNak id=0x1 <addr 192.168.0.105> <ms-dns1 192.168.0.1> <ms-dns2 192.168.0.1>]
rcvd [IPV6CP ConfReq id=0x1 <addr fe80::0548:8c76:8656:cf04>]
Unsupported protocol 'IPv6 Control Protocol' (0x8057) received
sent [LCP ProtRej id=0x2 80 57 01 01 00 0e 01 0a 05 48 8c 76 86 56 cf 04]
rcvd [IPCP ConfAck id=0x1 <addr 192.168.0.97>]
rcvd [IPCP ConfReq id=0x2 <addr 192.168.0.105> <ms-dns1 192.168.0.1> <ms-dns2 192.168.0.1>]
sent [IPCP ConfAck id=0x2 <addr 192.168.0.105> <ms-dns1 192.168.0.1> <ms-dns2 192.168.0.1>]
found interface eth0 for proxy arp
local  IP address 192.168.0.97
remote IP address 192.168.0.105
pptpd-logwtmp.so ip-up ppp0 user01 IPアドレス
Script /etc/ppp/ip-up started (pid 3684)
Script /etc/ppp/ip-up finished (pid 3684), status = 0x0

(12)VPNテスト
ここでは、iPadのアプリにある「Free Ping」を利用して自宅マシンにPingを飛ばしてみます。

VPNサーバにPingが届きました。

その他のマシンにもPingが無事届きました。

これで、VPNサーバの構築は終了ですが一つ気になる点が・・・。

一度、VPN接続を切った後にiPadから繋げようとすると何回か失敗したり成功したりします。

失敗したらリトライ、失敗したらリトライ・・・の繰り返しをすればいつかは繋がりますが、一発で繋がらないです・・・orz

うちの環境だけなのかなぁ。

これさえなければいいんだけど。原因不明。。。

参考文献
1. http://www.aterm.jp/function/guide12/list-data/j-all/bl/k/m01_m34.html
2. http://dev.halhal.info/archives/158


8月 12, 2011 at 12:48 am by 黒ぶちメガネ
Category: Linux