2012年9月28日金曜日

VPC上にOpenVPN(CentOS6)をインストール

スズキです。

OpenVPNは、たまに構築する機会があるのですが、頻度が少なすぎるため
前回の作業を全く忘れてしまい、いつも調べ直しているので、効率化のために
いったんブログにまとめておくことにしました。

(1) インストールと準備


# yum -y install openvpn
...
# cd /usr/share/doc/openvpn-2.2.2/easy-rsa/2.0/
# ln -s openssl-1.0.0.cnf openssl.cnf 
# ls -1 | grep -v "\.cnf" | grep -v Makefile | grep -v README | grep -v keys | xargs chmod a+x
# 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/keys
# ./clean-all
ポイントは"source vars"をエラーなく実行するために、openssl.confのシンボリックと、
各種スクリプトに実行権限を付与しているところです。

(2) CA(認証局)の鍵と証明書を作成


# ./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) [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) [changeme]:
Name [changeme]:
Email Address [mail@host.domain]:
とりあえず、デフォルト設定のまま進めています。

すると下記のようなファイルが作成されます。
# ls -1 keys/
ca.crt
ca.key
index.txt
serial
鍵は"ca.key"で証明書は"ca.crt"です。

(3) サーバの鍵と証明書を作成


# ./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) [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) [server]:
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:'server'
name                  :PRINTABLE:'changeme'
emailAddress          :IA5STRING:'mail@host.domain'
Certificate is to be certified until Sep 25 16:47:52 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
ca.crt
ca.key
index.txt
index.txt.attr
index.txt.old
serial
serial.old
server.crt
server.csr
server.key
鍵は"server.key"で証明書は"server.crt"となります。

(4) Diffie-Hellmanパラメータの作成


# ./build-dh
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
.................................................................+....+..................++*++*++*

"dh1024.pem"が作成されます。
# ls -1 keys/
01.pem
ca.crt
ca.key
dh1024.pem
index.txt
index.txt.attr
index.txt.old
serial
serial.old
server.crt
server.csr
server.key

(5) 設定ファイルの配置

# cp keys/ca.crt keys/server.crt keys/server.key keys/dh1024.pem /etc/openvpn/
上記で作成した鍵や証明書などを配置します。

# cp /usr/share/doc/openvpn-2.2.2/sample-config-files/server.conf /etc/openvpn/
OpenVPN自体の設定ファイルもコピーします。

(6) OpenVPNの起動

# /etc/init.d/openvpn start
openvpn を起動中:                                          [  OK  ]
起動スクリプトが用意されています。

# ifconfig tun0
tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:10.8.0.1  P-t-P:10.8.0.2  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)   
トンネルインターフェース(tun0)が"10.8.0.1"で設定されていることがわかります。

# netstat -nr
Kernel IP routing table
Destination  Gateway   Genmask          Flags  MSS  Window  irtt  Iface
10.8.0.2     0.0.0.0   255.255.255.255  UH       0  0          0  tun0
10.0.0.0     0.0.0.0   255.255.255.0    U        0  0          0  eth0
10.8.0.0     10.8.0.2  255.255.255.0    UG       0  0          0  tun0
169.254.0.0  0.0.0.0   255.255.0.0      U        0  0          0  eth0
0.0.0.0      10.0.0.1  0.0.0.0          UG       0  0          0  eth0
ルーティング(10.8.0.0/24 → tun0)も設定されています。

# netstat -ulnp | grep openvpn
udp    0    0 0.0.0.0:1194    0.0.0.0:*    10487/openvpn
ポート(UDP 1194)もリッスンしています。

(7) UDPの1194ポートをセキュリティグループで許可



AWSコンソールから設定します。当然、このEC2がインターネットアクセスできる
必要があるため、EIPの付与と、所属するサブネットの0.0.0.0/0へのルーティングが、
インターネットゲートウェイに向いている必要があります。

次はクライアント(Mac)からVPN接続してみます。
--------
http://www.suz-lab.com

0 コメント: