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.「接続されました」と出れば、成功!!
「Androidから自宅サーバー(ubuntu12.04)にアクセスする」への4件のフィードバック
記事見させていただきました。
インストールしたてのubuntuに、
丸々同様の設定をしたのですが、
android(spモード)から接続できませんでした。
ご教授お願いできますでしょうか。
このブログは、私の壮大な独り言なので、わかりきってる部分とかは面倒だと、省略してることがあります。
この記事の通り設定されたと言うことですが、確か、ipsec.conf は、このままでは駄目です。
ネットで検索されれば、すぐに正解は見つかると思います。
後は、太文字化しているところは、コピペするとうまくいかないかもしれませんね。
この通りやり直したら、動いたので、記事的には間違いが無いようです。