広告・Googleアドセンス728px

Article(記事)

【root化不要】Android(ICS)でOpenVPN

投稿日:
更新日:

ご注意ください
この記事は2年以上前に書かれたものですので、内容が古い可能性があります。


前回の記事でL2TP/IPsec(openswan/xl2tpd)はAndroid(ICS)かiPhoneの同時利用は厳しいことがわかりました。
そこでOpenVPNに辿り着いたのですが、root化必須なものが多いんですね。
root化不要にこだわって探してみましたが、ありました。

OpenVPN Client。フリー版もあります。

OpenVPN Client
colucci-web.it
価格:undefined  平均評価:4.0(4)

今回は設定と性能ではまったので設定情報も載せることにします。

まずはOpenVPNのダウンロード。

# yum install openvpn

各種証明書を作成します。
詳細は「VPNサーバー構築(OpenVPN) - CentOSで自宅サーバー構築」に譲ります。わかりやすいです。

# cp -pr /usr/share/doc/openvpn-2.2.2/easy-rsa/ /etc/openvpn/.
# cd /etc/openvpn/easy-rsa/
# chmod 755 build-*
# vi vars <-- KEY_COUNTRYからKEY_EMAILまで編集
# source ./vars
# ./build-ca
# cp -p keys/ca.crt /etc/openvpn/.
# ./build-key-server server
# cp -p keys/server.crt /etc/openvpn/.
# cp -p keys/server.keys /etc/openvpn/.
# ./build-dh
# cp -p keys/dh1024.pem /etc/openvpn/
# openvpn --genkey --secret /etc/openvpn/ta.key
# cd /etc/openvpn; chmod 600 *.key
# cd /etc/openvpn/easy-rsa/
# ./build-key-pass android

設定ファイルは以下のようにtunモードで設定します。

port 1194
proto udp
dev tun ★ルーティングモードの指定
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh1024.pem
server 192.168.50.0 255.255.255.0  ★VPNネットワークのネットワークを指定
push "route 192.168.xx.0 255.255.255.0" ★不要かも。VPNサーバの接続しているLANの指定
push "dhcp-option DNS 192.168.xx.xxx" ★DNSサーバの指定
push "redirect-gateway def1 bypass-dhcp" ★android側のデフォルトゲートウェイをVPNサーバ側に向ける
keepalive 10 120
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status /var/log/openvpn-status.log
log         /var/log/openvpn.log
log-append  /var/log/openvpn.log
verb 0

実は最初はtapモード(ブリッジ接続モード)で構築したのですが素のandroidではブリッジ接続はサポートされていないようで接続出来ませんでした。今回はルーティングモードで構築をします。

続いてネットワーク関連の設定で、まずはIPフォワードの設定です。
/etc/sysctl.conf

# Kernel sysctl configuration file for Red Hat Linux
#
# For binary values, 0 is disabled, 1 is enabled.  See sysctl(8) and
# sysctl.conf(5) for more details.
# Controls IP packet forwarding
net.ipv4.ip_forward = 1
# Controls source route verification
net.ipv4.conf.default.rp_filter = 1
# Do not accept source routing
net.ipv4.conf.default.accept_source_route = 0
# Controls the System Request debugging functionality of the kernel
kernel.sysrq = 0
# Controls whether core dumps will append the PID to the core filename
# Useful for debugging multi-threaded applications
kernel.core_uses_pid = 1
# Controls the use of TCP syncookies
net.ipv4.tcp_syncookies = 1
# Controls the maximum size of a message, in bytes
kernel.msgmnb = 65536
# Controls the default maxmimum size of a mesage queue
kernel.msgmax = 65536
# Controls the maximum shared segment size, in bytes
kernel.shmmax = 4294967295
# Controls the maximum number of shared memory segments, in pages
kernel.shmall = 268435456
# for IPSec
net.core.xfrm_larval_drop = 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
net.ipv4.conf.eth1.send_redirects = 0
net.ipv4.conf.eth1.accept_redirects = 0

NATの設定も。
/etc/sysconfig/iptables

# Generated by iptables-save v1.3.5 on Mon Oct 29 13:46:52 2012
*nat
:PREROUTING ACCEPT [4059:1968595]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -s 192.168.50.0/24 -o br0 -j MASQUERADE
COMMIT
# Completed on Mon Oct 29 13:46:52 2012
# Generated by iptables-save v1.3.5 on Mon Oct 29 13:46:52 2012
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [346:53022]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -i eth1 -j ACCEPT
-A RH-Firewall-1-INPUT -i ppp0 -j ACCEPT
-A RH-Firewall-1-INPUT -i tun0 -j ACCEPT
...

ここではまったのは前回のL2TP/IPsecでbridge-utilsをインストールしたのですが、br0というeth0をブリッジしたインタフェースが出来ていました。実際にはbr0からパケットが出ていたのですがeth0を指定しておりNATがかからない状況に…。

続いてサーバー側からCA証明書(/etc/openvpn/ca.crt)、クライアント証明書(/etc/openvpn/easy-rsa/keys/android.crt)、クライアント秘密鍵(/etc/openvpn/easy-rsa/keys/android.key)、TLS認証鍵(/etc/openvpn/ta.key)をクライアント側へ持ち込みます。

Xperia SXをUSB接続し、当該ファイル群をXperia SXに移送します。

続いてAndroid側での作業となります。OpenVPN Clientを開いて定義をしていきます。

まずはAuth.タブ。Sertification authorityにはca.crtを、Certificateにはandroid.crtを、Private keyにはandroid.keyを指定します。


続いて、Securityタブ。Key fileにta.keyを指定します。

OptionsタブでDNSサーバの指定や圧縮の指定など。

これで一通り完了なので早速androidから接続してみます。
接続後スループットを測定したのですが…。低速すぎる…。300kbpsとは…。


いろいろ調べてみたところMTU値を調整すればいいというが判明しました。
/etc/openvpn/server.confに以下の2行を追加します。

#Link
link-mtu 1400
#mssfix 1280

するとopenvpn client側でMTU値がサーバ側とクライアント(android端末)で違うよ、とワーニング出力されたので、

以下のように設定します。

するとスループットが十分に満足できる値になりましたのでめでたし、めでたし。

これで中国からブロックされてしまうサイト(facebook/twitterなど)の閲覧やDoCoMoにブロックされてしまうサイトの閲覧が可能になりますー。
(何に使うんだか…ww)

この記事は役に立ちましたか?評価をお願いいたします。
[合計: 0 平均: 0]

広告336px

広告336px

-Article(記事)
-,

Copyright© 蒲田ネット , 2017 AllRights Reserved.