外から自宅サーバをいじってみたくなったので、OpenVPNを導入します。
Raspberry Piで動いてるサービスをNUCに移行したら
Raspberry PiはOpenVPNサーバ専用かもしれません。
-
OpenVPN導入
まずはパッケージを最新化します。
しばらくやってなかったので、結構長かったです。aptitude update aptitude upgrade
OpenVPNをインストールします。
相変わらずインストールはコマンドで一瞬。aptitude install openvpn openssl
opensslは以前にApache2にSSLを導入した際に
最初から入ってたような気がしたのですが、入れちゃいました。
-
OpenVPN設定(準備)
Apache2のSSLではサーバー側で公開鍵、秘密鍵を利用していましたが、
OepnVPNを利用するにはサーバー側、クライアント側の両方で公開鍵、秘密鍵を利用します。Apache2の時と同様に鍵の正当性を証明するために、OpenVPN用のオレオレ認証局を作成します。
OpenVPNをインストールするとOpenSSLを簡単に利用できるツール「easy-rsa」が
同時にインストールされるのでそれを利用します。
OpenVPNのディレクトリにツール「easy-rsa」をコピーしておきます。現在では「easy-rsa」は3.0まで公開されていて、
それを利用すると以降に記述した2.0の手順よりさらに短く簡単に設定できるようです。
今回は2.0の手順になります。cd /etc/openvpn cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0 ./easy-rsa
認証局作成、サーバー用の証明書と鍵作成、クライアント用の証明書と鍵作成で
参照する変数用のファイル作成もしておきます。
作成しておくと入力の手間が省けます。vi /etc/openvpn/easy-rsa/vars
下記内容を変更 export EASY_RSA="`pwd`" ↓ export EASY_RSA="/etc/openvpn/easy-rsa" export KEY_COUNTRY="US" ↓ export KEY_COUNTRY="JP" export KEY_PROVINCE="CA" ↓ export KEY_PROVINCE="TOKYO" export KEY_CITY="SanFrancisco" ↓ export KEY_CITY="Akihabara" export KEY_ORG="Fort-Funston" ↓ export KEY_ORG="OreOreCA" export KEY_EMAIL="me@myhost.mydomain" ↓ export KEY_EMAIL="" export KEY_CN=changemeからexport PKCS11_PIN=1234はコメントアウト
-
OpenVPN設定(認証局作成)
認証局を作成する際に「openssl.cnf」を参照するため、
サンプルファイルの「openssl-1.0.0.cnf」を「openssl.cnf」としてコピーしておきます。cd /etc/openvpn/easy-rsa cp -pi openssl-1.0.0.cnf openssl.cnf
さらに先ほど事前作成しておいたvarファイルを環境変数として有効化しておきます。
source ./vars
NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys
初期化してから実行しろということなので、初期化後にオレオレ認証局を作成します。
./clean-all ./build-ca オレオレ認証局名(適当)
Generating a 1024 bit RSA private key ...............++++++ ....++++++ writing new private key to 'ca.key' ----- 略
括弧内にvarsファイルで予め設定しておいた設定内容が表示されるので、
問題なければそのままEnter押下して作業を進めます。
-
OpenVPN設定(DHパラメータ作成)
DHパラメータはサーバーとクライアントで鍵を交換するために利用するそうです。./build-dh
-
OpenVPN設定(サーバー用の証明書と鍵作成)
./build-key-server サーバー名
途中でチャレンジパスワード、会社名付属、署名にサインされるか聞かれますが、
チャレンジパスワード、会社名付属はブランクでEnter、署名はyで入力します。
最後のコミットもyで入力します。
-
OpenVPN設定(クライアント用の証明書と鍵作成)
./build-key クライアント名
実行するファイル名がサーバーと似ていますが微妙に違うので注意。
-
OpenVPN設定(共有鍵作成)
セキュリティ強化の一環として、共有鍵をさらに作成可能です。
この鍵はツール「easy-rsa」ではなく、openvpnコマンドを利用して作成します。openvpn --genkey --secret /etc/openvpn/easy-rsa/keys/ta.key
私の環境では、iphoneから利用する場合、ta.keyがあると
OpenVPNに接続できなかったので、利用しませんでした。
作業完了すると「/etc/openvpn/easy-rsa/keys」に下記ファイルが作成されています。
他にも作業ファイルが作成されていますが、記載していません。
ファイル名 | 概要 | 権限 | 備考 |
---|---|---|---|
ca.crt | オレオレ認証局の証明書 | 644 | サーバー、クライアントで利用 |
ca.key | オレオレ認証局の秘密鍵 | - | - |
サーバー名.crt | サーバーの証明書 | 644 | サーバーで利用 |
サーバー名.csr | サーバーの公開鍵 | - | - |
サーバー.key | サーバーの秘密鍵 | 600 | サーバーで利用 |
クライアント名.crt | クライアントの証明書 | - | クライアントで利用 |
クライアント名.csr | クライアントの公開鍵 | - | - |
クライアント.key | クライアントの秘密鍵 | - | クライアントで利用 |
dh1024.pem | 鍵交換用 | 644 | サーバーで利用 |
ta.key | 共有鍵 | - | - |
サーバーで利用する4ファイルはディレクトリ移動しておきます。
実行権限も表の通りではない場合は修正しておきます。
cd /etc/openvpn cp -pi /etc/openvpn/easy-rsa/keys/ca.crt . cp -pi /etc/openvpn/easy-rsa/keys/サーバー名.crt . cp -pi /etc/openvpn/easy-rsa/keys/サーバー.key . cp -pi /etc/openvpn/easy-rsa/keys/dh1024.pem .
クライアントで利用する3ファイルはUSBメモリ等でクライアントに移動しておきます。
keysディレクトリ内のファイルは削除しても問題ないようですが、
クライアントを追加したい場合、ca.crtやca.keyを参照したりするので、一旦削除しないでおきます。