1: 2010-03-07 (Sun) 23:36:48 maruo source Cur: 2010-07-05 (Mon) 00:13:21 maruo source
Line 2: Line 2:
[[OpenVPN:http://www.openvpn.jp/]]は、インターネットやLAN上に仮想的なプライベートネットワーク(VPN)を構築するためのソフトウェアです。 [[OpenVPN:http://www.openvpn.jp/]]は、インターネットやLAN上に仮想的なプライベートネットワーク(VPN)を構築するためのソフトウェアです。
VPNを構築することにより、インターネット上であってもデータを安全にやり取りしたり、社外から社内のサーバーにアクセスできるようにすることもできます。オープンソースで、SSL/TLSをベースにした認証機構及び通信路暗号化を用いることで、セキュアに通信路を構築することが可能です。ん~、便利。 VPNを構築することにより、インターネット上であってもデータを安全にやり取りしたり、社外から社内のサーバーにアクセスできるようにすることもできます。オープンソースで、SSL/TLSをベースにした認証機構及び通信路暗号化を用いることで、セキュアに通信路を構築することが可能です。ん~、便利。
-ちなみに、OpenVPNでは、SSL/TLSトンネルをサーバ/クライアント間で接続して通信します。トンネルについての解説は、[[こちら>自宅鯖計画/トンネル接続って何だべ?]]を見てくださいね♪+ちなみに、OpenVPNでは、SSL/TLSトンネルをサーバ/クライアント間で接続して通信します。トンネルについての解説は、[[トンネル接続って何だべ?の記事>自宅鯖計画/トンネル接続って何だべ?]]を見てくださいね♪ 
 + 
 +*OpenVPNをインストールしてみよう [#rbce4c45] 
 +**サーバ側 [#yc5d946a] 
 +サーバ側には24時間稼働している、Linuxサーバ君にインストールします。 
 + # emerge -vuD openvpn 
 +おしまい。 
 +**クライアント側 [#v7b79b03] 
 +クライアントにLinuxを使用する場合は、サーバと一緒。今回は、Windowsを使用するので、[[OpenVPN GUI for Windows 日本語版:http://www.openvpn.jp/bridging/5.html]]を使用します。インストール手順は[[こちら:http://www.openvpn.jp/guiuse.html]]でね。 
 +*暗号鍵を作成 [#y9606253] 
 +OpenVPNインストール時、大体/usr/share/openvpn等のどこかに、easy-rsaというフォルダがあります。この中に、暗号鍵作成ツールが入っております。そのフォルダ内で、ツールを実行! 
 +**CA局を作成 [#naf18717] 
 + # source ./vars 
 + # clean-all 
 + # 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) [KG]: 
 + State or Province Name (full name) [NA]: 
 + Locality Name (eg, city) [BISHKEK]: 
 + Organization Name (eg, company) [OpenVPN-TEST]: 
 + Organizational Unit Name (eg, section) []: 
 + Common Name (eg, your name or your server's hostname) []:OpenVPN-CA 
 + Email Address [me@myhost.mydomain]: 
 +なんでも、好きなもの、識別できるものを入れておくとよいでしょう~ 
 +**サーバ暗号鍵の作成 [#t6a2d753] 
 +続いて、サーバ暗号鍵を作成します。 
 + # build-key-server server 
 +CA局と同じように聞かれていきますが、識別可能な奴を入れていってくださいね。んで、「Sign the certificate?(証明書に署名しますか?) [y/n]」と「1 out of 1 certificate requests certified, commit?(1つの証明書要求がありますが、コミットしますか?) [y/n]」という2つの質問が出ますが、両方にYesと答えてやって。 
 +**クライアント暗号鍵の作成 [#vd6c624e] 
 +クライアント鍵の作成は、 
 + # build-key クライアント名 
 +暗号鍵をパスワード保護したい場合は、 
 + # build-key-pass クライアント名 
 +同じようにいろいろ聞かれますが、同じように識別可能な奴を入れていってやって…で、これは接続したいクライアント数分、クライアント名を変更してコマンドを実施します。 
 +**Diffie hellmanパラメータ作成 [#g9b2984e] 
 + # build-dh 
 +少々お待ちくださいね… 
 +**TLSのHMAC認証用共有鍵作成 [#h77443fa] 
 +別に作成しなくてもよいのですが、後で述べる[[暗号強度を強める設定>Gentoo Linuxな生活/OpenVPNで悩む#r6a3b622]]を行う場合は、共有鍵を作成します。 
 + openvpn --genkey --secret ta.key 
 + 
 +**鍵をコピー [#q123c922] 
 +そうすると、keysサブディレクトリ配下に、以下があるはず。 
 + ca.crt 
 + ca.key 
 + dh1024.pem 
 + クライアント名.crt 
 + クライアント名.csr 
 + クライアント名.key 
 + server.crt 
 + server.csr 
 + server.key 
 + ta.key 
 +で、これらのうち、ca.crt(CA証明書),クライアント名.crt,クライアント名.csr(クライアント証明書),クライアント名.key(クライアント秘密鍵),ta.key(HMAC認証用共有鍵)をコピーして、Windows側に持ってってあげます。くれぐれも、漏えいしたりしないように気をつけつつ… 
 +*OpenVPNを設定してみよう(共通設定) [#tffcb460] 
 +OpenVPNは、TUN/TAPの2種類の設定モードがありますが、まずは共通で設定できるものからね。 
 +**サーバ側 [#aa7ab458] 
 +/usr/share/doc/openvpn-XXX/examples/sample-config-files/ディレクトリに、設定ファイルのサンプルがあります。こちらを利用しましょう。 
 +サーバ側ですので、この下にあるserver.conf.bz2を、/etc/openvpn配下に、openvpn.confという名称で、解凍&コピーします。この中で、特に必要な項目を… 
 +:port|openvpnで通信するポートを指定します(クライアント側と合わせる) 
 +:proto|tcpか、udpかを指定します。(クライアント側と合わせる) 
 +:ca|[[ここの暗号鍵作成>Gentoo Linuxな生活/OpenVPNで悩む#y9606253]]で作成する、ca.crtを指定します。フルパスで書くのが安心。 
 +:cert|[[ここの暗号鍵作成>Gentoo Linuxな生活/OpenVPNで悩む#y9606253]]で作成する、server.crtを指定します。フルパスで書くのが安心。 
 +:key|[[ここの暗号鍵作成>Gentoo Linuxな生活/OpenVPNで悩む#y9606253]]で作成する、server.keyを設定します。フルパスで書くのが安心。 
 +:dh|[[ここの暗号鍵作成>Gentoo Linuxな生活/OpenVPNで悩む#y9606253]]で作成する、dh1024.pemを設定します。 
 + 
 +:push|接続してきたクライアントに自動設定するパラメータを指定する。例えばルーティングテーブル。接続してできたデバイスに対して、通信先NWのルーティング(上の例なら172.21.0.0/16向けのルーティング)を設定するとか、クライアントに参照させたいDNSサーバのアドレスとか。 
 + 
 +**クライアント側 [#l2cb0b98] 
 +Windowsだと、c:\Program Files(64ビット版の場合は、c:\Program Files (x86))\OpenVPN\sample-configに、サンプル設定ファイルがあります。この中のclient.ovpnをコピーして、c:\Program Files(64ビット版の場合は、c:\Program Files (x86))\OpenVPN\configに置きます。そしてこのファイルを編集しますが…注意!Windows7や、Windows Vistaは、管理者モードでないと変更セーブされませんので…気をつけてね。私は、個人のフォルダにコピーして、変更してからconfigフォルダに管理者モードでコピーしました。 
 +:proto|tcpか、udpかを指定します。(サーバ側と合わせる) 
 +:remote|接続先のサーバ名と、ポート(サーバ側のport項で指定した値)を指定する。 
 +:ca|[[ここの暗号鍵作成>Gentoo Linuxな生活/OpenVPNで悩む#y9606253]]で作成する、ca.crtを指定します。フルパスで書くのが安心。Windowsは、ファイルパスに\を使用しますが、OpenVPNは、\の指定は\\ですので、注意。 
 +:cert|[[ここの暗号鍵作成>Gentoo Linuxな生活/OpenVPNで悩む#y9606253]]で作成する、クライアント名.crtを指定します。フルパスで書くのが安心。Windowsは、ファイルパスに\を使用しますが、OpenVPNは、\の指定は\\ですので、注意。 
 +:key|[[ここの暗号鍵作成>Gentoo Linuxな生活/OpenVPNで悩む#y9606253]]で作成する、クライアント名.keyを設定します。フルパスで書くのが安心。 
 +Windowsは、ファイルパスに\を使用しますが、OpenVPNは、\の指定は\\ですので、注意。 
 +**ブロードバンドルータ側の設定 [#ef9f4faa] 
 +普通は、ブロードバンドルータで、ポートを閉じていると思います。ブロードバンドルータ側で、openvpnを受け付けているプロトコル、ポートを、openvpnサーバ側に向けてあげる変換テーブルを設定してあげましょう。 
 +**Linuxサーバの設定 [#j3c08a4b] 
 +***Sysctl [#bc5bca59] 
 +Sysctlの、ip_forwardをONにします。 
 + # echo "1" > /proc/sys/net/ipv4/ip_forward 
 + 
 +*OpenVPNを設定してみよう(TUNモード) [#gcb1e883] 
 +#ref(TUN.jpg,around,right) 
 +TUNモードは、ルーティングモードです。VPNのネットワークは、通信する先のネットワークとは別のサブネットマスクになります。OpenVPNの設定は楽なんだけど、ルーティングの設定が難しいんだよね… 
 +#clear 
 +**サーバ側 [#ubdd8bbb] 
 +先ほどのopenvpn.confの項目で、以下の項目を設定するですよ。 
 +:dev|tunを指定します。 
 +:server|サーバモードで設定する、openvpn空間でのネットワークアドレスを指定します。通信先ネットワーク内で使用しているIPとは、かぶらないIPアドレスにする。例えば、通信先のNW空間が、仮に172.21.0.0/16ならば、openvpn空間のNWは、172.22.0.0/16とかね。 
 +**クライアント側 [#ebfbd9a9] 
 +先ほどのclient.ovpnの、以下の項目を編集します。 
 +:dev|tunを指定します。 
 + 
 +**その他の設定 [#zecd28f8] 
 +***iptables等 [#n39f0623] 
 +iptablesを指定している場合は、openvpn用のNWアドレスを通過する設定をしないといけません 
 +***各種サーバ [#r9e58f78] 
 +openvpn用のNWアドレスからのリクエストを受け付けるようにしましょう 
 +***ブロードバンドルータ等 [#deab2c18] 
 +基本は、デフォルトゲートウェイにブロードバンドルータを指定している事でしょう。このデフォルトゲートウェイに、OpenVPNクライアントのアドレスはOpenVPNサーバにルーティングしてあげるルーティングテーブルを追加します。 
 + 
 +*OpenVPNを設定してみよう(TAPモード) [#l984cd92] 
 +#ref(TAP.jpg,around,right) 
 +TAPモードは、アクセス先ネットワークとクライアントが同じサブネットとなります。TAPインタフェースの設定がめんどくさいんだけど、ルーティングなんかは設定しなくていいから楽なんだよね。ただ、アクセスコントロールをしたいときは難しいですわ。 
 + 
 +こちらで設定した場合の方が、NW通信は早いみたい。 
 + 
 +#clear 
 + 
 +**サーバ側 [#aa08ed07] 
 +:dev|tap指定ね。特に、TAPデバイスを作成している場合は、そのままデバイス名(例えばtap0等)を指定すると良い 
 +:server-bridge|TAPの場合はこちら。ブリッジIFのアドレス、ネットマスク、クライアントに付与するアドレスの範囲を指定。ちなみに、何もオプションを指定しない場合は、DHCPProxyモードになります。向こう側のネットワークにDHCPサーバとかいる場合は、そちらのDHCPにNW設定をお任せできます。 
 + 
 +**クライアント側 [#f5343d4c] 
 +:dev|tap指定ね。 
 +**OpenVPNのサーバ [#c272a946] 
 +ブリッジ設定を追加してやります。 
 +***bridge-utilsのインストール [#t84c78b8] 
 + emerge bridge-utils 
 +***ブリッジインタフェースを作成する [#o6c2ed73] 
 +/etc/conf.d/netをこんな感じで設定。 
 + config_br0=("br0に振るIPアドレス") 
 + routes_br0=( 
 +       "default via ゲートウェイアドレス" 
 + ) 
 + #eth0にはアドレス付与しない 
 + config_eth0=( "null" ) 
 + #tap0はTAPモードで動かす 
 + tuntap_tap0="tap" 
 + #tap0にはアドレス付与しない 
 + config_tap0=("null") 
 + #eth0とtap0をブリッジする 
 + bridge_br0="eth0 tap0" 
 + #net.eth0とnet.tap0を実行してからbr0を動かす 
 + #また、NW設定の一番頭で動かす。 
 + depend_br0() { 
 +   need net.eth0 net.tap0 
 +   before net 
 + } 
 +さらに、/etc/init.dに移って 
 + ln -sfn net.lo net.br0 
 + ln -sfn net.lo net.tap0 
 +さらにさらに、初期設定で自動起動するように、 
 + rc-update add net.br0 default 
 + 
 +*接続確認 [#c07b1bf1] 
 +サーバ側で、openvpnを起動してみます。 
 + # /etc/init.d/openvpn start 
 +クライアント側で、openvpnクライアントを起動してみましょう。ちなみに、私はブロードバンドルータの外側から接続を試してみてます。うちのプロバイダは、DHCPでクライアントへのアドレス払い出しが5つまでOKなので♪でないと試験の意味がないからね。openvpnGUIのコンテキストメニューから、『接続』を選択。さて、うまくコネクトできるでしょうか…クライアント側でログが出ますから、確認できるでしょう…ちなみに、私は、protoをTCPにしないとだめでした。ブロードバンドルーターとかいろいろあるのかしら… 
 + 
 +*もう一工夫 [#z3477833] 
 + 
 +**暗号化強度を上げてみる [#r6a3b622] 
 +***OpenVPNの設定 [#lf755405] 
 +OpenVPNの設定で、以下を追加すると、暗号強度が増しますよ。 
 +:tls-auth|TLSによる暗号化をプラスする場合、使用する。暗号強度が上がる。[[ここの暗号鍵作成>Gentoo Linuxな生活/OpenVPNで悩む#y9606253]]で作成する、ta.keyを書いて、第2パラメータに0を指定。サーバで指定したら、クライアント側にも必要 
 +:cipher|暗号化アルゴリズムを指定します。サーバ、クライアントにて設定を合わせます 
 +:user,group|Windowsではない場合、openvpnが動作するユーザ、グループ権限が指定できる。root以外にすれば、セキュリティは向上するよね。 
 +***鍵長を変えてみる [#scca189d] 
 +/usr/share/openvpn/easy-rsaの下に、varsというファイルがあります。こいつの 
 + export KEY_SIZE=2048 
 +にすると、2048bitの鍵長になり、SSLキー自体の暗号強度が上がりますよ。デフォルトは1024bit長ね 
 + 
 +**SSL等とポートを共有する [#x83a0432] 
 +例えば、apacheサーバ等の暗号化ポート(https:443番)を、OpenVPN用ポートと共有するってことを考えてみます。 
 +***apache側 [#y1caed41] 
 +SSL等のListenポートをずらしてやります。apacheの設定ファイルを開いて 
 + #Listen 443 
 + Listen 444 
 +  
 + #<VirtualHost _default_:443> 
 + <VirtualHost _default_:444> 
 +等ね。で、再起動 
 + 
 +***OpenVPN側 [#dc29ad6e] 
 +port-shareってオプションを使用します。これを行うと、httpのプロトコルを、shareしたアドレス、ポートに転送してくれます。サーバ側のopenvpn.confを開いて 
 + 
 + port 443 
 + port-share 127.0.0.1 444 
 + 
 +として再起動。 
 +こうすると、httpは127.0.0.1のポート444に転送してくれて、VPN接続も443で実行できるってわけです。便利ねー 
 + 
 +**通信速度の高速化 [#v1fac745] 
 +***通信パケットの圧縮 [#y0196690] 
 +通信時に、データパケットを通信元で圧縮し、通信先で解凍すると、通信回線の速さよりもCPUが勝っていれば、通信速度が向上します。 
 +クライアント、サーバ側にcomp-lzoオプションを追加してやって。 
 +***インタフェースのMTU長 [#pf891575] 
 +MTU長とは、IPパケット上に載せられるデータサイズの事。ふつーのEthernetは、1500バイトです。これを超えたデータを転送しようとするとパケットを分割しようとします。これをフラグメントと言いますが、ものすごく転送速度が落ちます。 
 + 
 +さて、このVPN、IPトンネルを使用します。IPトンネルもEthernetと同じくデバイスに見えます。このデバイスに入ったパケットは、IPヘッダをつけて、さらにEthernetの1500バイトのIPデータに変換されます。分かりました?IPトンネルは、余計にくっつけるヘッダサイズ分、MTU長が小さくなるのです。なので、これを調整してやると、飛躍的に転送速度が上がります。 
 + tun-mtu 1280 
 + mssfix 1280 
 + fragment 1280 
 +こんなオプションを、サーバ側、クライアント側の設定ファイルに追加すると…うちでは転送速度が2倍に向上したよ。fragmentはproto udpの時のみ有効です~。 
 + 
 +ゲートウェイのブロードバンドルータレベルで、約100Mbyteほどの転送速度。で、設定前と設定後で、100Mbyte程度のデータをVPN経由して転送してみました。 
 +:設定前|2.5Mbyte/sec=約20Mbps 
 +:設定後|5.2Mbyte/sec=約41Mbps 
 +:さらにTAPモードにすると|6.9Mbyte/sec=約55Mbps 
 +これは劇的な変化でしょ!!TAPモードにするとルーティングしない分、さらに早いみたいです。 
 + 
 +**BitLocker to Go [#j8f352de] 
 +Windows側のVPNクライアントを見ていると、USBのアクセスキーを差し込まないとVPN接続できないようなもの、ありますよね。あれにチャレンジしてみます。 
 + 
 +うちのdv3500君は、SDカードスロットを持っています。うちに1GbyteのSDカードがありました。こいつを暗号化して、これにさっきのクライアント暗号化キーをぶっこんでおけば…そいつがないとVPN接続できないし、安心ですね。~ 
 +Windows7 Ultimateには、BitLockerというドライブ暗号化ツールが入っています。コントロールパネルから、BitLockerドライブ暗号化を選択します。SDカードを差し込むと、BitLocker to Goというメニューが出てきます。こいつでTPMデバイスを使用しない、パスワード認証を選択すると、SDカード差し込み時にパスワードを問い合わせてくる暗号化ドライブになります。これを選択。暗号化。 
 + 
 +そして、出来上がった暗号化ドライブに、暗号キーを放り込んで、クライアント側OpenVPNのコンフィグファイルに、キーのパス(SDカードドライブを含むフルパス)を記述しておきます。こーすると、アクセスの手順がこうなります。 
 + 
 ++SDカードスロットに暗号キーを差し込む 
 ++SD暗号キーのパスワード認証(BitLocker側) 
 ++OpenVPN GUIで『接続』を選択 
 ++クライアント暗号キーのパスフレーズ入力(パスフレーズ付きのクライアントキー認証) 
 ++サーバと接続確立 
 ++あとはおうちで使用するのと同じように、サーバにSSHやら、共有ドライブアクセスやら、IMAP使用したりできる 
 + 
 +うっふっふ♪こいつぁ便利な上に、SDカードとセットでないとアクセスできない。SDキーをなくしても、暗号化されている上に何のキーかわからないから、安心ってわけね。


Front page   Diff Backup Copy Rename ReloadPrint View   New Page Page list Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom) Powered by xpWiki
Counter: 33788, today: 7, yesterday: 8
ページ内検索

ログイン

ユーザー名:


パスワード:





パスワード紛失

メインメニュー

サブメニュー
自宅鯖計画

Gentoo Linuxな生活

玄箱HGにGentoo格闘記

航空ショーへ行こう

モータースポーツな世界

奥深き写真の世界への誘い

我思う ゆえに我あり



携帯用QRコード