「OpenVPNの設定(マルチクライアント)」 認証局(Certificate Authority)を設置 サーバとクライアントの証明書を発行するために、自前で認証局(Certificate Authority)を設置する方法がある。サーバはクライアントの証明書を証明して、クライアントはサーバの証明書を証明するだけでで事が足ります。 ここでは、マスタCA、サーバ、クライアントの3者について、証明書と鍵のペアを生成します。 OpenVPNのソースツリーには、easy-rsaというサブディレクトリがあり、そこに、証明書を生成するためのキットがあります。 (1)マスターCAの証明書/キーペア 手順は簡単で、まず、varsというファイルの内容を編集し、以下の順にスクリプトを実行する。 # . ./vars # ./clean-all # ./build-ca build-caは会話形式で入力を求めて来るが、実際に手で入力する必要があるのは、"Common Name"だけである。 (2) サーバ証明書/キーペア 次のようにbuild-key-serverスクリプトを実行する。"Common Name"を聞かれたら、ここでは server と入力し、"Sign the certificate? [y/n]"を指定する。 # ./build-key-server server (3) クライアント証明書/キーペア 次のようにbuild-keyスクリプトを実行する。"Common Name"を聞かれたら、ここでは client1 と入力する。パスワードでクライアントを保護したい場合は、build-key-passを使う。 # ./build-key client1 (# ./build-key-pass client1) 証明書はクライアント毎に異なる名前で生成する(もちろん"Common Name"も変えて)。 DH (Diffie Hellman)パラメータの生成。 ./build-dh 生成された証明書と鍵 ┌───────┬────────┬───────────┬────────┐ │ ファイル名 │ 必要なマシン │ 目的 │ 秘密にする必要 │ ├───────┼────────┼───────────┼────────┤ │ ca.crt │ サーバと │ ルート(マスター) │ いいえ │ │ │ クライアント │ CA証明書 │ │ ├───────┼────────┼───────────┼────────┤ │ ca.key │ 鍵署名マシンだ │ ルート(マスター) │ はい │ │ │ け │ CA鍵 │ │ ├───────┼────────┼───────────┼────────┤ │ dh{n}.pem │ サーバだけ │ DH (Diffie Hellman) │ いいえ │ │ │ │ パラメータ │ │ ├───────┼────────┼───────────┼────────┤ │ server.crt │ サーバだけ │ サーバ証明書 │ いいえ │ ├───────┼────────┼───────────┼────────┤ │ server.key │ サーバだけ │ サーバ鍵 │ はい │ ├───────┼────────┼───────────┼────────┤ │ client1.crt │ クライアント1 │ クライアント1証明書 │ いいえ │ │ │ だけ │ │ │ ├───────┼────────┼───────────┼────────┤ │ client1.key │ クライアント1 │ クライアント1鍵 │ はい │ │ │ だけ │ │ │ └───────┴────────┴───────────┴────────┘ サーバとクライアントの設定ファイルの作成 OpenVPNのソースツリーには、sample-config-filesディレクトリがあり、設定のサンプルファイルが納められています。 (1)サーバの設定ファイルの編集と起動 雛型をもとにサーバの設定ファイル(/usr/local/etc/openvpn/server-multi.cfg)を以下のように編集した。 -- dev tun ;proto udp|tcp-server # デフォルトでUDP ;port 1194 # デフォルトで1194番ポート server 10.8.0.0 255.255.255.0 # アドレスを割り振るネットワーク ifconfig-pool-persist /usr/local/etc/openvpn/ipp.txt ca /usr/local/etc/openvpn/keys/ca.crt # マスター証明書 cert /usr/local/etc/openvpn/keys/server.crt # サーバ証明書 key /usr/local/etc/openvpn/keys/server.key # サーバ証明書 dh /usr/local/etc/openvpn/keys/dh1024.pem # DHパラメータ comp-lzo # 圧縮オプション keepalive 10 120 ping-timer-rem ;duplicate-cn persist-tun persist-key ;chroot /var/openvpn user nobody # 実行時のUID group nogroup # 実行時のグループ daemon # バックグランド指定 status /var/log/openvpn-status.log management localhost 7505 # 管理ツールのアクセスするポート ;verb 9 -- それから、サーバを起動する。 # /usr/local/sbin/openvpn --config /usr/local/etc/openvpn/server-multi.cfg (2)クライアントの設定ファイルの編集と起動 雛型をもとにクライアントの設定ファイル(/etc/openvpn/client1.cfg)を以下のように編集し、鍵を設置した。 -- client dev tun ;proto udp|tcp-server ;port 1194 remote swan.example.jp 1194 ca /etc/openvpn/keys/ca.crt cert /etc/openvpn/keys/client2.crt key /etc/openvpn/keys/client2.key comp-lzo keepalive 10 60 ping-timer-rem persist-tun persist-key ;chroot /var/openvpn # デフォルトルートをVPNにするには、redirect-gatewayを使う # redirect-gateway def1 -- それから、クライアントを起動する。 # /usr/sbin/openvpn --config /etc/openvpn/client1.cfg & OpenVPNの管理 "management localhost 7505"の設定により、telnet で接続して管理することができます。 # telnet localhost 7505 使用可能なコマンドについては "help" を実行してみてください。