13.5. OpenVPN
VPNはインターネットなどの公衆ネットワークを介して、まるで専用線で接続されているようにプライベートなネットワークを構築するサービスのこと。 VPNでは暗号化した経路を使用することで安全に通信ができることを実現している。
13.5.1. OpenVPNとは
OpenVPNはLinuxでVPNを通す際に選択されるVPNの1つ。
OpenVPNではL2/L3プロトコルをSSL/TLSでカプセル化しOpenVPNサーバとOpenVPNクライアントを接続する。
OpenVPNでは公開鍵基盤(PKI)を使用する。
CA(認証局)、OpenVPNサーバ、OpenVPNクライアントそれぞれで必要になるファイルを以下にまとめる。
| サイド | 必要ファイル | 
|---|---|
| CA | CA証明書、CA秘密鍵 | 
| OpenVPNサーバ | CA証明書、サーバ証明書、サーバ秘密鍵、DHパラメータ | 
| OpenVPNクライアント | CA証明書、クライアント証明書、クライアント秘密鍵 | 
なおCAを自己証明で行う場合は、CA秘密鍵はOpenVPNサーバに設置する。
またOpenVPNのクライアント-サーバ接続形態にはルーティング接続とブリッジ接続がある。
これらはネットワーク1からネットワーク2に対してVPN接続をした際の、ネットワーク2への接続の行われ方が異なる。
ルーティング接続
仮想トンネルネットワークを通して異なるネットワークに接続する方法。
VPNクライアントのネットワークにアクセスする際には、VPNサーバや他のルータを経由して(ルーティングして)アクセスすることになる。
特徴は以下の通り。
- OpenVPNサーバ/クライアントは別々のネットワークが利用できる
- LAN同士を接続する用途に向いている
- 大規模アクセス向き
ブリッジ接続
仮想インターフェイス経由で接続する方法。
接続先ネットワークと同じネットワークセグメントのIPアドレスをOpenVPNクライアントの仮想インターフェイス(TAP)に割り当てることでOpenVPNクライアントは接続先ネットワークに参加できる。
特徴は以下の通り。
- ブロードキャストが届く
- 小規模ネットワーク/個人向き
13.5.2. 必要となるファイルの作成
OpenVPNで必要となる各ファイルは用意されたスクリプトで作成する。
パラメータの準備
サーバ証明書やCA証明書の作成にはいくつかパラメータを指定する必要がある。
何度も入力するのは手間なので/etc/openvpn/varsを編集してパラメータを書き換える。
export KEY_cOUNTRY = "JP"
export KEY_PROVINCE = "TOKYO"
:
:設定したファイルを読み込み不要なファイルは削除する。
cd /etc/openvpn
source vars
./clean-allCA証明書/CA秘密鍵の作成
認証用のCA証明書とCA秘密鍵を作成する。
./build-ca上記コマンドでCA証明書ファイルca.crtとCA秘密鍵ファイルca.keyが作成される。
これらのファイルは/etc/openvpn/keysに配置する。
またCA証明書ca.crtはOpenVPNサーバ/クライアントの/etc/opnvpn/keysにも配置する。
サーバ証明書/サーバ秘密鍵の作成
OpenVPNサーバ用のサーバ証明書と秘密鍵を作成する。
./build-key-server server引数にはホスト名orファイル名を指定する。
上記例の場合はサーバ証明書のserver.crtとサーバ秘密鍵のserver.keyが生成される。
これらのファイルはOpenVPNサーバの/etc/openvpn/keysに配置する。
DHパラメータの作成
DHは鍵交換を安全に行うためのものでDHパラメータと呼ばれる。
./build-dhこれによりdh1024.pemまたはdh2048.pemが生成される。
これらのファイルはOpenVPNサーバの/etc/openvpn/keysに配置する。
クライアント証明書/クライアント秘密鍵の作成
OpenVPNクライアント用のクライアント証明書とクライアント秘密鍵を作成する。
./build-client client引数にはホスト名orファイル名を指定する。なおクライアントが複数いる場合は引数を変更して作成する。
上記例の場合はサーバ証明書のclient.crtとサーバ秘密鍵のclient.keyが生成される。
これらのファイルは安全にOpenVPNクライアントの/etc/openvpn/keysに配置する。
ブリッジ接続を行う場合の起動スクリプトの設定
はじめにブリッジ接続のためのopenvpn-startupとopenvpn-shutdownを編集する。
次に/usr/share/doc/openvpn-2.3.1.4/sample/sample-scripts以下ににあるbridge-start、bridge-stopをコピーしておく。
# /etc/openvpn/openvpn-startup
#!/bin/bash
/etc/openvpn/bridge-start
route add -net default gw 192.168.1.1
iptables -I FORWARD -i br0 -j ACCEPT# /etc/openvpn/bridge-stop
#!/bin/bash
/etc/openvpn/bridge-stop13.5.3. ブリッジ接続をする場合のOpenVPNサーバの設定
OpemVPMサーバの設定ファイルは/etc/openvpn/server.confとなり、SampleファイルはCentOS7系では/usr/share/open-vpn/sample/sample-config-files以下にある。
# ポート番号とプロトコル
port 1194
proto udp
# ルーティング接続なら「tun」、ブリッジ接続なら「tap0」
dev tap0
# 認証局証明書のファイル(絶対パス/設定ファイル起点の相対パス)
ca keys/ca.crt
# サーバの証明書ファイル
cert keys/server.crt
# サーバーの秘密鍵ファイル
key keys/server.key
# DHパラメータのファイル名
dh keys/dh2048.pem
# OpenVPNクライアントへ渡す情報
push " route 192.168.1.1 255.255.255.0"
# 実行ユーザ/グループ
user nobody
group nobody
# 接続中クライアントリスト出力ファイル
status /var/log/openvpn-status.log
# ログ出力するファイル(ない場合はsyslog)
log /var/log/openvpn.logOpenVPNはUDPのポート1194を使用するのでOpenVPNサーバ側のネットワークでルータやファイヤーウォールで1194ポートを許可する設定が必要となる。
またIPパケットのフォワーディング設定も有効にする必要がある。
echo 1 > /proc/sys/net/ipv4/ip_forwardOpenVPNサービスの起動は以下の通り。
systemctl start openvpn-bridge13.5.4. OpenVPNクライアントの設定
設定ファイルの主要内容は以下の通り。
# プロトコル
proto udp
# ルーティング接続なら「tun」、ブリッジ接続なら「tap0」
dev tap0
# Clientの指定
client
# 接続先サーバとポート番号
remote 112.56.23.112 1194
# 認証局証明書のファイル(絶対パス/設定ファイル起点の相対パス)
ca keys/ca.crt
# クライアントの証明書ファイル
cert keys/client.crt
# クライアントの秘密鍵ファイル
key keys/client.keyOpenVPNクライアントの起動例は以下の通り。
/usr/sbin/opnevpn /etc/openvpn/client.conf