// 下階層用テンプレート #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(おもしろかった[21],そうでもない[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;}