レンタルサーバー・自宅サーバー設定・構築のヒント
レンタルサーバー・自宅サーバー設定・構築のヒント - レンタルサーバー・自宅サーバーの設定・構築情報を公開しています。

C6 S6

OpenVPN を使って仮想LAN接続してみる

2013年1月14日 2015年5月14日
virtual lan opnevpn

Samba を使ってファイル共有してみる では、Sambaを使ってファイル、ディレクトリの共有を行ってみました。 ただ、Sambaをそのままインターネットで利用することは、非常にリスクがあることも書きました。

今回は、そのリスクを回避する1つの方法である暗号化技術(SSL/TLS)を用いたVPNの象徴的な OpenVPN を使って仮想LANを構築してみたいと思います。

VPN は、
Virtual Private Networkの略で、日本語では仮想プライベートネットワークと訳されています。

このVPNは通信相手の固定された専用通信回線(専用線)の代わりに多数の加入者で帯域共用する通信網を利用し、LAN間などを接続する技術もしくは電気通信事業者のサービスである。
出典 : http://ja.wikipedia.org/wiki/Virtual_Private_Network
一口にVPNにもいろいろなVPNがあります。 中でもよく用いられるVPNが、インターネットVPNのことを単にVPNと称すことが多くなってきています。

インターネット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 パケット単位でデータの改竄防止や秘匿機能を提供するプロトコルである。

OpenVPN を使って仮想LAN接続してみる

早速、OpenVPN のインストールから仮想ネットワークの接続、通信までの手順を簡単に解説してみます。

OpenVPNをインストールする

まずは、OpenVPNをインストールします。 CentOS/Scientific Linux では、rpmforgeリポジトリから yum を使ってインストールできます。(rpmforgeリポジトリについては、リポジトリの追加・削除、無効・有効の設定をしてみる を参照してください。)

$ yum --enablerepo=rpmforge -y install openvpn
...
  Installing : pkcs11-helper-1.08-1.el6.rf.i686                             1/3
  Installing : lzo-2.03-3.1.el6.i686                                        2/3
  Installing : openvpn-2.2.2-1.el6.rf.i686                                  3/3
...
Complete!

OpenVPNの必要な情報を作成する

OpenVPNでは、
SSL/TLS の認証手続きをサーバー、クライアント双方で行います。

SSL/TLS の認証手続きに必要な証明書は、本来ならVerisignなどの正式な認証局から取得するのが正しいと思いますが、 ここでは、仮想LANを構築したいだけなので、一般手公開はありえませんから、高額な利用力金を支払ってまで正式な認証局を利用する価値はありません。
そこで、自前の認証局(プライベートCA)を作って、証明書、CSR、秘密鍵などの必要な情報を作成することにします。

OpenVPN で証明書、CSR、秘密鍵などの必要な情報を作成してくれるサンプルスクリプトがありますので、それを使って必要なものを作成してみます。

以下は、ここで利用するOpenVPNの認証手続きの概略図です。詳しい認証の仕組みは、SSL 認証 の仕組みと OpenVPN の認証の仕組み を参照してください。

openvpnの認証手続き概略図

