VPNサーバーの構築
VPNサーバーは、大まかに以下の手順で構築します。
- AWSインスタンスの作成
- サーバーソフトウェアのインストール
- 初期設定
まず、インスタンスの作成から進めていきます。
AWSインスタンスの作成
AWSのインスタンスを立てる方法は、多くの文献があるので詳しくは解説しません。ただ、以下の2点は個別に設定してください。
- セキュリティグループの設定で、VPN接続用ポート(1194)を開放する
- インスタンスに対する“アクション”から、“送信元/送信先変更のチェック”を無効にする
OSは、「Amazon Linux AMI」であるとして進めます。
では、VPNサーバーの作成に入っていきます。
サーバーソフトウェアのインストール
AWSインスタンスにSSHで接続し、必要なソフトをインストールしていきます。
以下のコマンドは、VPNサーバーソフトウェアである「OpenVPN」と、サーバーとして運用するための認証局を作成するソフトウェアである「Easy-RSA」をインストールするためのものです。
$ sudo apt-get install -y openvpn $ wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.0-rc2/EasyRSA-3.0.0-rc2.tgz $ tar -xvzf EasyRSA-3.0.0-rc2.tgz $ sudo mv EasyRSA-3.0.0-rc2 /usr/local/EasyRSA $ cd /usr/local/EasyRSA/
インストールは正常に終了しましたか?
では、続いてサーバー上に認証局を作成します。以下のコマンドを順番に入力してください。
$ ./easyrsa init-pki $ ./easyrsa build-ca $ ./easyrsa gen-dh
1つ目は公開鍵基盤(Public Key Infrastructure)の初期化、2つ目は認証局(Certification Authority)の作成、3つ目は公開鍵作成用の暗号であるDH(Diffie-Hellman)パラメータの作成を行うものです。
2つ目のコマンドで入力を求められるパスフレーズは、以降の証明書発行の際に入力を求められるので、忘れないようにしてください。
初期設定
初期設定として、サーバーとクライアント、それぞれで使用する証明書(.crtファイル)と鍵(.keyファイル)の発行、そしてサーバー用設定ファイルの作成を行います。
本来、クライアントの名称は任意ですが、今回は識別のため、以下のように指定します。
- GoPiGo:gopigo
- スマホ:smartphone
以下のコマンドで証明書と鍵を作成しましょう。
$ ./easyrsa build-server-full server nopass $ ./easyrsa build-client-full gopigo nopass $ ./easyrsa build-client-full smartphone nopass
1行目はサーバー向け、2行目と3行目はそれぞれGoPiGoと、スマホ向けの証明書と鍵ファイルを生成するコマンドです。
crtファイルは、/usr/local/EasyRSA/pki/issued/以下に、keyファイルは、 /usr/local/EasyRSA/pki/private/以下に、指定した名称で生成されます。
途中で入力を求められるパスフレーズには、1つ前の手順の、./easy-rsa build-caコマンドで指定したパスフレーズを入力してください。
次に、サーバー設定ファイルを作成します。設定例はOpenVPNのインストールディレクトリの中にあるので、それをコピーして使用します。
$ sudo cp /usr/share/doc/openvpn-2.3.12/sample/sample-config-files/server.conf /etc/openvpn/server.conf $ sudo vi /etc/openvpn/server.conf
編集する必要がある項目は以下の2つです。それぞれの行頭の「;」を削除し、有効化してください。
-
クライアントに固定IPアドレスを振るため、137行目の
client-config-dir ccdの有効化 -
クライアント間の通信を許可するため、197行目の
client-to-clientの有効化
その他の項目については、デフォルト設定のままで問題ありません。項目の詳細については、日本語訳されたHow Toが公開されているので、そちらを参考にしてください。
今回、VPNクライアントに割り振るプライベートIPアドレスは、図3のイメージに従い、以下のとおりとします。
- GoPiGo:10.8.0.5
- スマホ:10.8.0.9
以下のコマンドでファイルを作成し、設定します。作成するファイル名はクライアント名と同一で、拡張子は必要ありません。ファイルの中にはifconfig-pushで始まり、仮想的なクライアントとサーバーのエンドポイントの組を指定します。このクライアントに対するサーバーのエンドポイントの値は決まっています。
クライアント側IPアドレス10.8.0.5には10.8.0.6が、クライアント側IPアドレス10.8.0.9には10.8.0.10が、それぞれ対応します。
$ sudo mkdir /etc/openvpn/ccd $ sudo vi /etc/openvpn/ccd/gopigo ifconfig-push 10.8.0.5 10.8.0.6 $ sudo vi /etc/openvpn/ccd/smartphone ifconfig-push 10.8.0.9 10.8.0.10
エンドポイントの組は、こちらで公開されています。クライアントを増やす際などに参考にしてください。
最後に、以下のコマンドで、サーバー用の証明書、鍵、DHパラメータファイルを、サーバー設定ファイルで指定したディレクトリ/etc/openvpn/に配置して、サーバー側での作業は終了です。
$ sudo cp /usr/local/EasyRSA/pki/ca.crt /etc/openvpn/ $ sudo cp /usr/local/EasyRSA/pki/issued/server.crt /etc/openvpn/ $ sudo cp /usr/local/EasyRSA/pki/private/server.key /etc/openvpn/ $ sudo cp /usr/local/EasyRSA/pki/dh.pem /etc/openvpn/dh1024.pem
以下のコマンドで、VPNサーバーを起動してみましょう。
$ sudo /etc/rc.d/init.d/openvpn start
以上でサーバー側の準備は完了です。
次は、クライアントからVPNサーバーに接続するための準備を進めていきます。
