NAS(QNAP TS-109II)をゴニョゴニョやりながらなんとかOpenVPN使って、3G/WiFi経由でGALAXY S(SC-02B)と通信できたのでメモ。
- QNAPへのインターネット経由でのOpenVPNアクセス
- Install OpenVPN on QNAP - NAS Wiki
- ViaPress inc. - SC-02B OpenVPN for Android
- beautiful-moon.net - Blog Archive - Xperia(Android)からOpenVPN接続
あたりを参考にした。
いずれも自己責任でお願いします。
特にAndroid側はroot化が必要なので高級文鎮にならないように注意が必要です。
最終的に
- QNAP TS-109II側の設定
- GALAXY S(SC-02B)側の設定
- LAN内部のクライアントと通信する
と、順にGALAXY S⇔QNAP⇔WindowsPCまで通信できるようになりました。
QNAP TS-109II側の設定
Optware ipkg は、QNAP TS-109II で Subversionを使う で色々やったのでそちらを参考にしてください。
OpenVPNをインストール
# ipkg install openvpn
# openvpn
で動けばとりあえずOK
ログディレクトリやtunモジュール用のディレクトリを生成
# cd /opt/etc/openvpn --- title: "mkdir log" date: 2011-12-10 16:15:00 tags: [雑記, Android, QNAP, Galaxy S] categories: [ブログ] --- --- title: "cd log" date: 2011-12-10 16:15:00 tags: [雑記, Android, QNAP, Galaxy S] categories: [ブログ] --- --- title: "touch openvpn.log" date: 2011-12-10 16:15:00 tags: [雑記, Android, QNAP, Galaxy S] categories: [ブログ] --- --- title: "touch status.log" date: 2011-12-10 16:15:00 tags: [雑記, Android, QNAP, Galaxy S] categories: [ブログ] --- --- title: "mkdir /opt/etc/openvpn/modules" date: 2011-12-10 16:15:00 tags: [雑記, Android, QNAP, Galaxy S] categories: [ブログ] ---
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の内容 --- title: "exec openvpn" date: 2011-12-10 16:15:00 tags: [雑記, Android, QNAP, Galaxy S] categories: [ブログ] --- (sleep 10; /opt/sbin/openvpn /opt/etc/openvpn/easy.conf)&
が実行されるように、autorun.shなどに書き加える
easy.confの内容
# OpenVPN server configuration QNAP NAS --- title: "basic settings" date: 2011-12-10 16:15:00 tags: [雑記, Android, QNAP, Galaxy S] categories: [ブログ] --- port 1194 proto udp dev tun # --- title: "detect mtu if the connection is slow." date: 2011-12-10 16:15:00 tags: [雑記, Android, QNAP, Galaxy S] categories: [ブログ] --- ; mtu-test # --- title: "define mtu, if necessary" date: 2011-12-10 16:15:00 tags: [雑記, Android, QNAP, Galaxy S] categories: [ブログ] --- ; tun-mtu xyz # --- title: "define the ip-addresses of the underlying tunnel" date: 2011-12-10 16:15:00 tags: [雑記, Android, QNAP, Galaxy S] categories: [ブログ] --- server 10.8.0.0 255.255.255.0 # --- title: "Route" date: 2011-12-10 16:15:00 tags: [雑記, Android, QNAP, Galaxy S] categories: [ブログ] --- push "route 192.168.1.0 255.255.255.0" # <--- LANのIPアドレスを指定 # --- title: "certificates & keys" date: 2011-12-10 16:15:00 tags: [雑記, Android, QNAP, Galaxy S] categories: [ブログ] --- 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 # --- title: "data compression" date: 2011-12-10 16:15:00 tags: [雑記, Android, QNAP, Galaxy S] categories: [ブログ] --- comp-lzo # --- title: "allow, that several clients with the same common name log on" date: 2011-12-10 16:15:00 tags: [雑記, Android, QNAP, Galaxy S] categories: [ブログ] --- ; duplicate-cn # --- title: "different clients can "see" each other through the tunnel." date: 2011-12-10 16:15:00 tags: [雑記, Android, QNAP, Galaxy S] categories: [ブログ] --- ; client-to-client # --- title: "Keepalive" date: 2011-12-10 16:15:00 tags: [雑記, Android, QNAP, Galaxy S] categories: [ブログ] --- keepalive 15 120 # --- title: "verbosity of status messages in the console. Activate for debugging (1-9 possible)" date: 2011-12-10 16:15:00 tags: [雑記, Android, QNAP, Galaxy S] categories: [ブログ] --- ; verb 5 # --- title: "Log files" date: 2011-12-10 16:15:00 tags: [雑記, Android, QNAP, Galaxy S] categories: [ブログ] --- status /share/HDA_DATA/system/log/openvpn-status.log log-append /share/HDA_DATA/system/log/openvpn.log # --- title: "Run as daemon (activate, after everything is set up properly)" date: 2011-12-10 16:15:00 tags: [雑記, Android, QNAP, Galaxy S] categories: [ブログ] --- ; daemon # --- title: "Management Interface. Access with "telnet localhost 7505"" date: 2011-12-10 16:15:00 tags: [雑記, Android, QNAP, Galaxy S] categories: [ブログ] --- management localhost 7505
GALAXY S(SC-02B)側の設定
Android Marketから必要なアプリをインストール
BusyBox、OpenVPN Installer、OpenVPN Settingsをインストール
あと、ターミナルソフト(ConnectBot/Android Terminal Emulatorなど) or adbでも出来るかも? も必要
OpenVPN関連のインストール先は、
/system/xbin/
ifconfig/route関連のインストール先は、
/system/xbin/bb/
にしました。
ifconfig/routeの配置
su --- title: "mount -o remount,rw /dev/block/stl9 /system" date: 2011-12-10 16:15:00 tags: [雑記, Android, QNAP, Galaxy S] categories: [ブログ] --- --- title: "mkdir /system/xbin/bb" date: 2011-12-10 16:15:00 tags: [雑記, Android, QNAP, Galaxy S] categories: [ブログ] --- --- title: "ln -s /system/xbin/busybox /system/xbin/bb/ifconfig" date: 2011-12-10 16:15:00 tags: [雑記, Android, QNAP, Galaxy S] categories: [ブログ] --- --- title: "ln -s /system/xbin/busybox /system/xbin/bb/route" date: 2011-12-10 16:15:00 tags: [雑記, Android, QNAP, Galaxy S] categories: [ブログ] ---
で一旦、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を開き、
- 「Load tun kernel module」にチェック
- 「TUN module settings」
- 「Load modules usings」→ insmod を選択
- 「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 --- title: "set mtu, if necessary" date: 2011-12-10 16:15:00 tags: [雑記, Android, QNAP, Galaxy S] categories: [ブログ] --- tun-mtu 1500 # resolv-retry infinite nobind persist-key persist-tun --- title: "certificates and keys" date: 2011-12-10 16:15:00 tags: [雑記, Android, QNAP, Galaxy S] categories: [ブログ] --- --- title: "Note the double \\ in the path for a windows config" date: 2011-12-10 16:15:00 tags: [雑記, Android, QNAP, Galaxy S] categories: [ブログ] --- 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内部のクライアントと通信する
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ファイヤーウォールの場合
- 「例外」
- 「ファイルとプリンタの共有」
- 「スコープの変更」
- 「ユーザーのネットワークのみ」になっていたら「カスタム一覧」にして「10.8.0.0/255.255.255.0,192.168.1.0/255.255.255.0」などに変更
で、接続できると思います。
出来なかったら、Wiresharkで確認するのがイイです。