中二病でも全うに生きたい!

だーくふれいむまちゅたー

OpenVPN と easy-rsa 3 使う

数億年ぶりに OpenVPN のサーバ作った。

一時期 VPN サーバは ipsec/l2tp でばかり作っていて、その理由が iPhone とかじゃ OpenVPN クライアントがないという感じだったんだけど、さすがに今の時代ではクライアントが存在するらしい。

OpenVPN 自体は 2.3 とかってバージョンが出ているけど、数年前の設定とほぼ変わらずいけるのでインターネットで調べれば、特に難しいことはなかった。

easy-rsa 3 は初見でなかなか情報ない上にちょっとオプションの追加が必要だったので、それをメモがてら残す。

easy-rsa とは

簡単認証局作成ツール。認証局の作成は元来めんどくさいもので、オレオレとはいえ必要なステータスを適当に埋めていく必要があった。
easy-rsa は、その部分を行わずにコマンド入力のみで行えるようにした。便利ツール。

実際に作る

### easy-rsa 3 のダウンロード
# git clone https://github.com/OpenVPN/easy-rsa/
# cd easy-rsa/easyrsa3/
### 証明局の初期化
# ./easyrsa init-pki
### 認証局の作成
# ./easyrsa build-ca
### DHパラメータの生成
# ./easyrsa gen-dh
### サーバ用証明書/秘密鍵の作成
# ./easyrsa build-server-full server nopass
### クライアント用証明書/秘密鍵の作成
# ./easyrsa build-client-full client nopass

これで必要な証明書/秘密鍵が作成されて便利(パスフレーズ等の入力は必要)。あとは設置するだけ。
ただ、クライアントの設定に下記がある場合、繋がらない。

ns-cert-type server
or
remote-cert-tls server

これは中間者攻撃対策用の設定らしく、使うのが好ましいらしい。
これはサーバの証明書にサーバの証明書だということをパラメータに記載して、それをクライアント側で認証するもので先ほどのやり方だとそのサーバの証明書だというパラメータが記載されない。

https://openvpn.net/index.php/open-source/documentation/howto.html#mitm

サーバの証明書だとパラメータに記載するには以下のコマンドでサーバ証明書を作成する必要がある。

# ./easyrsa --ns-cert=YES build-server-full server nopass

このコマンドでサーバの証明書を作成すると証明書のパラメータに以下が追加される。

# openssl x509 -text -noout -in pki/issued/server.crt 
Certificate:
...
            Netscape Comment: 
                Easy-RSA Generated Certificate
            Netscape Cert Type: 
                SSL Server
...

このパラメータが記載されていれば、先ほどの中間者攻撃対策用の設定を行っても問題なく接続することができる。

つぎ

OpenVPN サーバ作るの何億光年後かなー。