2012年9月28日金曜日

Mac(10.8)からCentOS(6.3)にOpenVPNでVPN接続

スズキです。

下記でCentOS上にOpenVPNサーバを稼働させることができたので、
VPC上にOpenVPN(CentOS6)をインストール
次は、そのサーバにクライアントマシン(Mac)からVPN接続を試してみます。


(1) [サーバ側作業] クライアントの鍵と証明書の作成準備

# cd /usr/share/doc/openvpn-2.2.2/easy-rsa/2.0/
# source ./vars 
NOTE: If you run ./clean-all, I will be doing a rm -rf on /usr/share/doc/openvpn-2.2.2/easy-rsa/2.0/key
CA(認証局)やサーバの鍵と証明書を作成した場所と同じところで作成します。


(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) [US]:
State or Province Name (full name) [CA]:
Locality Name (eg, city) [SanFrancisco]:
Organization Name (eg, company) [Fort-Funston]:
Organizational Unit Name (eg, section) [changeme]:
Common Name (eg, your name or your server's hostname) [client1]:
Name [changeme]:
Email Address [mail@host.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-2.2.2/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:'US'
stateOrProvinceName   :PRINTABLE:'CA'
localityName          :PRINTABLE:'SanFrancisco'
organizationName      :PRINTABLE:'Fort-Funston'
organizationalUnitName:PRINTABLE:'changeme'
commonName            :PRINTABLE:'client1'
name                  :PRINTABLE:'changeme'
emailAddress          :IA5STRING:'mail@host.domain'
Certificate is to be certified until Sep 25 18:24:58 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
とりあえず、デフォルト設定で作成します。

すると、下記のようにクライアントに関するファイルが追加されます。
# ls -1 keys/
01.pem
02.pem
ca.crt
ca.key
client1.crt
client1.csr
client1.key
dh1024.pem
index.txt
index.txt.attr
index.txt.attr.old
index.txt.old
serial
serial.old
server.crt
server.csr
server.key
クライアントの鍵は"client1.key"で証明書は"client1.crt"となります。


(3) [クライアント側作業] Tunnelblick(Mac用OpenVPNクライアント)のインストール

Macで利用できるOpenVPNのGUIクライアント(tunnelblick)をインストールします。

tunnelblick - OpenVPN GUI for Mac OS X - Google Project Hosting
Stable版を利用としたら、10.8(Mountain Lion)にはオススメしないとのことなので、


10.8(Mountain Lion)も対応していることになっている、下記のベータ版を利用しました。


ダウンロードしてクリックすると下記画面からインストールすることができます。



(4) [クライアント側作業] 鍵と証明書ファイルの配置

$ cd
$ cd Library/openvpn/
$ ls
ca.crt  client1.crt client1.key
サーバ側で作成したクライアントの鍵(client1.key)と証明書(client1.crt)、
そしてCA(認証局)の証明書(ca.crt)をユーザーのホームディレクトリの
"Library/openvpn/"に配置します。


(5) [クライアント側作業] OpenVPNの設定ファイルの配置と編集

サーバ側の下記のファイルを"client1.conf"として鍵は証明書を配置した同じディレクト
(ユーザーのホームディレクトリの"Library/openvpn/")に配置します。
"/usr/share/doc/openvpn-2.2.2/sample-config-files/client.conf"
そして、下記の部分を、
...
remote my-server-1 1194
...
cert client.crt
key client.key
...
次のように変更します。
...
remote 54.249.30.190 1194
...
cert client1.crt
key client1.key
...
"remote"はサーバのグローバルIPアドレス(EIP)に、クライアントの鍵と証明書は、
上記で作成・配置したもの(client1.key/client1.crt)に変更します。
$ ls
ca.crt  client1.conf client1.crt client1.key
最終的に、ユーザーのホームディレクトリの"Library/openvpn/"配下は
上記のようになります。


(6) [クライアント側作業] TunnelBlickの起動

"client1"に接続できるようになっているので、


選択することで、"client1"の設定、つまりVPC上のサーバとVPN接続することができます


$ ifconfig tun0
tun0: flags=8851 mtu 1500
 inet 10.8.0.6 --> 10.8.0.5 netmask 0xffffffff 
 open (pid 4218)
トンネルインターフェース(tun0)が"10.8.0.6"で設定されていることがわかります。

$ netstat -nr
Routing tables

Internet:
Destination     Gateway            Flags    Refs   Use  Netif  Expire
default         192.168.11.1       UGSc       30     0    en0
10.8.0.1/32     10.8.0.5           UGSc        0     0   tun0
10.8.0.5        10.8.0.6           UH          1     0   tun0
127             127.0.0.1          UCS         0     0    lo0
127.0.0.1       127.0.0.1          UH          5  7943    lo0
169.254         link#4             UCS         0     0    en0
192.168.11      link#4             UCS         3     0    en0
192.168.11.1    0:16:1:8b:a:f4     UHLWIir    31  1077    en0    1179
192.168.11.31   d0:23:db:45:5f:be  UHLWIi      0   145    en0     511
192.168.11.32   127.0.0.1          UHS         0     0    lo0
192.168.11.255  ff:ff:ff:ff:ff:ff  UHLWbI      0     5    en0
ルーティング(tun0)も設定されています。


(7) [クライアント側作業] サーバへの接続確認

$ ping 10.8.0.1
PING 10.8.0.1 (10.8.0.1): 56 data bytes
64 bytes from 10.8.0.1: icmp_seq=0 ttl=64 time=14.487 ms
64 bytes from 10.8.0.1: icmp_seq=1 ttl=64 time=12.533 ms
64 bytes from 10.8.0.1: icmp_seq=2 ttl=64 time=13.144 ms
64 bytes from 10.8.0.1: icmp_seq=3 ttl=64 time=11.017 ms
64 bytes from 10.8.0.1: icmp_seq=4 ttl=64 time=12.979 ms
サーバ(10.8.0.1)に疎通できています。


(7) [サーバ側作業] クライアントへの接続確認

# ping 10.8.0.6
PING 10.8.0.6 (10.8.0.6) 56(84) bytes of data.
64 bytes from 10.8.0.6: icmp_seq=1 ttl=64 time=58.2 ms
64 bytes from 10.8.0.6: icmp_seq=2 ttl=64 time=80.5 ms
64 bytes from 10.8.0.6: icmp_seq=3 ttl=64 time=103 ms
64 bytes from 10.8.0.6: icmp_seq=4 ttl=64 time=10.9 ms
64 bytes from 10.8.0.6: icmp_seq=5 ttl=64 time=45.8 ms
クライアント(10.8.0.6)に疎通できています。

次はVPCに踏み込んでいきます。
--------
http://www.suz-lab.com

0 コメント: