Androidから 自宅サーバにアクセス
日経Linux2011年10月号に載っていたのでやってみた。
下準備
http://ieserver.net/ に、登録して、自宅サーバにアクセスできるようにしておく
左側のメニューに便利ツールがあるのでクリック
UNIX版クライアントのIPアドレス更新サンプルスクリプトをクリックすると表示されるのでddns-update.txt
として保存する。こうしないと文字化けしてしまったので、こうしてみた。
ddns-update.txt を書き換える 中程に下記の4行があるので、説明の通りに書き換える
# ieServer.Netにて取得したアカウント(サブドメイン)情報を記入
$ACCOUNT = ” “; # アカウント(サブドメイン)名設定
$DOMAIN = ” “; # ドメイン名設定
$PASSWORD = ” “; # パスワード設定
下記のコマンドを実施
$ sudo mv ddns-update.txt /usr/local/bin/ddns-update.pl
$ sudo chmod 755 /usr/local/bin/ddns-update.pl
$ sudo crontab -e
*/30 * * * * /usr/local/bin/ddns-update.pl #末行に追加して保存する
インストール
$ sudo tasksel
openSSHを選択してインストール
$ sudo apt-get install openswan
証明書を利用するか聞かれるので、No を選択
$ sudo gedit /etc/rc.local
/etc/init.d/ipsec restart # 最終行 exit 0 の前に記述して、Openswanの起動設定の書き込み
$ sudo apt-get install xl2tpd
Openswanの設定
$ sudo gedit /etc/ipsec.conf
# basic configuration
config setup
nat_traversal=yes # 24行目yesを確認
oe=off
protostack=netkey # 30行目 auto から netkey に変更
include /etc/ipsec.d/l2tp-psk.conf #31行目に追加 この行は、前を空けない(独立した記述)
$ sudo gedit /etc/ipsec.secrets
: PSK “事前共有鍵にする文字列を入力” # 最後に記述
$ sudo gedit /etc/ipsec.d/l2tp-psk.conf #確か何も書いてないので,下記の行を記述
conn L2TP-PSK-NAT
rightsubnet=0.0.0.0/0
forceencaps=yes
also=L2TP-PSK-noNAT
conn L2TP-PSK-noNAT
authby=secret
pfs=no
auto=add
keyingtries=3
rekey=no
ikelifetime=8h
keylife=1h
type=transport
left=ここにVPNサーバのIPアドレスを記述
leftnexthop=%defaultroute
leftprotoport=17/%any
right=%any
rightprotoport=17/%any
dpddelay=5
dpdtimeout=30
dpdaction=clear
xl2tpdの設定
$ sudo gedit /etc/xl2tpd/xl2tpd.conf
たくさん出てくるので、該当する行の;を外して、必要があれば、書き換えた
[global]
[lns default]
ip range = 00.00.00.231-00.00.00.240 VPNに割り当てるIPアドレスの範囲(サーバと同一LAN内)
local ip = サーバのIPアドレスを記述
require chap = yes
refuse pap = yes
require authentication = yes
name = VPNserver
ppp debug = yes
pppoptfile = /etc/ppp/options.l2tpd.lns
length bit = yes #この行は、追加したかも
$ sudo gedit /etc/ppp/chap-secrets
# Secrets for authentication using CHAP
# client server secret IP addresses
“ユーザ名” * “パスワード” * # この行を記述 Ubuntuのユーザ名とパスワードとは違って良い
$ sudo gedit /etc/ppp/options.l2tpd.lns
asyncmap 0
auth
local
crtscts
debug
lock
proxyarp
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
logfile /var/log/xl2tpd.log
lcp-echo-interval 30
lcp-echo-failure 4
$ sudo gedit /etc/sysctl.conf #カーネル設定用のファイルの末尾に記述
net.ipv4.ip_forward = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.default.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
確認
$ sudo ipsec verify
Version check and ipsec on-path [OK]
Linux Openswan U2.6.28/K3.0.0-15-generic (netkey)
Checking for IPsec support in kernel [OK]
NETKEY detected, testing for disabled ICMP send_redirects [OK]
NETKEY detected, testing for disabled ICMP accept_redirects [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 for ‘iptables’ command [OK]
Opportunistic Encryption Support [DISABLED]
最後の項目以外、OKになれば良い。
sudo sysctl -p #システムにすぐに反映させるコマンド
再起動で設定完了
ルータがVPN通信ができるように、 UDP500番ポートとUDP4500番ポートの転送設定を行う
Ubuntuのポート開放
$ sudo apt-get install nmap
$ sudo ufw allow 500/udp
$ sudo ufw allow 4500/udp
Android端末に SSHクライアントとしてConnectBot を使う
Androidの無線とネットワーク → VPN設定 からメニューを表示し、VPNを追加する
「L2TP/IPSec PSK VPNを追加」 を選択
VPNサーバの設定 : ルータのドメイン名又はIPアドレス
IPSec事前共有鍵の設定
L2TPセキュリティ保護 無効にしておく
接続時は、/etc/ipsec.secrets で設定したユーザ名とパスワードを使用する
接続後、ConnectBot でSSH接続ができればOK
カーネルアップデートしたら
動かなくなるので下記のコマンドを実施
$ sudo service ipsec start
ipsec_setup: Starting Openswan IPsec U2.6.28/K3.0.0-15-generic…
下記のコマンドで確認すると
$ sudo ipsec verify
Version check and ipsec on-path [OK]
Linux Openswan U2.6.28/K3.0.0-15-generic (netkey)
Checking for IPsec support in kernel [OK]
NETKEY detected, testing for disabled ICMP send_redirects [OK]
NETKEY detected, testing for disabled ICMP accept_redirects [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 for ‘iptables’ command [OK]
Opportunistic Encryption Support [DISABLED]
最後の項目以外、OKになれば良いが、カーネルアップデート時は,下記を必ずやる必要がある。
こんな表示が出た場合は
NETKEY detected, testing for disabled ICMP send_redirects [FAILED]
Please disable /proc/sys/net/ipv4/conf/*/send_redirects
or NETKEY will cause the sending of bogus ICMP redirects!
NETKEY detected, testing for disabled ICMP accept_redirects [FAILED]
Please disable /proc/sys/net/ipv4/conf/*/accept_redirects
or NETKEY will accept bogus ICMP redirects!
下記のコマンドを実施
$ sudo ls /proc/sys/net/ipv4/conf/*/send_redirects #対象のファイルを確認
/proc/sys/net/ipv4/conf/all/send_redirects
/proc/sys/net/ipv4/conf/default/send_redirects
/proc/sys/net/ipv4/conf/eth0/send_redirects
/proc/sys/net/ipv4/conf/lo/send_redirects
$ sudo ls /proc/sys/net/ipv4/conf/*/accept_redirects
/proc/sys/net/ipv4/conf/all/accept_redirects
/proc/sys/net/ipv4/conf/default/accept_redirects
/proc/sys/net/ipv4/conf/eth0/accept_redirects
/proc/sys/net/ipv4/conf/lo/accept_redirects
たぶん、上の水色で示した8行が出るので,これの値を全部0にする。
$ sudo su
# echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
# echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
# echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects
# echo 0 > /proc/sys/net/ipv4/conf/lo/send_redirects
# echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
# echo 0 > /proc/sys/net/ipv4/conf/default/accept_redirects
# echo 0 > /proc/sys/net/ipv4/conf/eth0/accept_redirects
# echo 0 > /proc/sys/net/ipv4/conf/lo/accept_redirects
更にこちらは、値を1にする
$ echo 1 > /proc/sys/net/ipv4/ip_forward
# exit
$ sudo sysctl -p #システムにすぐに反映させるコマンド
$ sudo ipsec verify
再び確認して、正常な表示が出ていればOK
再起動をかけてサーバの再セットアップは完了
1/28 追記
なんか、カーネルバージョンアップのせいなのか再起動するたびにipsecが止まるので追加
$ sudo apt-get install chkconfig
$ sudo chkconfig xl2tpd on
$ sudo chkconfig ipsec on
$ sudo /etc/init.d/xl2tpd start>
$ sudo /etc/init.d/ipsec start
これで、再起動しても起動するようになった。