QNAP TS-109Ⅱ と GALAXY S(SC-02B) をOpenVPNで繋ぐ

NAS(QNAP TS-109II)をゴニョゴニョやりながらなんとかOpenVPN使って、3G/WiFi経由でGALAXY S(SC-02B)と通信できたのでメモ。


あたりを参考にした。

いずれも自己責任でお願いします。

特にAndroid側はroot化が必要なので高級文鎮にならないように注意が必要です。


最終的に

  • QNAP TS-109Ⅱ側の設定
  • GALAXY S(SC-02B)側の設定
  • LAN内部のクライアントと通信する

と、順にGALAXY S⇔QNAP⇔WindowsPCまで通信できるようになりました。


QNAP TS-109Ⅱ側の設定

Optware ipkg は、QNAP TS-109Ⅱ で Subversionを使う で色々やったのでそちらを参考にしてください。

OpenVPNをインストール

# ipkg install openvpn

# openvpn

で動けばとりあえずOK

ログディレクトリやtunモジュール用のディレクトリを生成

# cd /opt/etc/openvpn
# mkdir log
# cd log
# touch openvpn.log
# touch status.log
# mkdir /opt/etc/openvpn/modules

Install the missing tun.ko moduleから適切なtunモジュールをダウンロードし

/opt/etc/openvpn/modules

に配置

起動時に、

# install tun.ko
mkdir /dev/net;
mknod /dev/net/tun c 10 200;
(sleep 10; insmod /opt/etc/openvpn/modules/tun.ko)&

easy.confの内容
# exec openvpn
(sleep 10; /opt/sbin/openvpn /opt/etc/openvpn/easy.conf)&

が実行されるように、autorun.shなどに書き加える

easy.confの内容

# OpenVPN server configuration QNAP NAS
# basic settings
port 1194
proto udp
dev tun
#
# detect mtu if the connection is slow.
; mtu-test
#
# define mtu, if necessary
; tun-mtu xyz
#
# define the ip-addresses of the underlying tunnel
server 10.8.0.0 255.255.255.0
#
# Route
push "route 192.168.1.0 255.255.255.0"   #  <--- LANのIPアドレスを指定
#
# certificates & keys
dh   /opt/etc/openvpn/keys/dh1024.pem
ca   /opt/etc/openvpn/keys/ca.crt
cert /opt/etc/openvpn/keys/server.crt
key  /opt/etc/openvpn/keys/server.key
#
# data compression
comp-lzo
#
# allow, that several clients with the same common name log on
; duplicate-cn
#
# different clients can "see" each other through the tunnel.
; client-to-client
#
# Keepalive
keepalive 15 120
#
# verbosity of status messages in the console. Activate for debugging (1-9 possible)
; verb 5
#
# Log files
status /share/HDA_DATA/system/log/openvpn-status.log
log-append /share/HDA_DATA/system/log/openvpn.log
#
# Run as daemon (activate, after everything is set up properly)
; daemon
#
# Management Interface. Access with "telnet localhost 7505"
management localhost 7505

GALAXY S(SC-02B)側の設定

Android Marketから必要なアプリをインストール

BusyBoxOpenVPN InstallerOpenVPN Settingsをインストール

あと、ターミナルソフト(ConnectBot/Android Terminal Emulatorなど) or adbでも出来るかも? も必要

OpenVPN関連のインストール先は、

/system/xbin/

ifconfig/route関連のインストール先は、

/system/xbin/bb/

にしました。

ifconfig/routeの配置

su
# mount -o remount,rw /dev/block/stl9 /system
# mkdir /system/xbin/bb
# ln -s /system/xbin/busybox /system/xbin/bb/ifconfig
# ln -s /system/xbin/busybox /system/xbin/bb/route

で一旦、GALAXY Sを再起動

/sdcard/openvpn/galaxys/

にGALAXY S用のtunドライバ(tun-I9000-JPK.zip)を配置

HOWTO tun.ko to run OpenVPN on Froyo xxJPK Galaxy S I9000 - xda-developersからダウンロード

OpenVPN Settingsを起動して、Advancedを開き、

  1. 「Load tun kernel module」にチェック
  2. 「TUN module settings」
  3.  「Load modules usings」→ insmod を選択
  4.  「Path to tun module」→ /sdcard/openvpn/galaxys/tun.ko と指定

Key-generationの手順で認証キーなどを作る

それぞれ、必要なファイルを指定したパス(/sdcard/openvpn/ca/)にアップ

vpn.confを配置

/sdcard/openvpn/vpn.conf

に配置

vpn.confの内容

# connect to QNAP OpenVPN Server
script-security 2
proto udp
dev tun
tls-client
remote vpn.example.net 1194  #  <--- enter your dyndns-account here!
pull
# set mtu, if necessary
tun-mtu 1500
#
resolv-retry infinite
nobind
persist-key
persist-tun
# certificates and keys
# Note the double \\ in the path for a windows config
ca   /sdcard/openvpn/ca/ca.crt
cert /sdcard/openvpn/ca/key.crt
key  /sdcard/openvpn/ca/key.key
#
comp-lzo

#status /sdcard/openvpn/status.log
#log-append /sdcard/openvpn/log.log

設定の内容はサーバー側の設定と合わせないとうまく繋がりません。

ログを出力するようにしておくと原因の究明に役立つでしょう。

3Gだと実装で20kbpsも出ませんでしたのでまあやれることは限られていますがVPNで繋がるようになりました。


LAN内部のクライアントと通信する

OpenVPN Extras – NAS Wikiを参考

QNAP側(VPNサーバー)でipv4の転送を有効にする

下記コマンドを 起動時に実行されるようにしておく

echo "1" > /proc/sys/net/ipv4/ip_forward

Windows PCのファイル共有を見る

まず、クライアント側で

C:\> route -p add 10.8.0.0 MASK 255.255.255.0 QNAPのアドレス

としてパケットを送り返すことが出来るようにしておく。

ちなみに、-p を指定しておくとPCを再起動しても設定した内容を覚えておいてくれます。


C:\> route add ほげほげ
エラー: ネットワーク データベース ファイル タノE を開けません
エラー: ネットワーク データベース ファイル タノE を開けません

見たいに、エラーが出る場合は、自己の責任においてレジストリの

HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\DataBasePath

を、REG_SZからREG_EXPANG_SZに変えてみてください。

まえ、boost::asioでサンプルがうまく動かなかったのはこれが原因かもと今更気が付いた。


ここで、Windows PC⇔Galaxy S でpingの疎通確認をしておく

※Windows PC側は、pingの応答を返さないようになっていることが良くあるので設定を変更しておくこと

※ICMPの「エコー要求の着信を許可する」をONにしておくこと


問題なければ、ファイヤーウォールでファイル共有がローカルエリア外から接続できるかを確認

Windowsファイヤーウォールの場合

  1. 「例外」
  2. 「ファイルとプリンタの共有」
  3. 「スコープの変更」
  4. 「ユーザーのネットワークのみ」になっていたら「カスタム一覧」にして「10.8.0.0/255.255.255.0,192.168.1.0/255.255.255.0」などに変更

で、接続できると思います。

出来なかったら、Wiresharkで確認するのがイイです。

2011年12月10日 公開

トラックバック

トラックバックはありません。

トラックバックURL:
トラックバックを行うときはトラックバックURLに『犬』を英字小文字で追加してください。たとえばサメならば、"http://~.trackbackshark"とします。

コメント

コメントはありません。

画像に表示されている式の計算結果を入力してください
この画像に表示されている式の計算結果を入力してください