何やらRTX810でVPNを張ってRDP経由でゲームするのが流行っているという噂を 某所で聞きました.しかし,RTX810は高くて買えないという方も多いので はないでしょうか. そこで,RTX810を買えない方でも気軽に試せるオープンソースのVPNソフト, OpenVPNを用いたVPN環境をWindowsとAndroid端末間で作る方法を紹介してみよ うと思います.
ここで例に上げる環境は,以下の通りになるよう構成します.
- LAN: 10.39.39.0/24
- VPN: 10.3.9.0/24
- Windows: LAN - 10.39.39.31, VPN - 10.3.9.1
- Android: LAN - 10.39.39.33, VPN - 自動割当
OpenVPNのインストール
サーバ(Windows)側
まずはOpenVPNサーバ環境をWindows側に準備します.公式ページでWindows用のイン
ストーラが用意されているので,これをダウンロードしインストールしてくだ
さい.
http://openvpn.net/index.php/open-source/downloads.html
インストール時に,「OpenVPN RSA Certificate Management Scripts」もイン
ストールするようチェックするのを忘れないでください.
クライアント(Android)側
次に,クライアント環境をAndoroid側に準備します.OpenVPNはGoogle Playに
て公式に配信されているため,これをインストールします.
https://play.google.com/store/apps/details?id=net.openvpn.openvpn&hl=ja
残念ながら,古いAndroidでは利用できないようです.(私は4.0以降の端末で動作確認しました)
鍵
OpenVPNでは,共通鍵暗号と公開鍵暗号の両方をサポートしていますが, Android版では公開鍵暗号のみをサポートしているため,こちらを利用します.
鍵生成の設定
OpenVPNの公開鍵生成の支援ツールは,C:\Program Files\OpenVPN\easy-rsa以 下にインストールされています.まずeasy-rsaディレクトリごとデスクトップ などにコピーし,メモ帳などでeasy-rsa\vars.bat.sampleの 以下の部分を環境に合わせて編集,vars.batとして保存します.
set KEY_COUNTRY="US" set KEY_PROVINCE="CA" set KEY_CITY="SanFrancisco" set KEY_ORG="Fort-Funston" set KEY_EMAIL="me@myhost.mydomain" set KEY_OU="MyOrganizationalUnit"
今回の環境では,以下のように定義しなおしました.
set KEY_COUNTRY="JP" set KEY_PROVINCE="Kanagawa" set KEY_CITY="Kawasaki" set KEY_ORG="Hachunet" set KEY_EMAIL="phenomer@g.hachune.net" set KEY_OU="Hachunet"
鍵生成
管理者権限でcmd.exeを開き実際に鍵生成スクリプトを実行します. build-*実行時にCommonNameとNameを問い合わせられた際には,それぞれの鍵 に適した名前を入力してください. また,buikd-key-serverとbuild-keyを実行する際に,以下のように問い合わ せがありますが,これは共にyとしてください.
- Sign the certificate? [y/n]
- 1 out of 1 certificate requests certified, commit? [y/n]
> cd \Program Files\OpenVPN\easy-rsa > init-config > vars > mkdir keys > clean-all > build-ca > build-key-server server > build-key android > build-dh
以上の作業で,それぞれの端末に必要な鍵ファイルの生成ができました. OpenVPNの実行に必要なファイルは以下の表のとおりです.
ファイル名 | 必要とするホスト |
---|---|
ca.crt | サーバ,クライアント |
dh2048.pem | サーバ |
server.crt | サーバ |
server.key | サーバ |
android.crt | クライアント |
android.key | クライアント |
鍵生成まわりは,いろいろとハマりどころが多いように感じるので, 失敗した場合はドキュメント やエラーメッセージをよく読んでやり直してみてください.
サーバ(Windows)側の準備
メモ帳等を利用し,設定ファイルserver.ovpnを記述します. サーバ側の設定ファイルは,以下のようになります.
port 1194 proto udp dev tun ca ca.crt cert server.crt key server.key dh dh2048.pem server 10.3.9.0 255.255.255.0 ifconfig 10.3.9.1 255.255.255.0 comp-lzo keepalive 10 60 ping-timer-rem persist-key persist-tun max-clients 5
この設定ファイルを保存したフォルダ内に,先ほど生成した鍵ファイルのうち サーバ側で必要なものをまとめて入れておいてください.
クライアント(Android端末)側の準備
Android用OpenVPNの設定は,以下のように記述します. 通常のOpenVPNの設定ファイルと異なる点として,次のようなタグを用い鍵ファイルの内容を全て 設定ファイル内に記述しなければならない点があります.
- <ca> - ca.crt
- <cert> - android.crt
- <key> - android.key
client dev tun proto udp remote 10.39.39.31 1194 persist-key persist-tun ns-cert-type server comp-lzo <ca> -----BEGIN CERTIFICATE----- MIIE6DCCA9CgAwIBAgIJAI7WSDBm6otGMA0GCSqGSIb3DQEBCwUAMIGoMQswCQYD VQQGEwJKUDERMA8GA1UECBMIS2FuYWdhd2ExETAPBgNVBAcTCEthd2FzYWtpMREw DwYDVQQKEwhIYWNodW5ldDERMA8GA1UECxMISGFjaHVuZXQxFDASBgNVBAMTC0hh Y2h1bmV0IENBMRAwDgYDVQQpEwdFYXN5UlNBMSUwIwYJKoZIhvcNAQkBFhZwaGVu b21lckBnLmhhY2h1bmUubmV0MB4XDTEzMDgwNjA3MjgyM1oXDTIzMDgwNDA3Mjgy M1owgagxCzAJBgNVBAYTAkpQMREwDwYDVQQIEwhLYW5hZ2F3YTERMA8GA1UEBxMI S2F3YXNha2kxETAPBgNVBAoTCEhhY2h1bmV0MREwDwYDVQQLEwhIYWNodW5ldDEU MBIGA1UEAxMLSGFjaHVuZXQgQ0ExEDAOBgNVBCkTB0Vhc3lSU0ExJTAjBgkqhkiG 9w0BCQEWFnBoZW5vbWVyQGcuaGFjaHVuZS5uZXQwggEiMA0GCSqGSIb3DQEBAQUA A4IBDwAwggEKAoIBAQChYUPyhc0vD1OVa3RU1wtbPUYDZXxQuMKTv9wiuIp60Eep keR7CpolWNDxsksptUNAk0MIpc6t+SuBw80Kx6uLe4MeEulPsZ9ztG92OZ7k28cf ufoOcxFSbnbJlwyhhHkjRMjxw/XL06gL1b/DakjfW/yW3LBXL4pn2ZFajGBapw48 2Z76mq/O21RiXMYy1LCRcYqhAGsC5TPHeXHRPecwPOFfO/YvnhKquuSxe06/hIvC 4ceJ9/jQ1tK8zFhA2TGgv2ae3VDdurinWiO0I9omzd7JYr/xq9XrGP2Zqujbp45H KLzn8hCo83e/zj6zyzUOlwqYZu6FhtdV5XP2isVRAgMBAAGjggERMIIBDTAdBgNV HQ4EFgQUdKavhZG6LzXHLOUrVP2M+bjSYh0wgd0GA1UdIwSB1TCB0oAUdKavhZG6 LzXHLOUrVP2M+bjSYh2hga6kgaswgagxCzAJBgNVBAYTAkpQMREwDwYDVQQIEwhL YW5hZ2F3YTERMA8GA1UEBxMIS2F3YXNha2kxETAPBgNVBAoTCEhhY2h1bmV0MREw DwYDVQQLEwhIYWNodW5ldDEUMBIGA1UEAxMLSGFjaHVuZXQgQ0ExEDAOBgNVBCkT B0Vhc3lSU0ExJTAjBgkqhkiG9w0BCQEWFnBoZW5vbWVyQGcuaGFjaHVuZS5uZXSC CQCO1kgwZuqLRjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQB1hZnf UdGllXFPSKp80IT5B0uwV1TGy2ixw9WdVQGPnB/GMgxEHUaoc3ctdKjYcis7fxzf aDMCgt8/GgxsG1zGwmSYDxpjK+0VOSi6uAb6hzWamPggSIV9Dz237mrPMV+eJMcC NoTiX4oD07tMkvWMC2FAOTaY7ARBiXBnI4qUrPVT+HxL2AdihmOIn4BrCLfUg1RK 8ptsOP1qNP2WBjouh37wb+TlvfzTwFi2JcyQw8lpdL3qmLdkBtasYzo4IE9o+rDr 9C9tHyLRe/itvGwU/RWUKG0MgQMIWN1gKmhuzxoHiOhT9NmU3F5g6vYSYT0akWRi qbpxmVm5yJAo9kSL -----END CERTIFICATE----- </ca> <cert> -----BEGIN CERTIFICATE----- MIIFKjCCBBKgAwIBAgIBAjANBgkqhkiG9w0BAQsFADCBqDELMAkGA1UEBhMCSlAx ETAPBgNVBAgTCEthbmFnYXdhMREwDwYDVQQHEwhLYXdhc2FraTERMA8GA1UEChMI SGFjaHVuZXQxETAPBgNVBAsTCEhhY2h1bmV0MRQwEgYDVQQDEwtIYWNodW5ldCBD QTEQMA4GA1UEKRMHRWFzeVJTQTElMCMGCSqGSIb3DQEJARYWcGhlbm9tZXJAZy5o YWNodW5lLm5ldDAeFw0xMzA4MDYwNzMwMTNaFw0yMzA4MDQwNzMwMTNaMIGkMQsw CQYDVQQGEwJKUDERMA8GA1UECBMIS2FuYWdhd2ExETAPBgNVBAcTCEthd2FzYWtp MREwDwYDVQQKEwhIYWNodW5ldDERMA8GA1UECxMISGFjaHVuZXQxEDAOBgNVBAMT B2FuZHJvaWQxEDAOBgNVBCkTB2FuZHJvaWQxJTAjBgkqhkiG9w0BCQEWFnBoZW5v bWVyQGcuaGFjaHVuZS5uZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB AQDaPA6/FlqlL6gbz/r1AzBF+VazenL6WHV2NkcPd1Fj0HUdowGaQR8E23rzN0dg wRkcRIp86dTMkPVNhpvp3HE6ECcsW6LaskrIqXLZPkx5n9iVGvM0YPVY8zQkCM5u UhHQjDPaJry9fo58nVr1YO8jFB7p0AxbZOyqVxKpsaZ49UOzLUTGIgP6QoqBGuR2 YNmd/7OE+pG7A/m912u8G5CZ3XHoDAUUh0nazn4ob6PTGb0csZGjdhNJoOsIIQcV h0A3slgRlCMiYKLYCKSXpvrvo3vwtJP3Fq3coU0dytriPJKrX6R6NSclVl7/cO4J nXZCuC3xXJNcADYuaKvawvqbAgMBAAGjggFfMIIBWzAJBgNVHRMEAjAAMC0GCWCG SAGG+EIBDQQgFh5FYXN5LVJTQSBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O BBYEFCfOnKmBT1kX72NW//8iRzOCA1M+MIHdBgNVHSMEgdUwgdKAFHSmr4WRui81 xyzlK1T9jPm40mIdoYGupIGrMIGoMQswCQYDVQQGEwJKUDERMA8GA1UECBMIS2Fu YWdhd2ExETAPBgNVBAcTCEthd2FzYWtpMREwDwYDVQQKEwhIYWNodW5ldDERMA8G A1UECxMISGFjaHVuZXQxFDASBgNVBAMTC0hhY2h1bmV0IENBMRAwDgYDVQQpEwdF YXN5UlNBMSUwIwYJKoZIhvcNAQkBFhZwaGVub21lckBnLmhhY2h1bmUubmV0ggkA jtZIMGbqi0YwEwYDVR0lBAwwCgYIKwYBBQUHAwIwCwYDVR0PBAQDAgeAMA0GCSqG SIb3DQEBCwUAA4IBAQBwbK5ZTfiM6Ce8wbfPeU6RSzswiY9LypvR7LFrbufYwiNt ptWJVR9zG5JKzPIthgEesjEyhlucaPfReCfox8+2uADDjjTIr8aXO/UgeuPz06X7 os6an6KV/czSBspA3XVn6mrPaixaNVHUluPDKQlfinW8LjZdE1dcHHSsF79NBIeo x1LLjMl9avGntkAV1WmUdaE+atNgeGYwJzBV9gqmWX01StIb3hsVSCINGu85Woch 2YP8N0UM52LXbgXPy6Jnpy80GfoaXjxNI/+xtmnQfzrm8OisKx+HWdaBjFE6lOtR DtHKIm3/sL5Dj3nAiiDw4xyuFqTIZ9Di7ZAjQ15E -----END CERTIFICATE----- </cert> <key> -----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDaPA6/FlqlL6gb z/r1AzBF+VazenL6WHV2NkcPd1Fj0HUdowGaQR8E23rzN0dgwRkcRIp86dTMkPVN hpvp3HE6ECcsW6LaskrIqXLZPkx5n9iVGvM0YPVY8zQkCM5uUhHQjDPaJry9fo58 nVr1YO8jFB7p0AxbZOyqVxKpsaZ49UOzLUTGIgP6QoqBGuR2YNmd/7OE+pG7A/m9 12u8G5CZ3XHoDAUUh0nazn4ob6PTGb0csZGjdhNJoOsIIQcVh0A3slgRlCMiYKLY CKSXpvrvo3vwtJP3Fq3coU0dytriPJKrX6R6NSclVl7/cO4JnXZCuC3xXJNcADYu aKvawvqbAgMBAAECggEAGWTnqmClh5c2DpZy81O9qEbNSfEzs+HbOTgzqJ8Pv3eg SSSQqSxuuZf4hJioG6Acled73fEvq+YqRS0ms13NZx4+ELFRD/WzMgpVrOXM7FIn V6JdLnkh04npRVApBTlTjVrjJb1gNQSm++UrkmYHLaPHvRlSdsgVqfSb3VcoseZR Q0RTTm6iAx0+7fFUJg+rPfhtDpKCPdIOSPXksTObts+7ErWDGlr9DglIuJqUSo/Y crPpkk8gZp1X6bJNS+glxJtwvXP0P2pikQIqKwM2MNgjRxr4fGtoD50LwC6N068o ZSXKGOR+miw/5u+KJySdbGNlu5AbbIkeJtUEbPC2sQKBgQDz7pLhGCB1dw6Ga+Ox wwxuAApPIBpywxHesEF06dQFITXs60Xm4LWmUAXdCjFO4NMQ0Fl6I9ozP1S7hQur Qkds76dx9VJg6NkBwy/Ncma5oADjBi3hRbN6sO6MKBvqlF9nm8guR4dn5ZhoyO1v uBnmvMOlIZzY88VlUf2PHPSuHwKBgQDlCAYx54vHylP49w/I19v/MzgX9OcTegz1 JxewFmpKvEgehNgvQpYbSIGjZ5UctoSbslDU47B2gb75ocI1JXIfhpNHkNqCZZ5j zdtaKSp2NurEcop4tJ0f3h2o8zBhwrgsDsegIwP4XJVF7xjF/+ohLj6Vmk/Xhhaa 4hYBWansBQKBgQCbdXVoPT8afZjlNEc1mBAI3r+zM8uHTijKWlwtDYSRDFxYtIyl GprJ9n/2IjPQiFobgh00STsbpAX1SFJqf+ATXhzB9M3ecycyB1okvf8X2BAYn2yI ACrlS3OMIVfBRXQUDOUkEXQLU/iw9zTTGWpwcebiC6zxW1J3Qyysk5CgkwKBgGDa 8tu54tf7zWU0/hzehG+49ljTPcFz1PT7sj3KTOsMEqetYEskKpyhHgm/bUS2PwAk +Z/+JgsHtX6WFK4rBsckPzZ9oJqSZNgqH0BStl1FviSTl9GR9/yZDwv6xBQjp4Ui PvOOu0gVxx7LDTv2jMm5Z8gWePtY/khDojCx/XUNAoGAHEZ3i2mBT0/PPTbHdrK7 UkBMEZdXgVfwWkN7pDz18hqH2e5c0jX9BREd3DA6PLs9tUkwmw+acvbt9B3/igYl pGwHdrIntfbDeVz2EoYXp/slEHHE0g6Gws36nIIy+2NKFIh/PfFWG+P/ylMwoek5 TgEVSiKmUDWPP7G8JbTQSp4= -----END PRIVATE KEY----- </key>
サーバ側の起動
サーバ側では,コマンドプロンプトを管理者権限で実行し,以下のように openvpnコマンドを実行します.
> openvpn server.ovpn
クライアント側の起動
OpenVPN Connectアプリを起動し,メニューから「Import Profile from SD card」を選択,先ほどコピーした設定ファイルandroid.ovpnを開きます.する と,「Connect」ボタンが出てくるので,これをタップします.
正しく接続が確立できると,以下のような画面になります.
また,サーバ側には以下のようにPeer Connection Initiatedと出るはずです.
Tue Aug 6 16:42:55 2013 10.39.39.32:48589 [android] Peer Connection Initiated with [AF_INET]10.39.39.32:48589
その他の設定
後はインターネット接続に利用しているルータ側で, UDP 1194番ポートへの通信をサーバ側に転送するよう設定し,クライアント側の設定をそのサーバのアドレスに変更すれば,インター ネット経由のVPNを介しWindowsマシンに安全にアクセスすることができるように なるはずです. 合わせて,Dynamic DNSの設定などもおこなうと,より便利になるかもしれま せん.
参考
- OpenVPN.jp How To http://www.openvpn.jp/document/how-to/