OpenVPN設定メモ

  1. 用途
  2. OpenVPNサーバ設定
  3. OpenVPNクライアント設定

用途

手元のAndroid 4.0端末からVPSまでVPNを張って、VPSからインターネットへアクセスする。 これで、多少怪しいWi-Fi経由であっても少しは安心してスマホからのネット接続ができる。

なおOpenVPNを採用したのは、 Android 4.0ではL2TP/IPSecにバグがあるらしいがOpenVPNならば専用クライアントがあるし、 OpenVPNはUDPでカプセル化しているようなのでNATでもあまり関係ない、 というのが理由。

環境:CentOS 7.1 さくらVPS


OpenVPNサーバ設定

まずは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を変更する。 変更点は以下の通り。

  1. セキュリティ上の理由により、SHA256を使用させる
  2. CA証明書のサブジェクトを変更する
  3. VPNサーバ証明書のサブジェクトを変更する
  4. VPNクライアント証明書のサブジェクトを変更する
  5. secp256k1がエラーになるがどうせ使わないので省略する

変更後の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

OpenVPNクライアント設定

サーバ上で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

↑ トップページ