3: 2010-03-12 (Fri) 01:35:15 maruo  |
Cur: 2010-07-05 (Mon) 00:13:21 maruo  |
| **クライアント側 [#v7b79b03] | | **クライアント側 [#v7b79b03] |
| クライアントにLinuxを使用する場合は、サーバと一緒。今回は、Windowsを使用するので、[[OpenVPN GUI for Windows 日本語版:http://www.openvpn.jp/bridging/5.html]]を使用します。インストール手順は[[こちら:http://www.openvpn.jp/guiuse.html]]でね。 | | クライアントにLinuxを使用する場合は、サーバと一緒。今回は、Windowsを使用するので、[[OpenVPN GUI for Windows 日本語版:http://www.openvpn.jp/bridging/5.html]]を使用します。インストール手順は[[こちら:http://www.openvpn.jp/guiuse.html]]でね。 |
- | | |
- | *OpenVPNを設定してみよう [#gcb1e883] | |
- | **サーバ側 [#aa7ab458] | |
- | /usr/share/doc/openvpn-XXX/examples/sample-config-files/ディレクトリに、設定ファイルのサンプルがあります。こちらを利用しましょう。 | |
- | サーバ側ですので、この下にあるserver.conf.bz2を、/etc/openvpn配下に、openvpn.confという名称で、解凍&コピーします。この中で、特に必要な項目を… | |
- | :port|openvpnで通信するポートを指定します(クライアント側と合わせる) | |
- | :proto|tcpか、udpかを指定します。(クライアント側と合わせる) | |
- | :dev|tapかtunか。tapはブリッジモードかつL2レベルインタフェース、tunはルーティングモードかつL3モードです。私はtunで。ってのは、DRBDと相性がわるかったから…(クライアント側と合わせる) | |
- | :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を設定します。 | |
- | :server|サーバモードで設定する、openvpn空間でのネットワークアドレスを指定します。通信先ネットワーク内で使用しているIPとは、かぶらないIPアドレスにする。例えば、通信先のNW空間が、仮に172.21.0.0/16ならば、openvpn空間のNWは、172.22.0.0/16とかね。 | |
- | :push|接続してきたクライアントに自動設定するパラメータを指定する。例えばルーティングテーブル。接続してできたデバイスに対して、通信先NWのルーティング(上の例なら172.21.0.0/16向けのルーティング)を設定するとか、クライアントに参照させたいDNSサーバのアドレスとか。 | |
- | :tls-auth,cipher|TLSによる暗号化をプラスする場合、使用する。暗号強度が上がる。 | |
- | :user,group|Windowsではない場合、openvpnが動作するユーザ、グループ権限が指定できる。root以外にすれば、セキュリティは向上するよね。 | |
- | **クライアント側 [#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かを指定します。(サーバ側と合わせる) | |
- | :dev|tapかtunか。tapはブリッジモードかつL2レベルインタフェース(ARPが動くってことかな…)、tunはルーティングモードかつL3モード(ARPは解決しないモードかな)です。私はtunで。(サーバ側と合わせる) | |
- | :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は、\の指定は\\ですので、注意。 | |
- | :tls-auth,cipher|TLSによる暗号化をプラスする場合、使用する。暗号強度が上がる。 | |
| *暗号鍵を作成 [#y9606253] | | *暗号鍵を作成 [#y9606253] |
| OpenVPNインストール時、大体/usr/share/openvpn等のどこかに、easy-rsaというフォルダがあります。この中に、暗号鍵作成ツールが入っております。そのフォルダ内で、ツールを実行! | | OpenVPNインストール時、大体/usr/share/openvpn等のどこかに、easy-rsaというフォルダがあります。この中に、暗号鍵作成ツールが入っております。そのフォルダ内で、ツールを実行! |
| # build-dh | | # build-dh |
| 少々お待ちくださいね… | | 少々お待ちくださいね… |
| + | **TLSのHMAC認証用共有鍵作成 [#h77443fa] |
| + | 別に作成しなくてもよいのですが、後で述べる[[暗号強度を強める設定>Gentoo Linuxな生活/OpenVPNで悩む#r6a3b622]]を行う場合は、共有鍵を作成します。 |
| + | openvpn --genkey --secret ta.key |
| + | |
| **鍵をコピー [#q123c922] | | **鍵をコピー [#q123c922] |
| そうすると、keysサブディレクトリ配下に、以下があるはず。 | | そうすると、keysサブディレクトリ配下に、以下があるはず。 |
| server.csr | | server.csr |
| server.key | | server.key |
- | で、これらのうち、ca.crt(CA証明書),クライアント名.crt,クライアント名.csr(クライアント証明書),クライアント名.key(クライアント秘密鍵)をコピーして、Windows側に持ってってあげます。くれぐれも、漏えいしたりしないように気をつけつつ… | + | ta.key |
- | *その他の設定 [#ta633b9b] | + | で、これらのうち、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] | | **ブロードバンドルータ側の設定 [#ef9f4faa] |
| 普通は、ブロードバンドルータで、ポートを閉じていると思います。ブロードバンドルータ側で、openvpnを受け付けているプロトコル、ポートを、openvpnサーバ側に向けてあげる変換テーブルを設定してあげましょう。 | | 普通は、ブロードバンドルータで、ポートを閉じていると思います。ブロードバンドルータ側で、openvpnを受け付けているプロトコル、ポートを、openvpnサーバ側に向けてあげる変換テーブルを設定してあげましょう。 |
| Sysctlの、ip_forwardをONにします。 | | Sysctlの、ip_forwardをONにします。 |
| # echo "1" > /proc/sys/net/ipv4/ip_forward | | # 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等 [#n39f0623] |
| iptablesを指定している場合は、openvpn用のNWアドレスを通過する設定をしないといけません | | iptablesを指定している場合は、openvpn用のNWアドレスを通過する設定をしないといけません |
| ***各種サーバ [#r9e58f78] | | ***各種サーバ [#r9e58f78] |
| openvpn用のNWアドレスからのリクエストを受け付けるようにしましょう | | 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] | | *接続確認 [#c07b1bf1] |
| サーバ側で、openvpnを起動してみます。 | | サーバ側で、openvpnを起動してみます。 |
| | | |
| *もう一工夫 [#z3477833] | | *もう一工夫 [#z3477833] |
- | Windows側のVPNクライアントを見ていると、USBのアクセスキーを差し込まないとVPN接続できないようなもの、ありますよね。あれにチャレンジしてみます。 | |
| | | |
- | うちのdv3500君は、SDカードスロットを持っています。うちに1GbyteのSDカードがありました。こいつを暗号化して、これにさっきのクライアント暗号化キーをぶっこんでおけば…そいつがないとVPN接続できないし、安心ですね。 | + | **暗号化強度を上げてみる [#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] | | **BitLocker to Go [#j8f352de] |
| + | Windows側のVPNクライアントを見ていると、USBのアクセスキーを差し込まないとVPN接続できないようなもの、ありますよね。あれにチャレンジしてみます。 |
| + | |
| + | うちのdv3500君は、SDカードスロットを持っています。うちに1GbyteのSDカードがありました。こいつを暗号化して、これにさっきのクライアント暗号化キーをぶっこんでおけば…そいつがないとVPN接続できないし、安心ですね。~ |
| Windows7 Ultimateには、BitLockerというドライブ暗号化ツールが入っています。コントロールパネルから、BitLockerドライブ暗号化を選択します。SDカードを差し込むと、BitLocker to Goというメニューが出てきます。こいつでTPMデバイスを使用しない、パスワード認証を選択すると、SDカード差し込み時にパスワードを問い合わせてくる暗号化ドライブになります。これを選択。暗号化。 | | Windows7 Ultimateには、BitLockerというドライブ暗号化ツールが入っています。コントロールパネルから、BitLockerドライブ暗号化を選択します。SDカードを差し込むと、BitLocker to Goというメニューが出てきます。こいつでTPMデバイスを使用しない、パスワード認証を選択すると、SDカード差し込み時にパスワードを問い合わせてくる暗号化ドライブになります。これを選択。暗号化。 |
| | | |