Androidから自宅サーバー(ubuntu12.04)にアクセスする


以前、同じ内容で書いているのだけれど、なんか入れ直したUbuntu12.04では

うまく出来なかったので、書き直してみた

特にAndroid4.0での不具合に対処する方法とか追記

グローバルIPアドレスの追従関連は、Androidから 自宅サーバにアクセス の下準備を参照

 

$ sudo tasksel

openSSHを選択してインストール

 

IPsec には OpenSwan というパッケージを使用しますが、Ice Cream Sandwich のバグに対する

Workaround があるので、OpenSwan を Source から build するところから始めます。

 

build 環境のインストール

$ sudo apt-get install build-essential libgmp3-dev gawk flex bison

OpenSwan の Source と Workaround のための Patch を download し build します。

$ wget http://download.openswan.org/openswan/openswan-2.6.38.tar.gz

$ tar -xzvf openswan-2.6.38.tar.gz

$ cd /home/openswan-2.6.38

$ wget http://people.redhat.com/pwouters/osw/openswan-2.6.38-android-ics-natoa.patch

$ patch -p1 < openswan-2.6.38-android-ics-natoa.patch

$ sudo make ARCH=arm programs

$ sudo make ARCH=arm install

 

L2TP 用のパッケージ xl2tpd を install します。

$ sudo apt-get install xl2tpd

 

xl2tpd.confの書き換え

$ sudo gedit /etc/xl2tpd/xl2tpd.conf

[global]
auth file = /etc/ppp/chap-secrets

[lns default]
ip range = 192.168.1.231-192.168.1.240 ; * Allocate from this IP range
local ip = #サーバーのアドレスを記述 ; * Our local IP to use
length bit = yes ; * Use length bit in payload?
refuse pap = yes ; * Refuse PAP authentication
refuse chap = yes ; * Refuse CHAP authentication
require authentication = yes ; * Require peer to authenticate
ppp debug = yes ; * Turn on PPP debugging
pppoptfile = /etc/ppp/options.l2tpd.lns ; * ppp options file

 

$ sudo gedit /etc/ppp/options.l2tpd.lns

require-mschap-v2
ms-dns #ルータのアドレスを記述
asyncmap 0
auth
crtscts
mtu 1380
mru 1380
lock
hide-password
modem
debug
name l2tpd
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4

 

$ sudo gedit /etc/ipsec.conf

version    2.0    # conforms to second version of ipsec.conf specification

config setup
dumpdir=/var/run/pluto/
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
nhelpers=0

conn L2TP-PSK-NAT
also=L2TP-PSK-noNAT

conn L2TP-PSK-noNAT
authby=secret
pfs=no
auto=add
keyingtries=3
rekey=no
type=transport
ikelifetime=8h
keylife=1h
left=192.168.1.10 #サーバのアドレス
leftnexthop=192.168.1.1   #ルータのアドレス
leftprotoport=17/1701
right=%any
rightprotoport=17/%any
dpddelay=15
dpdtimeout=30
dpdaction=clear

$ sudo gedit /etc/ipsec.secrets

192.168.1.10 %any: PSK “IPSEC_PASSWORD”      #サーバーのアドレス

  ※ IPSEC_PASSWORD(任意のパスワードを設定) の前後にダブルクオート(”)を忘れないこと

  文字化けしているので、”は、必ずコピペしないで打ち直すこと

 

$ sudo gedit /etc/ppp/chap-secrets

USER_NAME * CHAP_PASSWORD *   #※ USER_NAMEとCHAP_PASSWORDは任意で良い。 サーバー名とか、面倒なので、ワイルドカード

 ※USER_NAMEとCHAP_PASSWORD の前後にダブルクオート(”)が必要ないので間違えないこと

 

各 Password Files を第三者に見られないように権限を変更する  入ってないと動かないらしいのでlsofを念のためインストール

$ sudo chmod 600 /etc/ipsec.secrets

$ sudo chmod 600 /etc/ppp/chap-secrets

$ sudo apt-get install lsof

 

IP Packet を forward するため、sysctl の設定

$ sudo gedit /etc/sysctl.conf

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.lo.send_redirects = 0
net.ipv4.conf.lo.accept_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0
net.ipv4.conf.eth0.accept_redirects = 0

 

