// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。

#contents

最近はルータなどにもVPN機能がついているヤツがあって、外部からセキュアにアクセス可能!なんてのをちょくちょく見かけます。うちも外部から自宅のNASにアクセスできたら便利だなーと思って、うちのFedoraにVPNを入れてみました。OpenVPNなんで、正確にはSSL-VPNですね。


構成:
 サーバ側のネットワーク: 192.168.0.0/24
 VPNサーバ(兼、ブリッジ機能、CA認証局): 192.168.0.3
 VPNクライアントのIP範囲 192.168.0.150〜160
として話を進めます。



**ライブラリのインストール [#j78d83d6]
openvpn,sysfsutils,bridge-utils,lzo をyumでインストールします。

 [root@www etc]# yum install openvpn
  Package                 Arch       Version          Repository        Size
  openvpn                 i386       2.1-0.19.rc4.fc7  fedora            356 k
 [root@www ~]# yum install sysfsutils
  sysfsutils              i386       2.1.0-1.fc7      fedora             39 k
 [root@www ~]# yum install bridge-utils
  bridge-utils            i386       1.1-2            fedora             28 k
 [root@www ~]# yum install lzo
  lzo                     i386       2.02-2.fc6       fedora             63 k
 [root@www ~]#

**設定の追加 [#yd1a66aa]
 [root@www ~]# cp -pfr /usr/share/doc/openvpn-2.1/sample-scripts/openvpn.init /etc/openvpn/
 [root@www ~]# cp -pfr /usr/share/doc/openvpn-2.1/sample-scripts/bridge-start /etc/openvpn/
 [root@www ~]# cp -pfr /usr/share/doc/openvpn-2.1/sample-scripts/bridge-stop  /etc/openvpn/
 [root@www ~]# chmod 755 /etc/openvpn/*

***server.confの修正 [#xf194872]
 [root@www ~]# vi /etc/openvpn/server.conf

内容は以下の通り
 # 通信に使用するプロトコル及びポート番号の指定
 port 5000
 proto udp
 
 # 使用する仮想ネットワークデバイスの指定
 dev tap0
 
 # CA証明書、サーバ証明書、サーバ秘密鍵、DH鍵のパス指定
 # ※パス指定は、絶対パスまたはserver.confの設置ディレクトリからの相対パスでの指定
 ca   /etc/openvpn/easy-rsa/2.0/keys/ca.crt
 cert /etc/openvpn/easy-rsa/2.0/keys/server.crt
 key  /etc/openvpn/easy-rsa/2.0/keys/server.key
 dh   /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem
 
 # OpenVPNサーバをブリッジモードで起動させるための設定
 # 書式:server-bridge [OpenVPNサーバのアドレス] [ネットマスク] [クライアントに割り振るアドレス範囲]
 server-bridge 192.168.0.3 255.255.255.0 192.168.0.150 192.168.0.160
 
 # クライアントにサーバ側ネットワークへの経路を伝えるための設定
 # 書式:push “route [OpenVPNサーバ側のネットワークアドレス] [ネットマスク]”
 push "route 192.168.0.0 255.255.255.0"
 
 # クライアント同士の通信を可能にするための設定
 client-to-client
 
 # VPN接続間の生存確認のための設定
 keepalive 10 120
 
 # パケット転送の際にLZO圧縮を有効にする
 comp-lzo
 
 # OpenVPNデーモン起動ユーザ・グループの指定 ※Windowsシステム以外設定可能
 user nobody
 group nobody
 
 # VPNが落ちた場合の再接続設定
 persist-key
 persist-tun
 
 # ステータスログのパス指定
 status /var/log/openvpn-status.log
 
 # ログのパス指定
 log /var/log/openvpn.log
 log-append /var/log/openvpn.log
 
 # ログの詳細レベルの指定
 verb 3
 
 # OpenVPN管理インターフェイスの起動設定
 management localhost 7505


***bridge-startの修正 [#jc3876f2]
 [root@www ~]# vi /etc/openvpn/bridge-start
 
 [root@www usr]# diff /usr/share/doc/openvpn-2.1/sample-scripts/bridge-start /etc/openvpn/bridge-start 
 18c18
 < eth_ip="192.168.8.4"
 ---
 > eth_ip="192.168.0.3"
 20c20
 < eth_broadcast="192.168.8.255"
 ---
 > eth_broadcast="192.168.0.255"
 [root@www usr]# 


***IPフォワードの設定 [#xebdb4b6]
 [root@www ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
 [root@www ~]# vi /etc/sysctl.conf
 net.ipv4.ip_forward = 1 <-ココを1にします

***ネットワークの起動時に、bridgeの有効化、OpenVPNサーバの起動 [#e5631590]
 /etc/openvpn/bridge-start
 /etc/openvpn/openvpn.init start
という記述を、/etc/init.d/network の
 touch /var/lock/subsys/network
の直後に追記します。

***ネットワークの停止時に、、OpenVPNサーバの停止、bridgeの無効化 [#je767685]
 /etc/openvpn/openvpn.init stop
 /etc/openvpn/bridge-stop
という記述を、/etc/init.d/network の stopステートメントの先頭に追記します。


**証明書と秘密鍵の配置。。 [#k024d0f8]
***変数の定義 [#o4ebaf31]
次にSSL通信のServer・Clientの証明書、署名のためのCAの証明書などを作成します。作成はOpenVPN付属のツールで行います。
 [root@www openvpn]# cp -pfr /usr/share/openvpn/easy-rsa /etc/openvpn/
 [root@www openvpn]# cd /etc/openvpn/easy-rsa/2.0/
 [root@www 2.0]# mkdir keys
 
 [root@www 2.0]# view vars
以下の箇所を編集します。
 export KEY_COUNTRY="JP"
 export KEY_PROVINCE="Tokyo"
 export KEY_CITY="Bunkyo"
 export KEY_ORG="Masatom in"
 export KEY_EMAIL="hogehoge@hogehoge.com"

 [root@www 2.0]# source vars
 [root@www 2.0]# echo $KEY_DIR
 /etc/openvpn/easy-rsa/2.0/keys <-変数が定義された

***CAの証明書と秘密鍵の作成。 [#la1468dd]
まずはCAの証明書、秘密鍵を作成します。
 [root@www 2.0]# ./build-ca
 Generating a 1024 bit RSA private key
 .++++++
 ...++++++
 writing new private key to 'ca.key'
 -----
 You are about to be asked to enter information that will be incorporated
 into your certificate request.
 What you are about to enter is what is called a Distinguished Name or a DN.
 There are quite a few fields but you can leave some blank
 For some fields there will be a default value,
 If you enter '.', the field will be left blank.
 -----
 Country Name (2 letter code) [JP]:
 State or Province Name (full name) [Tokyo]:
 Locality Name (eg, city) [Bunkyo]:
 Organization Name (eg, company) [Masatom in]:
 Organizational Unit Name (eg, section) []:
 Common Name (eg, your name or your server's hostname) [Masatom in CA]:
 Email Address [hogehoge@hogehoge.com]:
 [root@www 2.0]# 
 [root@www 2.0]# ls -lrt keys/
 合計 8
 -rw------- 1 root root  887 2008-06-24 01:19 ca.key
 -rw-r--r-- 1 root root 1245 2008-06-24 01:19 ca.crt
 [root@www 2.0]#
以上で、CA局の証明書と秘密鍵ができました。

***サーバの証明書・秘密鍵の作成 [#d83cc9a5]
次に、サーバの証明書、秘密鍵の作成です。
 [root@www 2.0]# ./build-key-server server
 [root@www 2.0]# ls -lrt keys/
 合計 16
 -rw------- 1 root root  887 2008-06-24 01:19 ca.key
 -rw-r--r-- 1 root root 1245 2008-06-24 01:19 ca.crt
 -rw-r--r-- 1 root root  891 2008-06-24 01:21 server.key
 -rw-r--r-- 1 root root  676 2008-06-24 01:21 server.csr
 [root@www 2.0]#

参考にさせていただいている[[サイト>http://www.stackasterisk.jp/tech/systemConstruction/openVpn01_05.jsp]]の説明では、この時点で証明書(*.crt)ができると書いてあるのですが、どうもエラーが出てるのか、証明書要求(*.csr)しかできないようです。

仕方がないので、手動で先のCAの秘密鍵で署名を行います。署名の方法については[[CA局としてCSRに署名する>Network/SSL/CA局としてCSRに署名する#f1d7fd39]]を参照してください。

署名によって、
 [root@www 2.0]# ls -lrt keys
 合計 36
 -rw------- 1 root root  887 2008-06-24 01:19 ca.key
 -rw-r--r-- 1 root root 1245 2008-06-24 01:19 ca.crt
 -rw-r--r-- 1 root root  891 2008-06-24 01:26 server.key
 -rw-r--r-- 1 root root  676 2008-06-24 01:26 server.csr
 -rw-r--r-- 1 root root 2621 2008-06-24 01:33 server.crt <-署名付き証明書
 -rw-r--r-- 1 root root    3 2008-06-24 01:33 ca.db.serial
 -rw-r--r-- 1 root root   21 2008-06-24 01:33 ca.db.index.attr
 -rw-r--r-- 1 root root  109 2008-06-24 01:33 ca.db.index
 drwxr-xr-x 2 root root 4096 2008-06-24 01:33 ca.db.certs
 [root@www 2.0]#
署名付き証明書ができました。

''2008/06/25追記。[[flyman のおもちゃ箱 - PhotoLog : OpenVPN by flyman>http://www.kestrel.jp/modules/wordpress/index.php?p=51]]にもありますとおり、source ./vars して ./clean-all してから、CAの作成からやり直すとうまくいくようです。確かにうまくいきました((clean-allしたら中にindex.txtとかができるみたいですが、それがないと署名時にエラーになるようです))。''


***Diffie Hellmanのパラメタ作成 [#afa2a3ac]
 [root@www 2.0]# ./build-dh
 [root@www 2.0]# ls -lrt keys
 合計 40
 ......
 -rw-r--r-- 1 root root  245 2008-06-24 01:35 dh1024.pem
 [root@www 2.0]#
以上

***クライアントの証明書・秘密鍵の作成 [#d8032c0a]
 [root@www 2.0]# ./build-key-pass client1
 Generating a 1024 bit RSA private key
 ....................................................++++++
 ........................++++++
 writing new private key to 'client1.key'
 Enter PEM pass phrase:     <-クライアントで鍵を活性化するためのパスワード
 Verifying - Enter PEM pass phrase:

 [root@www 2.0]# ls -lrt keys
 合計 48
 .....
 -rw-r--r-- 1 root root  963 2008-06-24 01:37 client1.key
 -rw-r--r-- 1 root root  676 2008-06-24 01:37 client1.csr
 [root@www 2.0]#

これも証明書要求しかないので、CAの鍵で署名します。
 [root@www 2.0]# cd keys
 [root@www keys]#  /tmp/mod_ssl-2.8.30-1.3.39/pkg.contrib/sign.sh  client1.csr
 [root@www keys]# cd ..
 [root@www 2.0]# ls -lrt keys
 合計 56
 -rw-r--r-- 1 root root  963 2008-06-24 01:37 client1.key
 -rw-r--r-- 1 root root  676 2008-06-24 01:37 client1.csr
 -rw-r--r-- 1 root root 2626 2008-06-24 01:39 client1.crt <-署名付き証明書
 [root@www 2.0]#

以上でサーバの環境設定は完了です。
 client1.key
 client1.crt
 ca.crt
はクライアント側に配置する必要があるので、特にclient1.keyに関しては安全な経路でクライアントに配布するようにしてください。

また、余計なファイルはセキュリティ上問題なので、削除しておきます。
 [root@www 2.0]# cd keys
 [root@www keys]# rm *.csr
 [root@www keys]# rm client1.*
サーバ上には
 [root@www keys]# ls -lrt
 合計 52
 -rw------- 1 root root  887 2008-06-25 16:29 ca.key
 -rw-r--r-- 1 root root 1245 2008-06-25 16:29 ca.crt
 -rw------- 1 root root  887 2008-06-25 16:29 server.key
 -rw-r--r-- 1 root root 3908 2008-06-25 16:29 server.crt
 -rw-r--r-- 1 root root  245 2008-06-25 16:30 dh1024.pem
 -rw-r--r-- 1 root root 3786 2008-06-25 16:30 02.pem
これらくらいになりました。最終的な正しい構成は[[OpenVPN 2.0 HOWTO Japanese Translation>http://freescitech.net/2/ovpn2_howto_ja.html#pki]]の「鍵ファイル」という項に詳しく記載されています。

''ココは本当は、クライアントで証明書要求(*.csr)を作成し、サーバに送信し、署名してもらった証明書(*.crt)を受信するが、正しいです。本来秘密鍵はクライアント側で作成するのがセキュアです。''

**クライアントの設定 [#tc9098fb]
[[OpenVPNで構築するリモートアクセス環境>http://www.stackasterisk.jp/tech/systemConstruction/openVpn01_04.jsp#6]] に従って、クライアント環境をセットアップします。





**関連リンク [#p39968ed]
-[[OpenVPNで構築するリモートアクセス環境>http://www.stackasterisk.jp/tech/systemConstruction/openVpn01_01.jsp]]


----
この記事は
#vote(おもしろかった[15],そうでもない[1])
- CentOSには標準のyumのリポジトリではOpenVPNが提供されてないようで、[[RPMforgeリポジトリ導入(RPMforge) - CentOSで自宅サーバー構築>http://centossrv.com/rpmforge.shtml]] で新たなリポジトリを追加しないとダメなようですね。 -- [[きの]] &new{2008-10-21 (火) 11:38:20};
- 環境によっては、 /etc/openvpn/easy-rsa/2.0/  内のchmod 755 が必要かもしれない。 -- [[きの]] &new{2008-10-21 (火) 12:47:34};


#comment
#topicpath


SIZE(10){現在のアクセス:&counter;}

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS