カテゴリー別アーカイブ: Android

Android端末やOSに関すること

iOS/Android 端末からの L2TP/IPsec 接続 (strongswan+xl2tpd)

iOSやAndroid端末、あるいは Windows PC などからもリモートアクセスできるよう、VPS マシンに VPN 接続を設定しておく。

PPTPについては既に脆弱性が発見されており、OSによってはサポート対象外になっているため、VPN プロトコルとしては L2TP/IPsec を使う。

前提:
対象サーバはVPSのUbuntu 14.04。

IPsec 実装としては strongswan、L2TP 実装としては xl2tpd を利用する。

ネットワーク図は以下の通り。
05

1. インストール

myvps1:~$ sudo apt-get install strongswan xl2tpd

カーネルパラメータをパケット転送できるよう設定する。

myvps1:~$ sudo vi /etc/sysctl.conf
net.ipv4.ip_forward=1  #28行目のコメントを外す
# 以下、追記する
net.ipv4.conf.default.send_redirects=0
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.eth0.accept_redirects=0
net.ipv4.conf.eth0.send_redirects=0
net.ipv4.conf.lo.accept_redirects=0
net.ipv4.conf.lo.send_redirects=0
net.ipv6.conf.eth0.accept_redirects=0
net.ipv6.conf.lo.accept_redirects=0
myvps1:~$ sudo sysctl -p /etc/sysctl.conf

ファイアウォール(ufw)を閉じている場合は、ESP、UDP 500・4500 を空けておくこと。

2. ipsec.confの設定

myvps1:~$ sudo vi /etc/ipsec.conf

以下の内容を追記する。

conn L2TP-PSK
        authby=secret
        auto=add
        closeaction=clear
        dpdaction=clear
        type=transport
        rekey=no
        left=203.0.113.180
        leftprotoport=17/1701
        right=%any
        rightprotoport=17/%any

IPsec はトランスポートモードを使用する。ペイロードに L2TP を通すので、ルーティングはそちらに任せる。

再接続等はクライアント側に任せたいため、こちらからは何もしない設定である。接続が切れた場合はセッションをクリアする。

3. IPsecの事前共有鍵の設定

myvps1:~$ sudo vi /etc/ipsec.secrets

事前共有鍵を平文で記述する。

: PSK "mypresharedkey"

4. xl2tpd.conf の設定

myvps1:~$ sudo vi /etc/xl2tpd/xl2tpd.conf

以下の設定を追記する。

[global]
port = 1701

[lns default]
ip range = 172.16.1.11-172.16.1.30
local ip = 172.16.1.254
length bit = yes
require chap = yes
refuse pap = yes
require authentication = yes
name = myvps1.vpsnet.example.jp
ppp debug = no
pppoptfile = /etc/ppp/xl2tpd-options

接続クライアント側には、172.16.1.11 から 30 の間でアドレスが割り振られる。

5. xl2tpd-options の設定

myvps1:~$ sudo vi /etc/ppp/xl2tpd-options

L2TPの設定を記述する。

ipcp-accept-local
ipcp-accept-remote
ms-dns 172.16.1.254  (myvps1:172.16.1.254にキャッシュDNSサーバが立っている前提)
noccp
auth
crtscts
idle 1800
mtu 1300
mru 1300
nodefaultroute
lock
connect-delay 5000
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2

6. chap-secrets の設定

myvps1:~$ sudo vi /etc/ppp/chap-secrets
username	*	"l2tppassworddesu"	*

一般ユーザで読めない権限にしておく。

7. デーモンの起動

myvps1:~$ sudo service strongswan restart
myvps1:~$ sudo service xl2tpd restart

この状態で、iPhoneなどから接続してみる。
iPhoneであれば「設定」→「VPN」→「VPN構成を追加…」で「L2TP」を選択して設定を追加する。
サーバ欄にはVPSのホスト名(IPアドレス)、アカウントにはL2TPユーザ名、パスワードにはL2TPパスワード、シークレットにはIPsec事前共有鍵を設定する。

クライアント機器が、公衆無線LANなどのプライベートネットワーク中に居る状態も想定しなければならない。その場合は NAT-Traversal を使うことになるが、Ubuntu 14.04 の strongswan は標準でNAT-Traversal を自動検出してくれるようなので、特別な設定をしなくても接続できる (ただし、UDP 4500番ポートについてファイアウォールが空いている必要はある)。

Mac 上で ADT (Android Development Tools) 環境を構築する

ホームディレクトリの下に Development というディレクトリを掘ってそこにインストールするものとします。

1. ダウンロード・展開

$ cd ~/Downloads
$ wget https://dl.google.com/android/adt/22.6.2/adt-bundle-mac-x86_64-20140321.zip
$ mkdir ~/Development
$ unzip adt-bundle-mac-x86_64-20140321.zip -d ~/Development

2. シェル環境で便利に使えるよう、パスを通しておく

$ vi .bashrc
ADTBASE=$HOME/Development/adt-bundle-mac-x86_64-20140321
ADTPATH=$ADTBASE/sdk/platform-tools:$ADTBASE/sdk/tools:$ADTBASE/eclipse/Eclipse.app/Contents/MacOS
export PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/sbin:/opt/X11/bin:$ADTPATH
export LD_LIBRARY_PATH=$ADTBASE/sdk/tools/lib

3. eclipseを日本語化する

ダウンロードしてファイルを配置する。

$ cd ~/Desktop
$ mkdir pleiades
$ cd pleiades
$ wget 'http://sourceforge.jp/projects/mergedoc/svn/view/trunk/Pleiades/build/pleiades.zip?view=co&root=mergedoc' -O pleiades.zip
$ unzip pleiades.zip
$ cp -Rp features/jp.sourceforge.mergedoc.pleiades ~/Development/adt-bundle-mac-x86_64-20140321/eclipse/features
$ cp -Rp plugins/jp.sourceforge.mergedoc.pleiades ~/Development/adt-bundle-mac-x86_64-20140321/eclipse/plugins

pleiadesプラグインを読み込むよう設定を追加する。

$ vi ~/Development/adt-bundle-mac-x86_64-20140321/eclipse/Eclipse.app/Contents/MacOS/eclipse.ini

以下の1行を最後に追加する

-javaagent:../../../plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar

日本語化後の初回は -clean オプション付きで eclipse を起動する

$ eclipse -clean

4. eclipse のアイコンをLaunchpadに登録する

$ mkdir ~/Applications
$ touch ~/Applications/.localized
$ osascript -e 'tell application "Finder" to make alias file to posix file "/Users/username/Development/adt-bundle-mac-x86_64-20140321/eclipse/Eclipse.app" at posix file "/Users/username/Applications"'

参考:
Setting Up the ADT Bundle
http://developer.android.com/sdk/installing/bundle.html

AndroidエミュレータのホストGPU利用

前提:
開発環境はMac OS X上にある (Linuxでも似たようなものか?)

エミュレータの設定で「Use Host GPU」オプションにチェックを入れた場合、そのまま実行すると OpenGL ES エミュレーションライブラリが見つからないというエラーが出る。

$ emulator64-arm -avd Sample4.4
emulator: ERROR: Could not load OpenGLES emulation library: dlopen(lib64OpenglRender.dylib, 1): image not found
emulator: WARNING: Could not initialize OpenglES emulation, using software renderer.

ライブラリ自体はSDKに入っているので、環境変数LD_LIBRARY_PATHで格納先を指定しておくと解消できる。
$ export LD_LIBRARY_PATH=$HOME/Development/adt-bundle-mac-x86_64-20131030/sdk/tools/lib
$ emulator64-arm -avd Sample4.4
(エラーなし)