以前紹介した記事VPC上にOpenVPN(CentOS6)をインストールにてCentOS上にOpenVPNサーバを稼働させることが出来ました。
今回は、クライアントマシン(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の設定ファイルの配置と編集

サーバ側のファイル/usr/share/doc/openvpn-2.2.2/sample-config-files/client.confをclient1.confとし、鍵は証明書を配置したのと同じディレクトリ(ユーザーのホームディレクトリのLibrary/openvpn/)に配置します。

そして、下記の部分を変更します。

...
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
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

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

pingコマンドにて確認すると、クライアント(10.8.0.6)に疎通ができているのが確認できます。

# 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

こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら