OpenvpnでVPN回線を作る



OpenVPNでVPN回線を作る方法をまとめます。分かりにくいものが多いのでなるべくわかりやすく説明します。
openvpn,openssl,tun/tapインターフェースなどはインストールされているものとします。インストール方法は各自調べてください。下記例はさくらVPN, debian2.6.26-2-686/OpenVPN 2.1_rc11での例です。

1 OpenVPN設定の概念

OpenVPNの概念はサーバ、各クライアントそれぞれにsslの証明書が必要になります。クライアントの証明書に対して1回線が付与されるという仕組みと考えると分かりやすいです。下記例は1サーバに対して3つのクライアントを設けるという構成です。

[ ] 内は接続に必要になるファイルです。

Server ← ssl 証明書 server
[ ca.crt, server.crt, server.key, dh1024.pem ]
client1 ← ssl 証明書 client1
[ ca.crt, client1.crt, client1.key ]
client2 ← ssl 証明書 client2
[ ca.crt, client2.crt, client2.key ]
client3 ← ssl 証明書 client3
[ ca.crt, client3.crt, client3.key ]

まとめると必要ファイルは

ca.crt, server.crt, server.key, dh1024.pem,

clientN.crt, clientN.key (この2ファイルはクライアントの分だけ必要)
サーバ、全クライアントにca.crtが必要になります。

2 必要ファイル生成

/usr/share/doc/openvpn/examples/easy-rsa/2.0を利用して
必要ファイルを生成します。ファイル作成の流れは

1 varsの編集
2 varsを読み込ませる
3 clear-allで初期化
4 build-dhでdh1024.pem生成
5 build-caでca作成
6 build-key-server serverでサーバ用のファイル作成
7 built-key clientNでクライアント用のファイル作成

まず、sslの設定情報などが記入されているvarsファイルを編集します

$su
#cd /usr/share/doc/openvpn/examples/easy-rsa/2.0
#vim vars

編集箇所は最下部の

export KEY_COUNTRY="JP"
export KEY_PROVINCE="Tokyo"
export KEY_CITY="Ootaku"
export KEY_ORG="mygroup"
export KEY_EMAIL="yourname@yourdomain.domain"

編集後に

$su
#cd /usr/share/doc/openvpn/examples/easy-rsa/2.0
# source ./vars
# ./clean-all
# ./build-dh
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
.....+.............................+...............++*++*++*

続いて

# ./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]:JP
State or Province Name (full name) [Tokyo]:
Locality Name (eg, city) [Ootaku]:
Organization Name (eg, company) [mygroup]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) [mygroup CA]:
Email Address [yourname@yourdomain.domain]:

エンターだけで通ると思います。

# ./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) [Ootaku]:
Organization Name (eg, company) [mygroup]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) [server]:
Email Address [yourname@yourdomain.domain]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /usr/share/doc/openvpn/examples/easy-rsa/2.0/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:'Ootaku'
organizationName      :PRINTABLE:'mygroup'
commonName            :PRINTABLE:'server'
emailAddress          :IA5STRING:'yourname@yourdomain.domain'
Certificate is to be certified until Sep 20 15:57:11 2020 GMT (3650 days)

この2箇所だけyを入力してください。

Sign the certificate? [y/n]

1 out of 1 certificate requests certified, commit? [y/n]

ユーザ用の証明書を作成します。client2と言うのは個別名です。好きな名前で大丈夫です。このユーザ一人ひとりに対してIPアドレスが発行されるようになり、証明書一つに対して一つのVPNコネクションのみとなります。同じ証明書を使って2台同時に接続しようとすると片方の回線が切断されます。

# ./build-key client1
Generating a 1024 bit RSA private key
..........++++++
.....................++++++
writing new private key to 'client1.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) [Ootaku]:
Organization Name (eg, company) [mygroup]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) [client1]:
Email Address [yourname@yourdomain.domain]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /usr/share/doc/openvpn/examples/easy-rsa/2.0/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:'Ootaku'
organizationName      :PRINTABLE:'mygroup'
commonName            :PRINTABLE:'client1'
emailAddress          :IA5STRING:'yourname@yourdomain.domain'
Certificate is to be certified until Sep 20 15:59:15 2020 GMT (3650 days)

ここも同様に2箇所だけyを入力してください。

Sign the certificate? [y/n]
1 out of 1 certificate requests certified, commit? [y/n]
#ls /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys

必要以上のものもあるとは思いますが必要ファイルすべてが揃っていると思います。

ca.crt, server.crt, server.key, dh1024.pem, client1.crt, client1.key
3 OpenVPNサーバの設定

VPN回線のネットワークはCクラス 192.168.100.0/24 ネットワークを利用します。
サーバに

ca.crt, server.crt, server.key, dh1024.pem

をコピー、またはアップロードします。場所は

/etc/openvpn/keys
にアップロードすると好ましいです。

サーバの設定ファイルに書き足します。

#vim /etc/openvpn/server.conf

ここでは設定ファイル(server.conf)はなるべく最小構成で書いておきます。

excerpt: /etc/openvpn/server.conf

dev tun
proto tcp-server
server 192.168.100.0 255.255.255.0
client-to-client

client-config-dir /etc/openvpn/ccd
status /var/log/openvpn-status.log
log /var/log/openvpn.log
log-append /var/log/openvpn.log

keepalive 10 120
ifconfig-pool-persist /etc/openvpn/ipp.txt

ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key
dh /etc/openvpn/keys/dh1024.pem

サーバを起動します。

/etc/init.d/openvpn start
4 OpenVPNクライアントの設定

クライアントに

ca.crt, client1.crt, client1.key

の3ファイルをコピーします。(ca.crtはサーバと同一です)

/etc/openvpn/keys
にアップロードすると好ましいです。

クライアントの設定を記述します。

#vim /etc/openvpn/client.conf
/etc/openvpn/client.conf

remote  サーバーのホスト名/IPアドレス
proto tcp
dev tun
client

persist-key
persist-tun

ca /opt/local/openvpn/keys/ca.crt
cert /opt/local/openvpn/keys/client1.crt
key /opt/local/openvpn/keys/client1.key

クライアントを起動します。

/etc/init.d/openvpn start

pingがサーバに通るかテストしてみます。

#ping 192.168.100.1
PING 192.168.100.1 (192.168.20.1) 56(84) bytes of data.
64 bytes from 192.168.100.1: icmp_seq=1 ttl=64 time=0.054 ms
64 bytes from 192.168.100.1: icmp_seq=2 ttl=64 time=0.046 ms
64 bytes from 192.168.100.1: icmp_seq=3 ttl=64 time=0.063 ms

無事pingが通ればVPN回線が開通です。

同じように証明書を変えてclient2, clent3を足していけば複数回線を引くことができます。

Mac GUI クライアントtunnelblick

MacOSクライアントはtunnelblickを使います。
これ以外にもいろいろな方法ありますが。
http://code.google.com/p/tunnelblick/
tunnelblickでは設定ファイルを2つ以上設けると複数回線を簡単に引くことができます。

Windows GUI クライアント OpenVPN GUI

windowsでもGUIを使ってOpenVPN回線を利用できます。
http://openvpn.se/
を参照してください。

MacのTunnelblickのtblkファイルに関して

新しいtunnelblickではtblkというファイル(実際はフォルダ)を使って設定を管理します。tblkはフォルダに

・xxxx.conf (設定ファイル)
・ca.crt
・client.crt (個別の証明書)
・client1.key

4つのファイルをフォルダにまとめ、拡張子をtblkにします。設定ファイルの証明書のパスは省いて入力します。要は証明書のファイル名だけでOKです。

remote  サーバーのホスト名/IPアドレス
proto tcp
dev tun
client

persist-key
persist-tun

ca ca.crt
cert client1.crt
key client1.key

という感じです。

設定ファイルのテクニック

OpenVPNサーバ上の /etc/openvpn/ccd
の中にクライアントの証明書と同じ名前のファイルを作成し

/etc/openvpn/ccd/client1
ifconfig-push 192.168.100.29 192.168.100.30

などとするとclient1に対して特定のIPを割り振ることができます。ccdファイルのフォーマットは ifconfig-push 192.168.100.29(IPアドレス) 192.168.100.30(ゲートウェイ)として設定します。この2つのIPの組み合わせがopenVPNではすでに定められています。

[ 1, 2] [ 5, 6] [ 9, 10] [ 13, 14] [ 17, 18]
[ 21, 22] [ 25, 26] [ 29, 30] [ 33, 34] [ 37, 38]
[ 41, 42] [ 45, 46] [ 49, 50] [ 53, 54] [ 57, 58]
[ 61, 62] [ 65, 66] [ 69, 70] [ 73, 74] [ 77, 78]
[ 81, 82] [ 85, 86] [ 89, 90] [ 93, 94] [ 97, 98]
[101,102] [105,106] [109,110] [113,114] [117,118]
[121,122] [125,126] [129,130] [133,134] [137,138]
[141,142] [145,146] [149,150] [153,154] [157,158]
[161,162] [165,166] [169,170] [173,174] [177,178]
[181,182] [185,186] [189,190] [193,194] [197,198]
[201,202] [205,206] [209,210] [213,214] [217,218]
[221,222] [225,226] [229,230] [233,234] [237,238]
[241,242] [245,246] [249,250] [253,254]

のパターンでccdファイルを記入します。

例)
ifconfig-push 192.168.100.1 192.168.100.2
ifconfig-push 192.168.100.129 192.168.100.130
ifconfig-push 192.168.100.237 192.168.100.238
今後の運用のために

今後の運用のためにVPNサーバでkeysのディレクトリを/etc/openvpn/keysなどに保存しておきましょう。こうしておくことで後々にkeyを増やさないといけないときに役立ちます。

# mkdir /etc/openvpn/keys
# cp /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/* /etc/openvpn/keys

運用後にopenvpnのキーを増やす方法

今後の運用のためにでコピーしたkeysディレクトリの内容を一度元に戻します。その後、build-keyを実行します。

# cp -r /etc/openvpn/keys /usr/share/doc/openvpn/examples/easy-rsa/2.0
# cd /usr/share/doc/openvpn/examples/easy-rsa/2.0
# ./build-key newkeyname

keyが出来上がればあとは上記の手順(必要ファイル生成)から再度繰り返せばよいだけになります。

参考
http://www.openvpn.net/index.php/open-source/documentation/howto.html

  • このエントリーをはてなブックマークに追加

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です