UbuntuでOpenVPNサーバーを構築する

VPNサーバー, ネット接続OpenVPN, Ubuntu, VPN, サーバー

これまでStrongswanを使用して、IKEv2やIPsecに対応したVPNサーバーを構築してきたのだが、OpenVPNサーバーはどんな感じなんだろうとおもってインストールしてみた。

OpenVPNをパッケージからインストール

これは非常に簡単。aptで一発。

環境設定ファイルの作成

make-caコマンドを用い、設定ファイルを作成したのち、デフォルトの情報を一部編集する。
これらのファイルは、証明書の作成時に利用されるとのこと。

作られたcaディレクトリのなかにvarsというファイルがあるので、そちらを開く。
次のように、KEY_COUNTRY等を日本に設定してあげる。 

その他の設定はとくにいじらず。

これらを環境変数に設定する。

ということで、caディレクトリの初期化を行う。

CA証明書と秘密鍵の作成

今回は証明書を用いた認証を行うので、CA証明書とCA秘密鍵の作成を行う。
正直、証明書だの秘密鍵だのは聞きたくもない単語なのだが、my-caを用いれば非常に簡単だ。

先ほどのcaディレクトリで、次のように入力する。

既に先ほど設定しているので、全部EnterでOK。

keysディレクトリに、ca.crt(CA証明書)とca.key(CA秘密鍵)が作成されているのが確認出来る。

サーバー証明書と秘密鍵の作成

今度はサーバー証明書。これも簡単で、次で一発OK。

keysフォルダには、server.crt(サーバー証明書)とserver.key(サーバー秘密鍵)が作成される。

DHパラメータ生成

DHパラメータとは、TLSを利用する際に必要となるもの。

ちょっと時間がかかるが、まあおいておこう。
keysフォルダには、dh2048.pemが作成される。

TLS認証用秘密鍵の作成

最後に、TLS認証用の秘密鍵を作成する。
これは、openvpnコマンドを使用し、keysフォルダのなかにta.keyとして入れてあげる。

作成されたファイルのコピー

これで全てのファイルの作成が終了した。これらを全て、/etc/openvpnフォルダに入れてあげる必要がある。これまで作ったファイルは次の通りだ。全てkeysフォルダ配下に含まれている。

ファイル名 内容
ca.crt CA証明書
ca.key CA秘密鍵
server.crt サーバー証明書
server.key サーバー秘密鍵
dh2048.pem DHパラメータ
ta.key TLS認証用秘密鍵

さっさとコピーをしてしまう。

クライアント証明書の作成

ここで一度クライアント用の証明書を作成しておく。
これも簡単で、build-keyを用いれば良い。証明書の名前をつけて。

keys配下には、「iphone.crt」(クライアント証明書)「iphone.csr」(CA証明書による署名)「iphone.key」(クライアント秘密鍵)が新たに生成される。

OpenVPNサーバーの設定

/etc/openvpnに「server.conf」というファイルを作成する。
以下の形でファイルを作成すれば大丈夫だ。

OpenVPNを起動する

ここにきて、OpenVPNを起動してみる。

いくつかのサイトではそのまま「service start openvpn」で紹介されていたが、「@server」をつけないとうまく起動しなかった。
その際は、systemctlを用いて「openvpn」をdisabledし、「openvpn@server」をenabledすると良い。

IPtablesの設定変更

今回は10.8.0.0/8からのマスカレードと、udp/tcpでのOpenVPNへのアクセスを許可。enp0s31f6は外部へ接続されているポート。

iPhoneから接続する

先ほど作成したクライアント証明書たちをひとつにまとめ、設定ファイルを作る。
具体的には、次のような形にする。

これを.ovpnという拡張子で保存した後iPhoneに送信し、「OpenVPN Connect」アプリに入れれば、iPhoneからOpenVPNの利用が可能となる。これをiphone.ovpnという名前で保存する。

openvpn-w562

これをOpenVPN Cpnnectに読み込んであげると、このようにすぐに接続が出来る状態となり、ボタン一発でVPN接続が実現出来る。

肝心の速度は、正直あまり出ない。IKEv2などのほうが早いように感じる。が、中国での使用に関してはあまり規制されることがないらしい。
乞うご期待。