braintag

公開してしまう備忘録

RaspberryPIをVPN(L2TP)サーバにして、スマートフォンからVPN接続

Raspberry Pi Type B 512MB

スマートフォンからRaspberryPIに対してVPN接続し、家のローカルネットワークにつなぎます。

VPNは、PPTPだと設定等が非常に楽なんですが、docomoのSPモードだと接続できないし、PPTPはセキュリティ的にも緩いらしいので、やや難し目のL2TP使います。

最近ではスマートフォンOpenVPNクライアントをインストールすれば使えるらしいですが、Android,iPhone標準で使えるL2TPがやはりいいと思います。

注意点として、auの場合は、回線(CDMA2000)の仕様上、通話着信があるとVPNが切断されます。

※以下は記憶を元に書いているので抜けがあるかもしれません

VPNサーバのアドレス

固定IPアドレス契約をしていればいいですが、していない場合は、IPアドレスがころころ変わっていまい、外出先からVPN接続できなくなるため、適当なDDNSサービスに登録しておきます。
(MyDNSがオススメ)

VPNを公開するためのルータの設定

ルータのポートは、UDP/400,4500,1701を開けてRaspberryPIに対してNAPTしておきます。

RaspberryPIに対する設定

まずはopenswanとxl2tpdをインストールします。
IPアドレスやID,パスワード等は、自分の環境に置き換えてください。

sudo apt-get install openswan xl2tpd ppp lsof

xl2tpdの設定を行います。

/etc/xl2tpd/xl2tpd.conf

[global]
port = 1701 ;使用ポート

[lns default]
ip range = 192.168.1.230-192.168.1.240  ; VPNクライアントに割り当てるIPアドレス
local ip = 192.168.1.20                 ; RasPI自身のIPアドレス
require chap = yes                      ; * Require CHAP auth. by peer
refuse pap = yes                        ; * Refuse PAP authentication
require authentication = yes            ; * Require peer to authenticate
name = pi                               ; * Report this as our hostname
ppp debug = yes                         ; * Turn on PPP debugging
pppoptfile = /etc/ppp/options.xl2tpd.lns; * ppp options file
length bit = yes

次にopenswanの設定を行います

/etc/ipsec.conf

version 2.0
config setup
        nat_traversal=yes
        virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12
        oe=off
        protostack=netkey
include /etc/ipsec.d/*.conf

共有鍵の設定
同じものをスマートフォンにも入力します。
(iPhoneの場合には"シークレット"という項目,Androidの場合はIPSec事前共有鍵)

/etc/ipsec.secrets

: PSK "password"

/etc/ppp/options.xl2tpd.lns

mtu 1410
mru 1410
ms-dns 8.8.8.8
ms-dns 8.8.4.4
lcp-echo-interval 3
lcp-echo-failure 8
nodeflate
noproxyarp
netmask 255.255.255.0
lock

スマートフォンからアクセスするときのID,パスワード設定
同じものをスマートフォンに入力します。

/etc/ppp/chap-secrets

# Secrets for authentication using CHAP
# client        server  secret                  IP addresses
"id"      *       "password"              *

以下のリダイレクトの設定を追加

/etc/sysctl.conf

net.ipv4.conf.eth0.accept_redirects = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.lo.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.lo.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0

自動起動の設定と、再起動

sudo sysv-rc-conf xl2tpd on
sudo sysv-rc-conf ipsec on
/etc/init.d/xl2tpd restart
/etc/init.d/xl2tpd restart

スマートフォンでの設定

AndroidもしくはiPhoneVPN接続をします。

VPNの接続方法をL2TPにして、DDNS,ID,パスワード,共有鍵を入力して接続します。
こちらは簡単なので詳細は明記しません。

うまくいかない場合は、RaspberyPIにてsudo ipsec verifyや、ログを見て不具合を解消してください。

VPNを繋いで何をしたか

スマートフォンwolアプリ入れて、VPN経由で家のPCを起動し、Webブラウザからtvrockの録画予約を行ったりしようと思いましたが、wol後、tvrockのインテリジェントが効かず、PCが起動しっぱなしになるので止めました。
(なぜかCPU使用率が100%で張り付く)

RaspberryPIにAsteriskを入れて050plusのように使えると面白いと思いましたが、auひかりはsip接続できないので試せませんでした。

以上