Posted at

ConohaにOpenVPNをインストール

More than 3 years have passed since last update.

個人開発環境を構築するためにOpenVPNをインストールしてみた。


1. 環境


  • OS: CentOS6.6(64bit)

  • OpenVPN: 2.3.4


2. OpenVPNインストール手順


インストールに必要なモジュールをインストール

yum -y install openssl-devel lzo-devel pam-devel rpm-build


ダウンロード

wget http://swupdate.openvpn.org/community/releases/openvpn-2.3.4.tar.gz


rpmパッケージを生成

rpmbuild -tb --clean openvpn-2.3.4.tar.gz


インストール

yum -y localinstall ~/rpmbuild/RPMS/x86_64/openvpn-2.3.4-1.x86_64.rpm


3. CA証明書、秘密鍵を生成


ツールダウンロード

wget https://github.com/OpenVPN/easy-rsa/archive/master.zip


解凍

unzip master.zip


OpenVPNディレクトリへコピー

cp -r easy-rsa-master/easyrsa3/ /etc/openvpn/


コピー先へ移動

cd /etc/openvpn/easyrsa3/


初期化

./easyrsa init-pki


CA証明書作成

./easyrsa build-ca

パスフレーズの入力を求めらるので任意の文字列を入力(2回入力を求められます。)


この後サーバー証明書を作成する際に必要になるので控えておきましょう。

Enter PEM pass phrase:

Verifying - Enter PEM pass phrase:

Common Name入力(任意入力)

Common Name (eg: your user, host, or server name) [Easy-RSA CA]:


サーバー証明書作成

./easyrsa build-server-full server nopass

CA証明書のパスフレーズを入力

Enter pass phrase for /etc/openvpn/easyrsa3/pki/private/ca.key:


DHパラメータ作成

./easyrsa gen-dh


TLS認証鍵作成

openvpn --genkey --secret /etc/openvpn/ta.key


作成した証明書たちをOpenVPNディレクトリへコピー

cp pki/ca.crt /etc/openvpn/

cp pki/issued/server.crt /etc/openvpn/
cp pki/private/server.key /etc/openvpn/
cp pki/dh.pem /etc/openvpn/


4. OpenVPN設定


OpenVPN設定ファイルのサンプルをコピー

cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn/


設定ファイルの編集

vi /etc/openvpn/server.conf


今回書き換えた箇所

#デフォルトだとdh1028.pemになっているので今回作成したファイル名に合わせる

dh dh.pem
#VPNクライアント割当てアドレス範囲として10.8.0.0/24を指定(デフォルト)
server 10.8.0.0 255.255.255.0
#追加(LAN(例:192.168.1.0/24)へのルートをVPNサーバー経由にする)
push "route 192.168.1.0 255.255.255.0"
#「;」を削除してコメント解除
tls-auth ta.key 0
user nobody
group nobody
log-append /var/log/openvpn.log


VPNインタフェース用ファイアウォール自動設定

vi /etc/openvpn/openvpn-startup

#!/bin/bash

/etc/openvpn/openvpn-shutdown
#VPNサーバーからの送信を許可
iptables -I OUTPUT -o tun+ -j ACCEPT
iptables -I FORWARD -o tun+ -j ACCEPT

#VPNクライアントからVPNサーバーへのアクセスを許可
iptables -I INPUT -i tun+ -j ACCEPT

#VPNクライアントからサーバー側LAN内へのアクセスを許可
iptables -I FORWARD -i tun+ -d 192.168.1.0/24 -j ACCEPT


VPNインタフェース用ファイアウォール自動設定解除

vi /etc/openvpn/openvpn-shutdown

#!/bin/bash
delete() {
rule_number=`iptables -L $target --line-numbers -n -v|grep tun.|awk '{print $1}'|sort -r`
for num in $rule_number
do
iptables -D $target $num
done
}
target='INPUT'
delete
target='FORWARD'
delete
target='OUTPUT'
delete


作成した2つのスクリプトに実行権限を付与

chmod +x /etc/openvpn/openvpn-startup

chmod +x /etc/openvpn/openvpn-shutdown


OpenVPNログローテーション設定

vi /etc/logrotate.d/openvpn

/var/log/openvpn.log {
missingok
notifempty
sharedscripts
postrotate
/etc/rc.d/init.d/openvpn restart 2>&1 > /dev/null || true
endscript
}


5. iptable追加

iptables -A INPUT -p udp --dport 1194 -j ACCEPT

iptables -A INPUT -p udp --dport 3389 -j ACCEPT


iptable設定を保存

sudo /etc/rc.d/init.d/iptables save


5. 起動

設定まで完了したらOpenVPNを起動します。

/etc/init.d/openvpn start

再起動時に自動で起動するように以下のコマンドを実行

chkconfig openvpn on


6. その他

用途にもよりますが、自分の場合は外部から直接アクセスさせないクローズド環境を構築するためにOpenVPNをインストールしたので、 もし外部からのアクセスを拒否したい場合にはこちらの記事もどうぞ。 特定のIPからのみSSH接続を許可