各証明書・秘密鍵の作成作業は、以下の手順で行います。

  1. 前準備

    実際に、各証明書・秘密鍵などのRSA関連ファイル作成には、OpenVPNで提供されているシェルスクリプトを利用します。そのための前準備をここで行います。

    1. 環境設定ファイル、認証関連作成ツールのコピーを行います。
      # 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
    2. 認証局(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

      太字箇所が、変更箇所です。
      この文字色箇所がコメントアウト箇所です。
      この文字色箇所が挿入箇所です。

  2. プライベート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 秘密鍵
    ...

  3. サーバ証明書・サーバ秘密鍵の作成
    $ 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  # サーバー 秘密鍵
    ...

  4. クライアント証明書・クライアント秘密鍵の作成
    $ 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 を使います。

  5. 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パラメータ
    ...

  6. TLS-AUTH HMAC 共有鍵の生成
    $ openvpn --genkey --secret /etc/openvpn/easy-rsa/keys/ta.key
    $ ls /etc/openvpn/easy-rsa/keys/
    ...
    ta.key   # TLS-AUTH HMAC 共有鍵
    ...

  7. 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
    315
    
    
    #################################################
    # 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などでポートの制限を行っていない場合は、

# server.confで設定したポートとプロトコルをオープンします。
$ /sbin/iptables -A INPUT -p udp --dport 1194 -j ACCEPT
# server.confで設定した デバイス tun をオープンします。
$ /sbin/iptables -A INPUT -i tun+ -j ACCEPT
$ /sbin/iptables -A FORWARD -i tun+ -j ACCEPT

$ /etc/rc.d/init.d/iptables save
iptables: ファイアウォールのルールを /etc/sysconfig/iptable[  OK  ]中:

$ /sbin/service iptables restart
iptables: ファイアウォールルールを消去中:                  [  OK  ]
iptables: チェインをポリシー ACCEPT へ設定中filter         [  OK  ]
iptables: モジュールを取り外し中:                          [  OK  ]
iptables: ファイアウォールルールを適用中:                  [  OK  ]
ここでの設定は、あくまでVPNサーバーまでのアクセスを許可したものです。VPNサーバー配下に隠れているサーバーへのアクセスは考慮されていないので注意してください。必要最小限の設定となっています。

OpenVPNを起動する。

ここまでの前準備を終えたら、OpenVPNを起動します。

# OpenVPN を起動します。
#    /etc/init.d/openvpn でも可
$ service openvpn start
openvpn を起動中:                                          [  OK  ]

# 再起動してもOpenVPN を自動で起動するように設定します。
$ chkconfig openvpn on

Windowsからアクセスしてみましょう

サーバー側の設定を終えたら、WindowsからVPNサーバーへ接続してみましょう。

WindowsからOpenVPNのVPNサーバーへ接続する際には、OpenVPNサーバーへの接続ソフトでいわゆるOpenVPNクライアントソフトが必要です。
Windows版で主だったところで以下のようなものがあります。



ここで、機能面が充実していて安定している サーバーとしてもクライアントとしても利用できる OpenVPN を使うことにします。

クライアント専用ソフトとしては、OpenVPN-Client for Windows の解説が多く目にしますが、2010年から更新が止まっていて、パスワード周りの機能が落ちていますし、使い勝手が悪いです。
また、vpnux Connector Liteは、自動化ができません。
さらに、securepointについては、TLS-AUTHの機能がありません。

結局、消去法からOpenVPNが残り、これを使うことにしました。

OpenVPNも必ずしも使い勝手が良いわけでもありませんが、使い勝手の悪い部分については、回避策もなんとかありますから、機能の充実を選択しました。
また、OpenVPNの最新版である2.3.0 は、バグが多いようで よくクラッシュします。そのため、ここでは、OpenVPN 2.2.2 を利用します。
  1. 先のダウンロードページからOpenVPN 2.2.2 をダウンロードし、インストールします。

    Windows版では、MicroSoft の.NET Framework 3.5以上が必要なので、もし、インストールされていないようであれば、先にインストールします。
    インストール自体は、画面の指示に従ってインストールするだけなので割愛します。
    また、TAPドライバーのインストール確認のために以下のような画面表示があります。その場合は、迷わずインストールをクリックします。

    TAPネットワークアダプターインストール確認

  2. 先の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 というディレクトリを作成して そこにコピーしています。

  3. クライアント認証用のパスワードファイルを作成します。

    クライアント証明書を作成する際に入力したパスフレーズを保存したテキストファイルをパスワードファイル ( C:\openvpn\pass.cfg )として作成します。
    中身は、単純なテキストファイルでパスワードをそのまま1行目に入力したものです。以下は、ファイルの中身を出力した様子で、単純にテキストが設定されていることがわかるかと思います。

    C:\openvpn>cat pass.cfg
    password
    
    C:\openvpn>
    パスワードファイルを作成するのは、接続する度にパスワードを入力するのも大変なので自動化のために作成しています。

  4. クライアント接続用の OpenVPN Configファイルを作成します。

    クライアント接続用の OpenVPN Configファイル ( C:\openvpn\client.ovpn )を作成します。

    C:\openvpn>cat 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
    
    C:\openvpn>

  5. コマンドプロンプトからアクセスしてみましょう。

    コマンドプロンプトは、管理者権限で実行します。

    # 最初に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がとおるようになります。

    簡単な解除方法は以下のとおりです。
    1. コントロール パネル > システムとセキュリティ > Windows ファイアウォール でファイアウォール管理画面を表示します。
    2. ファイアウォール管理画面 の画面左の 詳細設定 をクリックすると以下のように セキュリティが強化されたWindowsファイアウォールが表示されます。
      ファイアウォール設定解除
      1. 画面中央のWindowsファイアウォールのプロパティをクリックします。
      2. パブリックプロファイルタブをクリックします。
      3. 保護されているネットワーク接続 カスタマイズ をクリックします。
      4. ネットワーク接続一覧 の中で TAPアダプタの名前 (ここではローカルエリア接続)のチェックを解除して、OK をクリックします。

    pingが通らなくてもほとんど影響はありませんので、確認を終えたらもとに戻しておきましょう。
    OpenVPN-GUIを使いたい場合は、以下のように実行すればOKです。
    # 最初に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-1.0.3.exe の実行ファイル名は、OpenVPNのバージョンによって異なります。

    OpenVPN-GUIを実行した場合、タスクトレイにアイコン表示されます。

    切断状態
    切断状態
    接続状態
    接続状態

    また、右クリックでメニューが表示されますので、各操作を行うことができます。
    メニュー
    Windowsログイン時に自動的にVPN接続を行うように自動化したい場合は、上記の手順をバッチファイルにして、管理者権限で実行すればOKです。
    管理者権限で実行する場合の確認画面を表示したくない場合は、(最上位の特権で実行するように)タスク登録してタスク名で実行するのが一番ポピュラーなようです。


うまく接続できたでしょうか?
VPNは、結構、はまりやすいです。
ちょっとしたPCの環境やサーバーの環境の違いでうまく接続できなかったりします。
個人的にもクライアント側では、結構はまってしまいました。個人的な備忘録も兼ねていますが、この記事が、みなさんの何かのお役に立てればうれしく思います。
ご利用のブラウザは、広告ブロック(AdBlockなど) が適用となっていませんか?
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない検索ができないことがあります。


関連記事 :

OpenVPN で不要になったクライアント証明書を無効にし、該クライアントからの接続を拒否する

今回は、OpenVPN を使って仮想LAN接続してみる の補足です。 SSL 認証 の仕組みと OpenVPN の認証の仕組み の認証方法 ...

WindowsでOpenVPNへのクライアント接続を自動化する

ここまで、以下のようにOpenVPNおよびSambaに関して記事を書いてきました。 Samba を使ってファイル共有してみる ...

apache でSSLを使ってみた(クライアント認証編)

apache でSSLを使ってみた(基本接続編) では、SSL接続の基本的な設定について解説しました。 今回は、apacheでSSL接続を行い ...

OpenVPN 上で Samba を使うための設定

以下の記事で Samba の設定、OpenVPN の設定を行ってみました。 Samba を使ってファイル共有してみる OpenVPN ...

apache でSSLを使ってみた(クライアント証明書失効編)

apache でSSLを使ってみた(クライアント認証編) では、SSL接続のクライアント証明書を使った認証までを解説しました。 今回は、先のク ...



コメントを投稿 :

お名前 *

メールアドレス *
( メールアドレスが公開されることはありません。)

サイトアドレス

コメント *

* 印の項目は、入力が必要な項目です。




最近投稿の記事

[ 画像提供元 : Amazon ] 先日、1TBのディスクの入れ替え時にバックアップをとろうとディスクコピーを行いました。 その際 ...

Windows で Linux ファイルシステム Ext4 のディスクをマウントするには? Ext3Fsd が、おそらく、最も簡単なツール ...

今回は、Windows で Compass を使ってみました。 Compass とは、 Sass(サス、Syntactica ...

今回は、Anti Adblock を使ってみました。 Anti Adblock とは、 そもそも Adblock という ウェブ ...

デスクトップ環境でない サーバーで、Webページのキャプチャー画像をコマンドで撮る には、wkhtmltoimage, CutyCapt ...


さくらのVPS 全プラン リニューアルです。(石狩(北海道)も選択可)


root権限ありで ¥685 / 月 ~ と非常にリーズナブルな CPU 1(core)の 512 プランから、 最高 CPU 10(core), メモリ 32(GB), SSD容量 800(GB) までとプランが充実。
ディスクは、SSDとHDDの選択が可能になった他、データセンターは人気の東京、石狩(北海道)となりました。

また、どのプランでも好きなOSが選べます
( CentOS, Fedora, Scientific Linux, FreeBSD, Ubutu, Debian )

管理人もおすすめのVPSです。
試用期間がありますから、一度、お試しを!!

詳しくは、http://vps.sakura.ad.jp/さくらのVPSのサイトへ へどうぞ!!

カテゴリ


Serverman@VPS 完全1ヶ月無料 キャンペーン実施中です。


Serverman@VPS 完全1ヶ月無料 キャンペーン実施中です。
最近、スワップにも対応した Serverman@VPS は、かなりリーズナブルかもです。

  • メモリ1GB~2GBのEntryプラン :月額:490円
  • メモリ2MB~4GBのStandardプラン :月額:980円
  • メモリ4GB~8GBのProプラン :月額:1,980円

新規申し込みで1ヶ月間完全無料となるキャンペーンを実施中です。
Serverman@VPSの特徴は、安さとIPv6対応です。また、初期設定費0円もポイントです。

IPv6でちょっと遊んでみたい方には、おすすめかもしれませんね。最低利用期間もありませんから、気に入らないときは即解約もできます。

Serverman@VPSの詳細については、 http://dream.jp/vps/ Serverman@VPSのサイトへへどうぞ。



KVM採用 ConoHa VPSは、時間単位で借りれる便利なVPSです。


ConoHa VPS は、初期設定費0円最低利用期間無し時間単位で清算可能、 さらに、Web APIを使って自動化を図ることもできる便利なVPSです。

海外サーバー設置も可能で、ローカル接続にも対応と、かなり、機能豊富なサーバーです。

新規ユーザ登録で、クーポンもらえますから、まずは、お試しですね。

ConoHa VPSの詳細については、
http://www.conoha.jp/ へどうぞ。

KVM採用 お名前.com VPS(KVM) 2G プラン 初期設定費無料 キャンペーン 実施です。


メモリ2GBプラン CPU:3core、Disk:200GB
月額:1,153円から (初期設定:1,680円0円)

さくらのVPSがリニューアルされてもなんのその。
1GBメモリ / 2Core を ¥834 – の格安価格で提供中です!
間違いなくスペックからすると割安感ありです。
年間割引時の途中解約で返金がないのは、 ちょっと残念ですが、それでもこの割安感は魅力です。

まずは、お試しですね。

お名前.com VPS(KVM)の詳細については、
http://www.onamae-server.com/vps/ へどうぞ。(お試し期間が15日あります。)



  • ソーシャルブックマーク

  • はてなブックマークへ追加するはてな登録数
ページトップへ
Time : 0.2934 [s]