Samba を使ってファイル共有してみる では、Sambaを使ってファイル、ディレクトリの共有を行ってみました。
ただ、Sambaをそのままインターネットで利用することは、非常にリスクがあることも書きました。
今回は、そのリスクを回避する1つの方法である暗号化技術(SSL/TLS)を用いたVPNの象徴的な OpenVPN を使って仮想LANを構築してみたいと思います。
Virtual Private Networkの略で、日本語では仮想プライベートネットワークと訳されています。
このVPNは通信相手の固定された専用通信回線(専用線)の代わりに多数の加入者で帯域共用する通信網を利用し、LAN間などを接続する技術もしくは電気通信事業者のサービスである。一口にVPNにもいろいろなVPNがあります。 中でもよく用いられるVPNが、インターネットVPNのことを単にVPNと称すことが多くなってきています。
出典 : http://ja.wikipedia.org/wiki/Virtual_Private_Network
インターネットVPNとは、
インターネットを経由して構築される仮想的なプライベートネットワーク(VPN)のことです。 つまり、インターネットはいわゆる公衆網で、それをあたかも自分専用の専用回線であるかのように利用することで、プライベートネットワークの象徴でもある仮想のLAN(ローカルエリアネットワーク)を組むこともできます。
このインターネットVPNを実現するにあたっては、かなりセキュリティ面で強固にしておく必要があります。 その点で、初期に登場したIPSecを用いたVPN(IPSec-VPN)は、それなりに強固であったものの複雑で扱いづらい、あるいは高価な面がありました。 そこで考えられたのがSSL(Secure Socket Layer)を利用するVPNで、これを SSL-VPN といいます。 SSL-VPN には、よく混同される二つの意味があり、 一つは、名前のとおりSSLの暗号化を用いたVPNという広義のSSL-VPNの意味で、解説の必要もないほどのそのままの意味になります。この広義の意味で用いた場合、OpenVPNもSSL-VPNとされています。
もう一つは、サーバーにSSL-VPN装置を設置し、SSL技術による暗号化を行いウェブブラウザを使いhttps経由で通信できるという狭義の意味でのSSL-VPNがあります。この場合、OpenVPNは別物とされています。
(いずれもSSLでトンネルをはって通信することには変わらないです。ここでは、OpenVPNはSSL VPNのソフトウェアとしておきます。)
IPsec(Security Architecture for Internet Protocol、アイピーセック)は、暗号技術を用いて、IP パケット単位でデータの改竄防止や秘匿機能を提供するプロトコルである。
- 目次
- 履歴
2013年1月14日 初版
OpenVPN を使って仮想LAN接続してみる
早速、OpenVPN のインストールから仮想ネットワークの接続、通信までの手順を簡単に解説してみます。
OpenVPNをインストールする
まずは、OpenVPNをインストールします。
CentOS/Scientific Linux では、rpmforgeリポジトリから yum を使ってインストールできます。(rpmforgeリポジトリについては、リポジトリの追加・削除、無効・有効の設定をしてみる を参照してください。)
|
OpenVPNの必要な情報を作成する
OpenVPNでは、
SSL/TLS の認証手続きをサーバー、クライアント双方で行います。
SSL/TLS の認証手続きに必要な証明書は、本来ならVerisignなどの正式な認証局から取得するのが正しいと思いますが、
ここでは、仮想LANを構築したいだけなので、一般手公開はありえませんから、高額な利用力金を支払ってまで正式な認証局を利用する価値はありません。
そこで、自前の認証局(プライベートCA)を作って、証明書、CSR、秘密鍵などの必要な情報を作成することにします。
OpenVPN で証明書、CSR、秘密鍵などの必要な情報を作成してくれるサンプルスクリプトがありますので、それを使って必要なものを作成してみます。
以下は、ここで利用するOpenVPNの認証手続きの概略図です。詳しい認証の仕組みは、SSL 認証 の仕組みと OpenVPN の認証の仕組み を参照してください。
各証明書・秘密鍵の作成作業は、以下の手順で行います。
- 前準備
実際に、各証明書・秘密鍵などのRSA関連ファイル作成には、OpenVPNで提供されているシェルスクリプトを利用します。そのための前準備をここで行います。
- 環境設定ファイル、認証関連作成ツールのコピーを行います。
# OpenVPNの環境関連ファイルは、/etc/openvpn 配下に置きます。 $ cd /etc/openvpn # OpenVPNのRSA関連ファイル作成一式をコピーします。 [openvpn]$ cp -R /usr/share/doc/openvpn-2.2.2/easy-rsa/2.0 /etc/openvpn/easy-rsa # OpenVPNの環境設定ファイルのサンプルをコピーします。 [openvpn]$ cp /usr/share/doc/openvpn-2.2.2/sample-config-files/server.conf /etc/openvpn/.
コピー元ディレクトリは、OpenVPNのバージョンによって異なります。”easy-rsa” , “server.conf” の名前で /usr/share 配下を検索すると良いでしょう。
$ find /usr/share -name "easy-rsa" /usr/share/doc/openvpn-2.2.2/easy-rsa $ find /usr/share -name "server.conf" /usr/share/doc/openvpn-2.2.2/sample-config-files/server.conf
- 認証局(CA)基本情報を編集します。
証明書関連は、複数作成する必要があります。 そのたびに認証局(CA)の基本情報を入力するのは、手間ですから、先のコピーしたRSA関連ファイル作成ツール群には、共通データとしてあらかじめ設定しておくとデフォルトで読み込んでくれる便利な機能があります。
ここでは、そのパラメータを編集しておきます。
/etc/openvpn/easy-rsa/vars
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
# easy-rsa parameter settings # NOTE: If you installed from an RPM, # don't edit this file in place in # /usr/share/openvpn/easy-rsa -- # instead, you should copy the whole # easy-rsa directory to another location # (such as /etc/openvpn) so that your # edits will not be wiped out by a future # OpenVPN package upgrade. # This variable should point to # the top level of the easy-rsa # tree. export EASY_RSA="`pwd`" # # This variable should point to # the requested executables # export OPENSSL="openssl" export PKCS11TOOL="pkcs11-tool" export GREP="grep" # This variable should point to # the openssl.cnf file included # with easy-rsa. export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA` # Edit this variable to point to # your soon-to-be-created key # directory. # # WARNING: clean-all will do # a rm -rf on this directory # so make sure you define # it correctly! export KEY_DIR="$EASY_RSA/keys" # Issue rm -rf warning echo NOTE: If you run ./clean-all, I will be doing a rm -rf on $KEY_DIR # PKCS11 fixes export PKCS11_MODULE_PATH="dummy" export PKCS11_PIN="dummy" # Increase this to 2048 if you # are paranoid. This will slow # down TLS negotiation performance # as well as the one-time DH parms # generation process. export KEY_SIZE=1024 # In how many days should the root CA key expire? export CA_EXPIRE=3650 # In how many days should certificates expire? export KEY_EXPIRE=3650 # These are the default values for fields # which will be placed in the certificate. # Don't leave any of these fields blank. #export KEY_COUNTRY="US" ### ←コメントアウト #export KEY_PROVINCE="CA" ### ←コメントアウト #export KEY_CITY="SanFrancisco" ### ←コメントアウト #export KEY_ORG="Fort-Funston" ### ←コメントアウト #export KEY_EMAIL="me@myhost.mydomain" ### ←コメントアウト #export KEY_EMAIL=mail@host.domain ### ←コメントアウト export KEY_COUNTRY="JP" # 国:日本 export KEY_PROVINCE="Tokyo" # 都道府県:東京 export KEY_CITY="Setagaya" # 地町村区:世田谷区 export KEY_ORG="example.com" # サイト情報:ドメイン名で可 export KEY_EMAIL="postmaster@example.com" # メールアドレス:管理者メールアドレス export KEY_CN=changeme export KEY_NAME=changeme export KEY_OU=changeme export PKCS11_MODULE_PATH=changeme export PKCS11_PIN=1234
この文字色箇所が変更箇所です。
- 環境設定ファイル、認証関連作成ツールのコピーを行います。
- プライベートCAの構築とCA証明書・CA秘密鍵の作成
以降の各証明書などのRSA関連ファイル作成は、/etc/openvpn/easy-rsa 配下の各スクリプトを実行して作成していきます。
$ cd /etc/openvpn/easy-rsa [easy-rsa]$ ./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) [Setagaya]: Organization Name (eg, company) [example.com]: Organizational Unit Name (eg, section) [changeme]: Common Name (eg, your name or your server's hostname) [changeme]: Name [changeme]: Email Address [postmaster@example.com]: [easy-rsa]$ ls keys/ ... ca.crt # CA 証明書 ca.key # CA 秘密鍵 ...
- サーバ証明書・サーバ秘密鍵の作成
$ cd /etc/openvpn/easy-rsa [easy-rsa]$ ./build-key-server server Generating a 1024 bit RSA private key ...........................++++++ .........++++++ writing new private key to 'server.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) [Setagaya]: Organization Name (eg, company) [example.com]: Organizational Unit Name (eg, section) [changeme]: Common Name (eg, your name or your server's hostname) [server]: Name [changeme]: Email Address [postmaster@example.com]: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Using configuration from /etc/openvpn/easy-rsa/openssl.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'JP' stateOrProvinceName :PRINTABLE:'Tokyo' localityName :PRINTABLE:'Setagaya' organizationName :PRINTABLE:'example.com' organizationalUnitName:PRINTABLE:'changeme' commonName :PRINTABLE:'server' name :PRINTABLE:'changeme' emailAddress :IA5STRING:'postmaster@example.com' Certificate is to be certified until Nov 14 10:48:11 2022 GMT (3650 days) Sign the certificate? [y/n]: y 1 out of 1 certificate requests certified, commit? [y/n] y Write out database with 1 new entries Data Base Updated [easy-rsa]$ ls keys/ ... server.csr # サーバー 署名要求(Certificate Signing Request) server.crt # サーバー 証明書 server.key # サーバー 秘密鍵 ...
- クライアント証明書・クライアント秘密鍵の作成
$ cd /etc/openvpn/easy-rsa [easy-rsa]$ ./build-key-pass client_pc1 Generating a 1024 bit RSA private key .....++++++ ..++++++ writing new private key to 'client_pc1.key' # パスフレーズ(パスワード)を入力する Enter PEM pass phrase: # パスフレーズ(パスワード)を再入力する Verifying - Enter PEM pass phrase: ----- 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) [Setagaya]: Organization Name (eg, company) [example.com]: Organizational Unit Name (eg, section) [changeme]: Common Name (eg, your name or your server's hostname) [client_pc1]: Name [changeme]: Email Address [postmaster@example.com]: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Using configuration from /etc/openvpn/easy-rsa/openssl.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'JP' stateOrProvinceName :PRINTABLE:'Tokyo' localityName :PRINTABLE:'Setagaya' organizationName :PRINTABLE:'example.com' organizationalUnitName:PRINTABLE:'changeme' commonName :T61STRING:'client_pc1' name :PRINTABLE:'changeme' emailAddress :IA5STRING:'postmaster@example.com' Certificate is to be certified until Nov 14 10:55:01 2022 GMT (3650 days) Sign the certificate? [y/n]: y 1 out of 1 certificate requests certified, commit? [y/n] y Write out database with 1 new entries Data Base Updated [easy-rsa]$ ls keys/ ... client_pc1.csr # クライアント 署名要求(Certificate Signing Request) client_pc1.crt # クライアント 証明書 client_pc1.key # クライアント 秘密鍵 ...
ここで設定したパスフレーズは、のちにOpenVPNクライアントからの接続時にパスワードとして必要になります。
もし、パスワードを使いたくない場合は、
スクリプトのbuild-key-pass→ build-key を使います。
- DHパラメータの生成
$ cd /etc/openvpn/easy-rsa [easy-rsa]$ ./build-dh Generating DH parameters, 1024 bit long safe prime, generator 2 This is going to take a long time ................+.......+........................................................................................................+........+.....................................................................+......+...............................+.............+.........................+..............................................................+...........................+...................................................................+...................+.................+..............+......................................................+..............................+.........................................+..+..........................++*++*++* [easy-rsa]$ ls keys/ ... dh1024.pem # DHパラメータ ...
- TLS-AUTH HMAC 共有鍵の生成
$ openvpn --genkey --secret /etc/openvpn/easy-rsa/keys/ta.key $ ls /etc/openvpn/easy-rsa/keys/ ... ta.key # TLS-AUTH HMAC 共有鍵 ...
- OpenVPN のサーバー設定ファイルを編集します。
OpenVPN のサーバー設定ファイルは、先にコピーした /etc/openvpn/server.conf を編集して使います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314
################################################# # Sample OpenVPN 2.0 config file for # # multi-client server. # # # # This file is for the server side # # of a many-clients <-> one-server # # OpenVPN configuration. # # # # OpenVPN also supports # # single-machine <-> single-machine # # configurations (See the Examples page # # on the web site for more info). # # # # This config should work on Windows # # or Linux/BSD systems. Remember on # # Windows to quote pathnames and use # # double backslashes, e.g.: # # "C:\\Program Files\\OpenVPN\\config\\foo.key" # # # # Comments are preceded with '#' or ';' # ################################################# # Which local IP address should OpenVPN # listen on? (optional) ;local a.b.c.d # Which TCP/UDP port should OpenVPN listen on? # If you want to run multiple OpenVPN instances # on the same machine, use a different port # number for each one. You will need to # open up this port on your firewall. port 1194 # TCP/UDP のポート番号です。 # TCP or UDP server? ;proto tcp proto udp # TCP/UDP のいずれを使用するか指定します。 # "dev tun" will create a routed IP tunnel, # "dev tap" will create an ethernet tunnel. # Use "dev tap0" if you are ethernet bridging # and have precreated a tap0 virtual interface # and bridged it with your ethernet interface. # If you want to control access policies # over the VPN, you must create firewall # rules for the the TUN/TAP interface. # On non-Windows systems, you can give # an explicit unit number, such as tun0. # On Windows, use "dev-node" for this. # On most systems, the VPN will not function # unless you partially or fully disable # the firewall for the TUN/TAP interface. ;dev tap dev tun # tap/tun のいずれを使用するか指定します。rooting:tun , bridge:tap を指定します。 # Windows needs the TAP-Win32 adapter name # from the Network Connections panel if you # have more than one. On XP SP2 or higher, # you may need to selectively disable the # Windows firewall for the TAP adapter. # Non-Windows systems usually don't need this. ;dev-node MyTap # SSL/TLS root certificate (ca), certificate # (cert), and private key (key). Each client # and the server must have their own cert and # key file. The server and all clients will # use the same ca file. # # See the "easy-rsa" directory for a series # of scripts for generating RSA certificates # and private keys. Remember to use # a unique Common Name for the server # and each of the client certificates. # # Any X509 key management system can be used. # OpenVPN can also use a PKCS #12 formatted key file # (see "pkcs12" directive in man page). # 認証局証明書のファイル名を指定します。/etc/openvpn からの論理パスで指定します。 ca easy-rsa/keys/ca.crt # サーバー証明書のファイル名を指定します。/etc/openvpn からの論理パスで指定します。 cert easy-rsa/keys/server.crt # サーバー秘密鍵のファイル名を指定します。/etc/openvpn からの論理パスで指定します。 key easy-rsa/keys/server.key # This file should be kept secret # Diffie hellman parameters. # Generate your own with: # openssl dhparam -out dh1024.pem 1024 # Substitute 2048 for 1024 if you are using # 2048 bit keys. # DHパラメータのファイル名を指定します。/etc/openvpn からの論理パスで指定します。 dh easy-rsa/keys/dh1024.pem # Configure server mode and supply a VPN subnet # for OpenVPN to draw client addresses from. # The server will take 10.8.0.1 for itself, # the rest will be made available to clients. # Each client will be able to reach the server # on 10.8.0.1. Comment this line out if you are # ethernet bridging. See the man page for more info. # VPNのネットワークアドレスを指定します。(以下デフォルトのままです) server 10.8.0.0 255.255.255.0 # Maintain a record of client <-> virtual IP address # associations in this file. If OpenVPN goes down or # is restarted, reconnecting clients can be assigned # the same virtual IP address from the pool that was # previously assigned. # VPNへ接続したクライアントとIPアドレスを書き込むファイル名を指定します。(以下デフォルトのままです) ifconfig-pool-persist ipp.txt # Configure server mode for ethernet bridging. # You must first use your OS's bridging capability # to bridge the TAP interface with the ethernet # NIC interface. Then you must manually set the # IP/netmask on the bridge interface, here we # assume 10.8.0.4/255.255.255.0. Finally we # must set aside an IP range in this subnet # (start=10.8.0.50 end=10.8.0.100) to allocate # to connecting clients. Leave this line commented # out unless you are ethernet bridging. ;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100 # Configure server mode for ethernet bridging # using a DHCP-proxy, where clients talk # to the OpenVPN server-side DHCP server # to receive their IP address allocation # and DNS server addresses. You must first use # your OS's bridging capability to bridge the TAP # interface with the ethernet NIC interface. # Note: this mode only works on clients (such as # Windows), where the client-side TAP adapter is # bound to a DHCP client. ;server-bridge # Push routes to the client to allow it # to reach other private subnets behind # the server. Remember that these # private subnets will also need # to know to route the OpenVPN client # address pool (10.8.0.0/255.255.255.0) # back to the OpenVPN server. ;push "route 192.168.10.0 255.255.255.0" ;push "route 192.168.20.0 255.255.255.0" # To assign specific IP addresses to specific # clients or if a connecting client has a private # subnet behind it that should also have VPN access, # use the subdirectory "ccd" for client-specific # configuration files (see man page for more info). # EXAMPLE: Suppose the client # having the certificate common name "Thelonious" # also has a small subnet behind his connecting # machine, such as 192.168.40.128/255.255.255.248. # First, uncomment out these lines: ;client-config-dir ccd ;route 192.168.40.128 255.255.255.248 # Then create a file ccd/Thelonious with this line: # iroute 192.168.40.128 255.255.255.248 # This will allow Thelonious' private subnet to # access the VPN. This example will only work # if you are routing, not bridging, i.e. you are # using "dev tun" and "server" directives. # EXAMPLE: Suppose you want to give # Thelonious a fixed VPN IP address of 10.9.0.1. # First uncomment out these lines: ;client-config-dir ccd ;route 10.9.0.0 255.255.255.252 # Then add this line to ccd/Thelonious: # ifconfig-push 10.9.0.1 10.9.0.2 # Suppose that you want to enable different # firewall access policies for different groups # of clients. There are two methods: # (1) Run multiple OpenVPN daemons, one for each # group, and firewall the TUN/TAP interface # for each group/daemon appropriately. # (2) (Advanced) Create a script to dynamically # modify the firewall in response to access # from different clients. See man # page for more info on learn-address script. ;learn-address ./script # If enabled, this directive will configure # all clients to redirect their default # network gateway through the VPN, causing # all IP traffic such as web browsing and # and DNS lookups to go through the VPN # (The OpenVPN server machine may need to NAT # or bridge the TUN/TAP interface to the internet # in order for this to work properly). ;push "redirect-gateway def1 bypass-dhcp" # Certain Windows-specific network settings # can be pushed to clients, such as DNS # or WINS server addresses. CAVEAT: # http://openvpn.net/faq.html#dhcpcaveats # The addresses below refer to the public # DNS servers provided by opendns.com. ;push "dhcp-option DNS 208.67.222.222" ;push "dhcp-option DNS 208.67.220.220" # Uncomment this directive to allow different # clients to be able to "see" each other. # By default, clients will only see the server. # To force clients to only see the server, you # will also need to appropriately firewall the # server's TUN/TAP interface. ;client-to-client # Uncomment this directive if multiple clients # might connect with the same certificate/key # files or common names. This is recommended # only for testing purposes. For production use, # each client should have its own certificate/key # pair. # # IF YOU HAVE NOT GENERATED INDIVIDUAL # CERTIFICATE/KEY PAIRS FOR EACH CLIENT, # EACH HAVING ITS OWN UNIQUE "COMMON NAME", # UNCOMMENT THIS LINE OUT. ;duplicate-cn # The keepalive directive causes ping-like # messages to be sent back and forth over # the link so that each side knows when # the other side has gone down. # Ping every 10 seconds, assume that remote # peer is down if no ping received during # a 120 second time period. # VPN接続先が10秒ごとにping を発行してダウンしていないか確認します。連続で120秒間 ping が返ってこない場合は、ダウンしたと認識します。(以下デフォルトのままです) keepalive 10 120 # For extra security beyond that provided # by SSL/TLS, create an "HMAC firewall" # to help block DoS attacks and UDP port flooding. # # Generate with: # openvpn --genkey --secret ta.key # # The server and each client must have # a copy of this key. # The second parameter should be '0' # on the server and '1' on the clients. # TLS-AUTH HMAC 共有鍵のファイル名を指定します。/etc/openvpn からの論理パスで指定します。 tls-auth easy-rsa/keys/ta.key 0 # This file is secret # Select a cryptographic cipher. # This config item must be copied to # the client config file as well. ;cipher BF-CBC # Blowfish (default) ;cipher AES-128-CBC # AES ;cipher DES-EDE3-CBC # Triple-DES # Enable compression on the VPN link. # If you enable it here, you must also # enable it in the client config file. # LZOによる圧縮を有効にします。(以下デフォルトのままです) comp-lzo # The maximum number of concurrently connected # clients we want to allow. ;max-clients 100 # It's a good idea to reduce the OpenVPN # daemon's privileges after initialization. # # You can uncomment this out on # non-Windows systems. # Windows以外のシステム上でのユーザ、グループを指定します。(コメントアウトを解除します) user nobody group nobody # The persist options will try to avoid # accessing certain resources on restart # that may no longer be accessible because # of the privilege downgrade. # 特定のリソースアクセスへの回避を指定します。(以下デフォルトのままです) persist-key persist-tun # Output a short status file showing # current connections, truncated # and rewritten every minute. # ステータスファイル名を指定します。(以下デフォルトのままです) status openvpn-status.log # By default, log messages will go to the syslog (or # on Windows, if running as a service, they will go to # the "\Program Files\OpenVPN\log" directory). # Use log or log-append to override this default. # "log" will truncate the log file on OpenVPN startup, # while "log-append" will append to it. Use one # or the other (but not both). # ログファイル名を指定します。(以下コメントアウトを解除します。ログが必要ない方は、そのままコメントにしておきます。) log openvpn.log log-append openvpn.log # Set the appropriate level of log # file verbosity. # # 0 is silent, except for fatal errors # 4 is reasonable for general usage # 5 and 6 can help to debug connection problems # 9 is extremely verbose # ログファイルへの出力レベルを指定します。(以下デフォルトのままです。デバッグが必要な場合は、数値を上げます。) verb 3 # Silence repeating messages. At most 20 # sequential messages of the same message # category will be output to the log. ;mute 20
OpenVPNで利用するtcp/udp ポートを開く
先の /etc/openvpn/server.conf で設定したポートとデバイスを利用可能なように iptables で設定します。
iptablesなどでポートの制限を行っていない場合は、
|
OpenVPNを起動する。
ここまでの前準備を終えたら、OpenVPNを起動します。
|
Windowsからアクセスしてみましょう
サーバー側の設定を終えたら、WindowsからVPNサーバーへ接続してみましょう。
WindowsからOpenVPNのVPNサーバーへ接続する際には、OpenVPNサーバーへの接続ソフトでいわゆるOpenVPNクライアントソフトが必要です。
Windows版で主だったところで以下のようなものがあります。
- OpenVPN Technologies, Inc. から提供されている OpenVPN (サーバーとしてもクライアントとしても利用できる)
→ ダウンロードサイト : http://openvpn.net/index.php/download/community-downloads.html
- OpenVPN Technologies, Inc. から提供されている OpenVPN Client専用ソフト OpenVPN-Client
→ ダウンロードサイト : http://openvpn.net/index.php?option=com_content&id=357
- 日本語OpenVPNサイト運営のプラムシステムズ株式会社から提供されている vpnux Connector Lite
→ ダウンロードサイト : http://www.vpnux.jp/?utm_source=openvpn&utm_medium=banner&utm_campaign=site
- オープンソースプロジェクト OpenVPN Client Windows から提供されている securepoint
→ ダウンロードサイト : http://sourceforge.net/projects/securepoint/
ここで、機能面が充実していて安定している サーバーとしてもクライアントとしても利用できる OpenVPN を使うことにします。
クライアント専用ソフトとしては、OpenVPN-Client for Windows の解説が多く目にしますが、2010年から更新が止まっていて、パスワード周りの機能が落ちていますし、使い勝手が悪いです。
また、vpnux Connector Liteは、自動化ができません。
さらに、securepointについては、TLS-AUTHの機能がありません。
結局、消去法からOpenVPNが残り、これを使うことにしました。
また、OpenVPNの最新版である2.3.0 は、バグが多いようで よくクラッシュします。そのため、ここでは、OpenVPN 2.2.2 を利用します。
- 先のダウンロードページからOpenVPN 2.2.2 をダウンロードし、インストールします。
Windows版では、MicroSoft の.NET Framework 3.5以上が必要なので、もし、インストールされていないようであれば、先にインストールします。
インストール自体は、画面の指示に従ってインストールするだけなので割愛します。
また、TAPドライバーのインストール確認のために以下のような画面表示があります。その場合は、迷わずインストールをクリックします。
- 先のOpenVPN サーバーで作成した各証明書、鍵などのファイルをコピーします。
ここでは、OpenVPNサーバーから C:\openvpn へ 必要な各証明書、鍵などのファイルが一式すべてコピーするものします。 コピーされるべきファイルは、以下のとおりです。
C:\openvpn> dir /B ca.crt # CA 証明書 client_pc1.crt # クライアント 証明書 client_pc1.key # クライアント 秘密鍵 ta.key # TLS-AUTH HMAC 共有鍵
C:\openvpn は、OpenVPN のインストール先ではありません。
ここでは、OpenVPN のインストール先はインストーラのデフォルトのディレクトリとしています。 一般的には、そこにコピーしたくなりますが、OpenVPN のインストール先は、Windows Vista/7/8 では、管理者権限がないとファイルの書き込みができないので色々と面倒です。 そのため、ここでは C:\openvpn というディレクトリを作成して そこにコピーしています。
- クライアント認証用のパスワードファイルを作成します。
クライアント証明書を作成する際に入力したパスフレーズを保存したテキストファイルをパスワードファイル ( C:\openvpn\pass.cfg )として作成します。
中身は、単純なテキストファイルでパスワードをそのまま1行目に入力したものです。以下は、ファイルの中身を出力した様子で、単純にテキストが設定されていることがわかるかと思います。
C:\openvpn> cat pass.cfg password C:\openvpn$>
パスワードファイルを作成するのは、接続する度にパスワードを入力するのも大変なので自動化のために作成しています。
- クライアント接続用の OpenVPN Configファイルを作成します。
クライアント接続用の OpenVPN Configファイル ( C:\openvpn\client.ovpn )を作成します。
# VPN Client を設定します client # tap/tun のいずれを使用するか指定します。VPN Serverの設定に合わせます dev tun # TCP/UDP のいずれを使用するか指定します。VPN Serverの設定に合わせます proto udp # VPN ServerのIPアドレス( 192.168.1.99 ) とポート番号( 1194 )を設定します remote 192.168.1.99 1194 # remoteで指定したホスト名の名前解決のためのタイムアウト時間(ここでは無制限)を設定します resolv-retry infinite # 特定のリソースアクセスへの回避を指定します。(以下デフォルトのままです) persist-key persist-tun # 認証局証明書のファイル名を指定します。 ca ca.crt # クライアント証明書のファイル名を指定します。 cert client_pc1.crt # クライアント秘密鍵のファイル名を指定します。 key client_pc1.key # クライアント認証パスワードファイル名を指定します。 askpass pass.cfg key-direction 1 # TLS-AUTH HMAC 共有鍵のファイル名を指定します。 tls-auth ta.key 1 # LZOによる圧縮を有効にします。 comp-lzo # ログファイルへの出力レベルを指定します。 verb 4
- コマンドプロンプトからアクセスしてみましょう。
コマンドプロンプトは、管理者権限で実行します。
# 最初にOpenVPNのインストール先ディレクトリへのパスをはっておきます。 C:\openvpn> set path=%path%;"C:\Program Files (x86)\OpenVPN\bin" # OpenVPN Client Configを実行して、OpenVPNサーバーへ接続します。 C:\openvpn> openvpn.exe --config client2.ovpn ... Mon Jan 14 05:52:23 2013 us=74000 OPTIONS IMPORT: route options modified Mon Jan 14 05:52:23 2013 us=90000 ROUTE default_gateway=192.168.1.1 Mon Jan 14 05:52:23 2013 us=90000 TAP-WIN32 device [ローカル エリア接続] opened: \\.\Global\{xxxxxx-xxxxx-xxxx-xxxx-xxxxxxxx}.tap Mon Jan 14 05:52:23 2013 us=90000 TAP-Win32 Driver Version 9.9 Mon Jan 14 05:52:23 2013 us=90000 TAP-Win32 MTU=1500 Mon Jan 14 05:52:23 2013 us=90000 Notified TAP-Win32 driver to set a DHCP IP/netmask of 10.8.0.50/255.255.255.252 on interface {xxxxxx-xxxxx-xxxx-xxxx-xxxxxxxx} [DHCP-serv: 10.8.0.49, lease-time: 31536000] Mon Jan 14 05:52:23 2013 us=90000 Successful ARP Flush on interface [19] {xxxxxx-xxxxx-xxxx-xxxx-xxxxxxxx} Mon Jan 14 05:52:25 2013 us=367000 TEST ROUTES: 1/1 succeeded len=1 ret=1 a=0 u/d=up Mon Jan 14 05:52:25 2013 us=383000 C:\WINDOWS\system32\route.exe ADD 10.8.0.0 MASK 255.255.255.0 10.8.0.49 OK! Mon Jan 14 05:52:25 2013 us=383000 Initialization Sequence Completed
Initialization Sequence Completed で接続完了です。
クライアント側のIPアドレスは、10.8.0.50で振られています。
(切断したい場合は、F4キーを押下します。)
別のコマンドプロンプト画面から pingで OpenVPN サーバー( 10.8.0.1 固定です。)へアクセスできるか確認してみましょう。
# pingで OpenVPN サーバーへアクセスできるか確認してみましょう。 C:\openvpn> ping 10.8.0.1 10.8.0.1 に ping を送信しています 32 バイトのデータ: 10.8.0.1 からの応答: バイト数 =32 時間 =1ms TTL=64 10.8.0.1 からの応答: バイト数 =32 時間 =1ms TTL=64 10.8.0.1 からの応答: バイト数 =32 時間 <1ms TTL=64 10.8.0.1 からの応答: バイト数 =32 時間 =2ms TTL=64 10.8.0.1 の ping 統計: パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、 ラウンド トリップの概算時間 (ミリ秒): 最小 = 0ms、最大 = 2ms、平均 = 1ms
上記のように通ればOKです。
また、逆も確かめておきます。
# pingで OpenVPN クライアントへアクセスできるか確認してみましょう。 $ ping -c5 10.8.0.50 PING 10.8.0.50 (10.8.0.50) 56(84) bytes of data. 64 bytes from 10.8.0.50: icmp_seq=1 ttl=128 time=0.842 ms 64 bytes from 10.8.0.50: icmp_seq=2 ttl=128 time=2.17 ms 64 bytes from 10.8.0.50: icmp_seq=3 ttl=128 time=1.66 ms 64 bytes from 10.8.0.50: icmp_seq=4 ttl=128 time=1.50 ms 64 bytes from 10.8.0.50: icmp_seq=5 ttl=128 time=1.00 ms --- 10.8.0.50 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4053ms rtt min/avg/max/mdev = 0.842/1.438/2.176/0.478 ms
逆向きは、Windos Vista/7/8 のデフォルトの設定では、NGになることがあります。 これは、Windowsファイアウォールが効いていて、外部からのpingコマンドを受け付けないようになっているためです。これを解除すれば、pingがとおるようになります。
簡単な解除方法は以下のとおりです。
- コントロール パネル > システムとセキュリティ > Windows ファイアウォール でファイアウォール管理画面を表示します。
- ファイアウォール管理画面 の画面左の 詳細設定 をクリックすると以下のように セキュリティが強化されたWindowsファイアウォールが表示されます。
- 画面中央のWindowsファイアウォールのプロパティをクリックします。
- パブリックプロファイルタブをクリックします。
- 保護されているネットワーク接続 カスタマイズ をクリックします。
- ネットワーク接続一覧 の中で TAPアダプタの名前 (ここではローカルエリア接続)のチェックを解除して、OK をクリックします。
pingが通らなくてもほとんど影響はありませんので、確認を終えたらもとに戻しておきましょう。
OpenVPN-GUIを使いたい場合は、以下のように実行すればOKです。
openvpn-gui-1.0.3.exe の実行ファイル名は、OpenVPNのバージョンによって異なります。# 最初にOpenVPNのインストール先ディレクトリへのパスをはっておきます。 C:\openvpn> set path=%path%;"C:\Program Files (x86)\OpenVPN\bin" # OpenVPN Client Configを OpenVPN-GUIで実行して、OpenVPNサーバーへ接続します。 C:\openvpn> openvpn-gui-1.0.3.exe --config_dir "C:\openvpn\config_gui" --connect client.ovpn
OpenVPN-GUIを実行した場合、タスクトレイにアイコン表示されます。
切断状態
接続状態
また、右クリックでメニューが表示されますので、各操作を行うことができます。
Windowsログイン時に自動的にVPN接続を行うように自動化したい場合は、上記の手順をバッチファイルにして、管理者権限で実行すればOKです。
管理者権限で実行する場合の確認画面を表示したくない場合は、(最上位の特権で実行するように)タスク登録してタスク名で実行するのが一番ポピュラーなようです。
VPNは、結構、はまりやすいです。
ちょっとしたPCの環境やサーバーの環境の違いでうまく接続できなかったりします。
個人的にもクライアント側では、結構はまってしまいました。個人的な備忘録も兼ねていますが、この記事が、みなさんの何かのお役に立てればうれしく思います。
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない、検索ができないことがあります。
コメントを投稿 :