« VHDファイルをマウントする | Main | OpenVPNの転送速度 »

2011.08.16

OpenVPNをインストールしてみる

参考:
1)OPEN VPNの構築
2)ServersMan@VPSにてOpenVPNを用いたVPN環境の作成

【/dev/net/tun の存在チェック】

# ls /dev/net/tun

問題なく存在するようなので、作成処理は省略。ちなみに、存在しなかった場合、以下のような感じで作成します(/dev/netが存在する場合、1行目は不要)。
# mkdir /dev/net
# mknod --mode 600 /dev/net/tun c 10 200

【RPMForgeのインストール】

# yum install yum-priorities

/etc/yum/pluginconf.d/priorities.conf の内容が以下のようになっているかどうかを確認。
[main]
enabled = 1

/etc/yum.repos.d/CentOS-Base.repo を編集し、 priority=1の行をそれぞれのところに追加。

RPMForgeのインストール

# rpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpm

/etc/yum.repos.d/rpmforge.repo の、以下の部分を編集。

enabled = 0
priority=10

【OpenVPNのインストール】
RPMForgeを有効にして依存パッケージも含めてインストール。

# yum --enablerepo=rpmforge install openvpn

【CA証明書/秘密鍵の作成】

# cp -r /usr/share/doc/openvpn-2.2.0/easy-rsa/2.0/ /etc/openvpn/easy-rsa
# cd /etc/openvpn/easy-rsa/
# chmod +x *

vars ファイルの以下の部分を編集。
export KEY_COUNTRY="JP"
export KEY_PROVINCE="PrivateVPN"
export KEY_CITY="Osaka"
export KEY_ORG="my.domain"
export KEY_EMAIL="my@mail.address"

CAを作成し、所定のフォルダにファイルをコピー。なお、build-ca実行時の入力プロンプトはすべてデフォルト値を使用(enterのみ)。

# source vars
# ./clean-all
# ./build-ca
# cp keys/ca.crt /etc/openvpn/

【サーバ証明書/秘密鍵の作成】

# ./build-key-server server

入力値は、すべてデフォルト値のまま(あるいは、[y]を入力して)enter。実行後、ファイルを所定のフォルダにコピー。
# cp keys/server.crt /etc/openvpn/
# cp keys/server.key /etc/openvpn/

【DH(Diffie Hellman)パラメータ作成】
これも、実行後、ファイルを所定のフォルダにコピー。

# ./build-dh
# cp keys/dh1024.pem /etc/openvpn/

【証明書廃止リストの作成】
一人だけで使う場合は必要ないともいえますが、練習がてら(?)作成します。入力値はすべてデフォルトのまま(あるいは[y]を入力して)enter。

# ./build-key dmy

openssl.cnf を編集し、以下の部分をすべてコメントアウト(編集箇所は、ファイルの最後の部分に固まっています)。
#[ pkcs11_section ]
#engine_id = pkcs11
#dynamic_path = /usr/lib/engines/engine_pkcs11.so
#MODULE_PATH = $ENV::PKCS11_MODULE_PATH
#PIN = $ENV::PKCS11_PIN
#init = 0

廃止処理を行い、結果のファイルを所定のフォルダにコピー。
# ./revoke-full dmy
# cp keys/crl.pem /etc/openvpn/

【TLS認証鍵の作成】

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

【OpenVPNサーバー設定】
設定ファイルのサンプルをコピーして、それを編集する。

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

編集箇所は、ざっくりと以下のような感じ(一部追加行アリ)。ポート番号をあえてデフォルト以外のものにするという手もアリかと。
port 1194
tls-auth ta.key
user nobody
group nobody
log-append /var/log/openvpn.log
management localhost 7505
crl-verify crl.pem

【iptables設定変更用スクリプト作成】

# touch /etc/openvpn/openvpn-startup
# less /etc/openvpn/openvpn-startup
# chmod +x /etc/openvpn/openvpn-startup

スクリプトの内容は以下のような感じ。なお、今回は、forwardの設定はしていません。
#!/bin/bash
/etc/openvpn/openvpn-shutdown
iptables -I OUTPUT -o tun+ -j ACCEPT
iptables -I FORWARD -o tun+ -j ACCEPT
iptables -I INPUT -i tun+ -j ACCEPT

OpenVPNをシャットダウンする際に使用するスクリプトも併せて作成。

# touch /etc/openvpn/openvpn-shutdown
# less /etc/openvpn/openvpn-shutdown
# chmod +x /etc/openvpn/openvpn-shutdown

スクリプトの内容は以下のような感じ。
#!/bin/bash

# VPNインタフェース(tun+)用iptablesルール削除関数
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
}

# VPNインタフェース(tun+)用iptables受信ルール削除
target='INPUT'
delete

# VPNインタフェース(tun+)用iptables転送ルール削除
target='FORWARD'
delete

# VPNインタフェース(tun+)用iptables送信ルール削除
target='OUTPUT'
delete

なお、今回はパケット転送を有効とする必要がないので、openvpnの起動スクリプトはそのまま(echo 1 > /proc/sys/net/ipv4/ip_forward の処理は記述しない)。

【ログローテートの設定】

# touch /etc/logrotate.d/openvpn
# less /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
}

【iptablesの設定】
/etc/sysconfig/iptables ファイルを編集してOpenVPN宛てのパケットを通すようにする(追記内容は以下の通り)。

-A MYCHAIN -p udp --dport 1194 -j ACCEPT

追記が完了したら、iptablesを再起動。

# /etc/init.d/iptables restart

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

# cd /etc/openvpn/easy-rsa/
# source vars
# ./build-key-pass username

パスワード以外は初期値のまま(あるいは [y]を入力して)enter。

【OpenVPN起動】
# /etc/init.d/openvpn start

【クライアント設定】
今回は、Windowsから接続したいので・・・。
OpenVPN Downloadsのページから、Windows Installerをダウンロード(今回は openvpn-2.2.1-install.exe )。デフォルト状態のまま、インストールを実行。サーバーの以下のファイルをscpなどで取得し、C:\Program Files\OpenVPN\config フォルダにコピー。

/etc/openvpn/ca.crt
/etc/openvpn/easy-rsa/keys/username.crt
/etc/openvpn/easy-rsa/keys/username.key
/etc/openvpn/ta.key

C:\Program Files\OpenVPN\sample-config\client.ovpn ファイルを C:\Program Files\OpenVPN\config にコピーし、以下の箇所を編集。

emote my.domain 1194
cert username.crt
key username.key
ns-cert-type server
tls-auth ta.key 1

【接続確認】
VPNクライアントを起動してパスワードを入力。エラーが出ず、10.8.0.0/24 のIPアドレスを取得することができれば、接続は確立できたことになります。サーバー上でApacheが起動している場合、http://10.8.0.1/ のような感じでアクセスできるようになります。

|

« VHDファイルをマウントする | Main | OpenVPNの転送速度 »

Linux」カテゴリの記事

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/3959/52488550

Listed below are links to weblogs that reference OpenVPNをインストールしてみる:

« VHDファイルをマウントする | Main | OpenVPNの転送速度 »