次にファイアウォールとかの設定
ufw で 500 (IKE)と 4500 (IPsec NAT-T) のUDPを開放

$ sudo ufw allow 500/udp
$ sudo ufw allow 4500/udp

 

ufw では設定できない部分を /etc/ufw/before.rules で設定

ESP を通すための設定と,xl2tpd を IPsec 以外から使えないようにする設定と,LAN の NAT をさせる設定とを適切な場所に追加

$ sudo gedit /etc/ufw/before.rules

## *filter に対応する 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]    #文字化けしてる顔の部分 「 : P」 の2文字が記載されている
# Forward traffic from 192.168.222.0/24
-A POSTROUTING -s 192.168.222.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 gedit /etc/default/ufw

DEFAULT_FORWARD_POLICY=”ACCEPT”

 

sysctl.conf の変更を有効

$ sudo sysctl -p

 

ipsec、xl2tpd を start させ、Config Files に問題がないか verify しておきます。

$ sudo service ipsec start
# ipsec start がうまく動かない場合は、$ sudo service ipsec stop で止めてから、start させる
$ sudo service xl2tpd start
$ sudo ipsec verify

Checking your system to see if IPsec got installed and started correctly:
Version check and ipsec on-path                                 [OK]
Linux Openswan U2.6.38/K3.2.0-33-generic (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]
Checking for ‘ip’ command                                       [OK]
Checking /bin/sh is not /bin/dash                               [WARNING]
Checking for ‘iptables’ command                                 [OK]
Opportunistic Encryption Support                                [DISABLED]

上記のようになればOK [FAILED] があるようであれば、Config Files を見直します。

 

SSH を使っているならその許可をしつつ,ufw を有効化して再起動.

sudo ufw allow 22/tcp
sudo ufw enable
sudo reboot

 

ubuntuの起動時にipsec、xl2tpd が自動起動するよう設定する。

$ sudo apt-get install sysv-rc-conf
$ sudo sysv-rc-conf ipsec on
$ sudo sysv-rc-conf xl2tpd on

 

Ubuntuの設定は、これで完了

 

続いて、ルータの設定 静的IPマスカレード設定をしよう

・ポート番号 500/UDP を Internet 側 IP Address から 192.168.1.10 へ transfer します。
・ポート番号 4500/UDP を Internet 側 IP Address から 192.168.1.10 へ transfer します。
・プロトコル番号 50(ESP)を Internet 側 IP Address から 192.168.1.10 へ transfer します。
※3つ目がプロトコル番号であることに注意です。ポート番号ではありません。

 

全ての設定が終わったら、スマホから繋がるか、確認
1.「無線とネットワーク」で Wi-fi が On になっている場合は off にする。
2.設定メニュー画面で [ネットワーク設定] → [VPN設定]

一番最初だと、パスワードを設定するように求められます。設定すると、ディスプレイをONにするたびそのパスワード入力が必要になる。
名前:(適当に)
タイプ:L2TP/IPsec PSK
サーバー:ieServer.Netにて取得したアカウント情報を記入
L2TP セキュリティ保護:(何も設定しない)
IPSec ID:(何も設定しない)
IPSec事前共有鍵:IPSEC_PASSWORD
詳細オプションを表示する:(チェックしない)
3.保存をタップする。
4.設定メニュー画面で [その他] → [VPN] をタップする。
5.2で設定した名前をタップする。
6.ユーザー名:USER_NAME パスワード:CHAP_PASSWORD を入力し、接続をタップする。
7.「接続されました」と出れば、成功!!

4 Comments

  1. mash 2月 19, 2013 12:39 am  返信

    記事見させていただきました。
    インストールしたてのubuntuに、
    丸々同様の設定をしたのですが、
    android(spモード)から接続できませんでした。
    ご教授お願いできますでしょうか。

    • 4月 13, 2013 8:05 pm  返信

      このブログは、私の壮大な独り言なので、わかりきってる部分とかは面倒だと、省略してることがあります。

      この記事の通り設定されたと言うことですが、確か、ipsec.conf は、このままでは駄目です。
      ネットで検索されれば、すぐに正解は見つかると思います。

      後は、太文字化しているところは、コピペするとうまくいかないかもしれませんね。

      この通りやり直したら、動いたので、記事的には間違いが無いようです。

Leave a comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


 

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)