BeagleBoard-xMをVPNサーバにしてみる [beagleboard]
BeagleBoard-xMにはUbuntu 12.04をインストールして,USB WiFiを使えるようにした.
今回はこれをVPNサーバにしてみる.
プロトコルはPPTPが簡単らしいのだが,docomoのSPモードだと使えないのでL2TP/IPsecを使うことにする.あと,IPsecは事前共有鍵認証を使うことにする.
ではまず必要なパッケージとして,openswanとxl2tpdをインストールしてやる.
最初にopenswanのインストールだが,androidのICSにはバグがあってIPsecがつながらない.ただ,回避策はあって,openswanのソースにパッチを当ててビルドしてやればいい.
では,ソースとパッチのダウンロード.
ダウンロードしたら展開.
ビルドに必要なツールをインストール.
そしたらパッチをあててビルド,インストールしてやる.
ちなみに,Openswanの最新バージョンは,2.6.39のようだ.2.6.39ならパッチは必要ないかもしれないが確認していないので分からない.
では,次にxl2tpdをインストール.
こちらは単純に,
でOK.
そしたら,設定開始.
まずはカーネルパラメータの設定.
以下を追記
そしたら設定値の反映.
次にopenswanの設定.
元々ある記述のうち,config setupのprotostack=netkeyに変更するのと,conn ***以下を追記してやる.ファイル全体を示すと以下のようになる.
ちなみに,「left=10.0.1.100 # 自サーバの IPv4 アドレスを設定する。」の部分はあくまで例なので,自分のサーバのIPアドレスを設定してやる.
IPsecの事前共有鍵(pre-shared key)の設定.
ファイルがない場合は作成してやる.で,以下を追記してやる.
ここで,先頭のIPアドレスは上記で設定した自分のサーバのIPアドレスだ.また,hogehogeが事前共有鍵になる.なのでファイルのアクセス権を変更しておく.
ここまでできたら,IPsecを再起動.
設定の確認をしてみる.
N/A, WARNINGとDISABLEDは気にしなくていいらしいが,FAILEDが出るとNGだ.だが,openswanをソースからビルドすると,「Two or more interfaces found, checking IP forwarding」の部分がFAILEDと出ることがあるようだが気にしなくていいらしい.
次にxl2tpdの設定.
以下を追記してやる.
ここで,ip rangeはVPN接続してきたクライアントに割り当てるIPアドレスの範囲で,local ipは自分のサーバのIPアドレスだ.これもあくまで例なので,自分の環境にあわせて設定してやる.
pppの設定.
ファイルが無いので新規作成し以下を記入する.コメントがあるとうまく動かないようなので削除すべし.
chap認証設定.
以下を追記
ここで,hogehogeはUserName, fugafugaはパスワードになる.
ここで,いったんxl2tpdの再起動.
ファイヤーウォールでUDP/500とUDP/4500を通すように設定.
ESP を通すための設定と,xl2tpd を IPsec 以外から使えないようにする設定と,LAN の NAT をさせる設定とを適切な場所に追加.
*filter に対応する COMMIT の手前に(COMMITの直前に)以下を記載.
次に*filter の COMMIT の後に以下を記載.
フォワーディングはデフォルト許可に設定.
以下の設定に変更.
ufwを有効化.
IPsec自動起動設定.
あとは,ルーターの設定として,UDP/500とUDP/4500を自分のサーバに転送するように設定してやればOK.
これで完了.
お疲れさまでした.
参考サイト
いっぱいあるけど,特に参考にしたのは以下のサイトです.
Debian GNU/Linux で L2TP / IPsec を使用する VPN サーバを設定する (サーバ側で NAPT しない場合) – Open the Next
○○的な気まぐれ日記 » Androidから自宅サーバー(ubuntu12.04)にアクセスする
VPNでandroidと自宅LANがつながった | 人生崖っぷち
先人に感謝します.
今回はこれをVPNサーバにしてみる.
プロトコルはPPTPが簡単らしいのだが,docomoのSPモードだと使えないのでL2TP/IPsecを使うことにする.あと,IPsecは事前共有鍵認証を使うことにする.
ではまず必要なパッケージとして,openswanとxl2tpdをインストールしてやる.
最初にopenswanのインストールだが,androidのICSにはバグがあってIPsecがつながらない.ただ,回避策はあって,openswanのソースにパッチを当ててビルドしてやればいい.
では,ソースとパッチのダウンロード.
wget http://download.openswan.org/openswan/openswan-2.6.38.tar.gz
wget http://people.redhat.com/pwouters/osw/openswan-2.6.38-android-ics-natoa.patch
ダウンロードしたら展開.
tar -xzvf openswan-2.6.38.tar.gz
ビルドに必要なツールをインストール.
sudo apt-get install build-essential libgmp3-dev gawk flex bison
そしたらパッチをあててビルド,インストールしてやる.
cd openswan-2.6.38/
patch -p1 < ../openswan-2.6.38-android-ics-natoa.patch
sudo make ARCH=arm programs
sudo make ARCH=arm install
ちなみに,Openswanの最新バージョンは,2.6.39のようだ.2.6.39ならパッチは必要ないかもしれないが確認していないので分からない.
では,次にxl2tpdをインストール.
こちらは単純に,
sudo apt-get install xl2tpd
でOK.
そしたら,設定開始.
まずはカーネルパラメータの設定.
sudo vi /etc/sysctl.conf
以下を追記
###################################################################
# add settings
###################################################################
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0
net.ipv4.conf.eth0.accept_redirects = 0
net.ipv4.conf.lo.send_redirects = 0
net.ipv4.conf.lo.accept_redirects = 0
net.ipv4.conf.wlan0.send_redirects = 0
net.ipv4.conf.wlan0.accept_redirects = 0
そしたら設定値の反映.
sudo sysctl -p
次にopenswanの設定.
sudo vi /etc/ipsec.conf
元々ある記述のうち,config setupのprotostack=netkeyに変更するのと,conn ***以下を追記してやる.ファイル全体を示すと以下のようになる.
# /etc/ipsec.conf - Openswan IPsec configuration file
# This file: /usr/share/doc/openswan/ipsec.conf-sample
#
# Manual: ipsec.conf.5
version 2.0 # conforms to second version of ipsec.conf specification
# basic configuration
config setup
# Do not set debug options to debug configuration issues!
# plutodebug / klipsdebug = "all", "none" or a combation from below:
# "raw crypt parsing emitting control klips pfkey natt x509 dpd private"
# eg:
# plutodebug="control parsing"
# Again: only enable plutodebug or klipsdebug when asked by a developer
#
# enable to get logs per-peer
# plutoopts="--perpeerlog"
#
# Enable core dumps (might require system changes, like ulimit -C)
# This is required for abrtd to work properly
# Note: incorrect SElinux policies might prevent pluto writing the core
dumpdir=/var/run/pluto/
#
# NAT-TRAVERSAL support, see README.NAT-Traversal
nat_traversal=yes
# exclude networks used on server side by adding %v4:!a.b.c.0/24
# It seems that T-Mobile in the US and Rogers/Fido in Canada are
# using 25/8 as "private" address space on their 3G network.
# This range has not been announced via BGP (at least upto 2010-12-21)
virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v4:25.0.0.0/8,%v6:fd00::/8,%v6:fe80::/10
# OE is now off by default. Uncomment and change to on, to enable.
oe=off
# which IPsec stack to use. auto will try netkey, then klips then mast
# protostack=auto
protostack=netkey
# Use this to log to a file, or disable logging on embedded systems (like openwrt)
#plutostderrlog=/dev/null
# Add connections here
# sample VPN connection
# for more examples, see /etc/ipsec.d/examples/
#conn sample
# # Left security gateway, subnet behind it, nexthop toward right.
# left=10.0.0.1
# leftsubnet=172.16.0.0/24
# leftnexthop=10.22.33.44
# # Right security gateway, subnet behind it, nexthop toward left.
# right=10.12.12.1
# rightsubnet=192.168.0.0/24
# rightnexthop=10.101.102.103
# # To authorize this connection, but not actually start it,
# # at startup, uncomment this.
# #auto=add
conn L2TP-PSK-NAT
rightsubnet=0.0.0.0/0
also=L2TP-PSK-noNAT
conn L2TP-PSK-noNAT
forceencaps=yes
authby=secret
pfs=no
auto=add
keyingtries=3
ike=aes-sha1;modp3072 # ike phase1 の設定 (暗号化アルゴリズムは AES 、ハッシュアルゴリズムは SHA1 、Diffie-Hellman グループは 15 (3,072bit))
phase2=esp # ike phase2 の設定 (セキュリティプロトコルは ESP)
phase2alg=aes-sha1;modp3072 # ike phase2 の設定 (暗号化アルゴリズムは AES 、ハッシュアルゴリズムは SHA1 、Diffie-Hellman グループは 15 (3,072bit))
rekey=no
ikelifetime=8h
keylife=1h
type=transport
left=10.0.1.100 # 自サーバの IPv4 アドレスを設定する。
leftprotoport=17/1701
right=%any
rightprotoport=17/%any
# 以下は iOS クライアント向けの設定。
dpddelay=40
dpdtimeout=130
dpdaction=clear
ちなみに,「left=10.0.1.100 # 自サーバの IPv4 アドレスを設定する。」の部分はあくまで例なので,自分のサーバのIPアドレスを設定してやる.
IPsecの事前共有鍵(pre-shared key)の設定.
sudo vi /etc/ipsec.secrets
ファイルがない場合は作成してやる.で,以下を追記してやる.
10.0.1.100 %any: PSK "hogehoge"
ここで,先頭のIPアドレスは上記で設定した自分のサーバのIPアドレスだ.また,hogehogeが事前共有鍵になる.なのでファイルのアクセス権を変更しておく.
sudo chmod 600 /etc/ipsec.secrets
ここまでできたら,IPsecを再起動.
sudo /etc/init.d/ipsec restart
設定の確認をしてみる.
sudo ipsec verify
N/A, WARNINGとDISABLEDは気にしなくていいらしいが,FAILEDが出るとNGだ.だが,openswanをソースからビルドすると,「Two or more interfaces found, checking IP forwarding」の部分がFAILEDと出ることがあるようだが気にしなくていいらしい.
Checking your system to see if IPsec got installed and started correctly:
Version check and ipsec on-path [OK]
Linux Openswan U2.6.37/K3.2.0-51-omap (netkey)
Checking for IPsec support in kernel [OK]
SAref kernel support [N/A]
NETKEY: Testing XFRM related proc values [OK]
[OK]
[OK]
Checking that pluto is running [OK]
Pluto listening for IKE on udp 500 [OK]
Pluto listening for NAT-T on udp 4500 [OK]
Two or more interfaces found, checking IP forwarding [OK] <--- FAILEDと出るかも
Checking NAT and MASQUERADEing [OK]
Checking for 'ip' command [OK]
Checking /bin/sh is not /bin/dash [WARNING]
Checking for 'iptables' command [OK]
Opportunistic Encryption Support [DISABLED]
次にxl2tpdの設定.
sudo vi /etc/xl2tpd/xl2tpd.conf
以下を追記してやる.
[global]
[lns default]
ip range = 10.0.1.201 - 10.0.1.210
local ip = 10.0.1.100
length bit = yes
refuse chap = yes
require authentication = yes
name = l2tp
pppoptfile = /etc/ppp/l2tpd-options
ここで,ip rangeはVPN接続してきたクライアントに割り当てるIPアドレスの範囲で,local ipは自分のサーバのIPアドレスだ.これもあくまで例なので,自分の環境にあわせて設定してやる.
pppの設定.
sudo vi /etc/ppp/l2tpd-options
ファイルが無いので新規作成し以下を記入する.コメントがあるとうまく動かないようなので削除すべし.
name l2tp # /etc/xl2tpd/xl2tpd.conf で設定した name と合わせる
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
ms-dns 10.0.1.1 # DNS サーバの IPv4 アドレス
proxyarp
nodefaultroute
lock
nobsdcomp
mtu 1280
mru 1280
chap認証設定.
sudo vi /etc/ppp/chap-secrets
以下を追記
hogehoge l2tp "fugafuga" *
ここで,hogehogeはUserName, fugafugaはパスワードになる.
ここで,いったんxl2tpdの再起動.
sudo /etc/init.d/xl2tpd restart
ファイヤーウォールでUDP/500とUDP/4500を通すように設定.
sudo ufw allow 500/udp
sudo ufw allow 4500/udp
ESP を通すための設定と,xl2tpd を IPsec 以外から使えないようにする設定と,LAN の NAT をさせる設定とを適切な場所に追加.
sudo vi /etc/ufw/before.rules
*filter に対応する COMMIT の手前に(COMMITの直前に)以下を記載.
# for ESP protocol of IPsec
-A INPUT -p 50 -j ACCEPT
# restricts l2tp to be used under ipsec
-A INPUT -p udp -m policy --dir in --pol ipsec -m udp --dport l2tp -j ACCEPT
-A INPUT -p udp -m udp --dport l2tp -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -p udp -m policy --dir out --pol ipsec -m udp --sport l2tp -j ACCEPT
-A OUTPUT -p udp -m udp --sport l2tp -j REJECT --reject-with icmp-port-unreachable
次に*filter の COMMIT の後に以下を記載.
# nat Table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Forward traffic from 192.168.222.0/24
-A POSTROUTING -s 10.0.1.0/24 -j MASQUERADE
# don't delete the 'COMMIT' line or these nat table rules won't be processed
COMMIT
# end of nat rules
フォワーディングはデフォルト許可に設定.
sudo vi /etc/default/ufw
以下の設定に変更.
DEFAULT_FORWARD_POLICY="ACCEPT"
ufwを有効化.
sudo ufw enable
IPsec自動起動設定.
sudo update-rc.d ipsec start 90 2 3 4 5 . stop 1 0 1 6 .
あとは,ルーターの設定として,UDP/500とUDP/4500を自分のサーバに転送するように設定してやればOK.
これで完了.
お疲れさまでした.
参考サイト
いっぱいあるけど,特に参考にしたのは以下のサイトです.
Debian GNU/Linux で L2TP / IPsec を使用する VPN サーバを設定する (サーバ側で NAPT しない場合) – Open the Next
○○的な気まぐれ日記 » Androidから自宅サーバー(ubuntu12.04)にアクセスする
VPNでandroidと自宅LANがつながった | 人生崖っぷち
先人に感謝します.