外から自宅サーバをいじってみたくなったので、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
作業完了すると「/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を参照したりするので、一旦削除しないでおきます。