手元のAndroid 4.0端末からVPSまでVPNを張って、VPSからインターネットへアクセスする。 これで、多少怪しいWi-Fi経由であっても少しは安心してスマホからのネット接続ができる。
なおOpenVPNを採用したのは、 Android 4.0ではL2TP/IPSecにバグがあるらしいがOpenVPNならば専用クライアントがあるし、 OpenVPNはUDPでカプセル化しているようなのでNATでもあまり関係ない、 というのが理由。環境:CentOS 7.1 さくらVPS
まずはepelからopenvpnをインストール。
# yum install openvpn
証明書を作成するためのディレクトリを作成する。 今回は/etc/openvpn/setupとする。
# mkdir /etc/openvpn/setup # cd /etc/openvpn/setup # cp /usr/share/doc/openvpn-2.3.7/sample/sample-keys/gen-sample-keys.sh . # cp /usr/share/doc/openvpn-2.3.7/sample/sample-keys/openssl.cnf. # chmod a+x gen-sample-keys.sh # vi gen-sample-keys.sh
gen-sample-keys.shを変更する。 変更点は以下の通り。
変更後のgen-sample-keys.shはこんな感じ。
# Generate CA key and cert openssl req -new -newkey rsa:4096 -days 3650 -nodes -x509 -sha256 \ -extensions easyrsa_ca -keyout sample-ca/ca.key -out sample-ca/ca.crt \ -subj "/C=JP/O=組織名/CN=certificate/emailAddress=メールアドレス" \ -config openssl.cnf # Create server key and cert openssl req -new -nodes -config openssl.cnf -extensions server -sha256 \ -keyout sample-ca/server.key -out sample-ca/server.csr \ -subj "/C=JP/CN=サーバホスト名/emailAddress=メールアドレス" openssl ca -batch -config openssl.cnf -extensions server \ -out sample-ca/server.crt -in sample-ca/server.csr # Create client key and cert openssl req -new -nodes -config openssl.cnf -sha256 \ -keyout sample-ca/client.key -out sample-ca/client.csr \ -subj "/C=JP/CN=client1/emailAddress=メールアドレス" openssl ca -batch -config openssl.cnf \ -out sample-ca/client.crt -in sample-ca/client.csr (途中省略) ## Create EC server and client cert (signed by 'regular' RSA CA) #openssl ecparam -out sample-ca/secp256k1.pem -name secp256k1 # #openssl req -new -newkey ec:sample-ca/secp256k1.pem -nodes -config openssl.cnf \ # -extensions server \ # -keyout sample-ca/server-ec.key -out sample-ca/server-ec.csr \ # -subj "/C=KG/ST=NA/O=OpenVPN-TEST/CN=Test-Server-EC/emailAddress=me@myhost.mydomain" #openssl ca -batch -config openssl.cnf -extensions server \ # -out sample-ca/server-ec.crt -in sample-ca/server-ec.csr # #openssl req -new -newkey ec:sample-ca/secp256k1.pem -nodes -config openssl.cnf \ # -keyout sample-ca/client-ec.key -out sample-ca/client-ec.csr \ # -subj "/C=KG/ST=NA/O=OpenVPN-TEST/CN=Test-Client-EC/emailAddress=me@myhost.mydomain" #openssl ca -batch -config openssl.cnf \ # -out sample-ca/client-ec.crt -in sample-ca/client-ec.csr (以下略)
編集したgen-sample-keys.shを実行して証明書を作成する。
# ./gen-sample-keys.sh
作成されたファイルのうち必要なものを/etc/openvpn直下に移す。
# cp ca.crt server.key server.crt dh2048.pem /etc/openvpn # chgrp openvpn /etc/openvpn/server.key # chmod 640 /etc/openvpn/server.key
OpenVPNサーバ設定ファイルを作成する。 デフォルトは/usr/share/doc/openvpn-2.3.7/sample/sample-config-files/server.confにあるので、 コメント部分を見ながら太字の部分を変更。
# vi /etc/openvpn/server.conf port 1194 proto udp dev tun ca ca.crt cert server.crt key server.key # This file should be kept secret dh dh2048.pem server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 208.67.222.222" push "dhcp-option DNS 208.67.220.220" keepalive 10 120 comp-lzo user openvpn group openvpn persist-key persist-tun status openvpn-status.log verb 3
firewalldを設定して、openvpnポートを開けてIPマスカレードを設定する。
firewall-cmd --add-service=openvpn --permanent # firewall-cmd --zone=public --add-masquerade --permanent # firewall-cmd --reload
サービスを起動。
# systemctl start openvpn@server # systemctl enable openvpn@server
サーバ上でclient.ovpnを作成する。 デフォルトは/usr/share/doc/openvpn-2.3.7/sample/sample-config-files/client.confにあるので、コメント部分を確認しながら太字の行を変更。
# vi /etc/openvpn/setup/client.ovpn client dev tun proto udp remote サーバFQDN(またはIPアドレス) 1194 resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert client.crt key client.key ;remote-cert-tls (この行はコメントアウト) comp-lzo verb 3
Android 4.0のSDカード上に/openvpnディレクトリを作成し、サーバから以下のファイルをコピーして配置。
公式アプリOpenVPN Connect(Google Play)をインストールして、メニューの"Import" -> "Import from SD card"から先ほどのclient.ovpnを選択する。
最終更新日:2015/08/16