CentOS 5
Sponsored Link

OpenVPNのインストールと設定
 
OpenVPNを導入して、仮想プライベートネットワークを構築します。外部からLANへ安全に接続することが可能です。
ここでは以下のような構成を例に構築していきます。ブリッジ方式により、クライアントにVPNサーバーと同じネットワーク内のIPアドレスをVPNサーバー から割り当て、インターネット上を仮想プライベートネットワークを介して、通信を可能にするというものです。 (サーバー側のグローバルIPアドレスには説明の都合上、プライベートのものを使用していますが、適宜自分の環境に置き換えてください)
(1) VPNサーバー     [172.16.2.1]     - グローバルIPアドレス
                          [10.0.0.50]     - eth0(元々のIPアドレス)
                          [10.0.0.60]     - br0 - ブリッジ用として新たに設定
(2) VPNクライアント(Windows)     [192.168.0.244]     - 元々のIPアドレス
                          [10.0.0.??]     - VPNサーバーより自動割り当て
なお、インターネットを介した通信のため、ルーターにNAT/ポートフォワードの設定をする必要があります。 VPNサーバー側の待ち受けポートとプロトコルはデフォルトのものを使用するため、UDP の 1194番です。 上記の例でいうと、インターネット側から 172.16.2.1 の 1194番宛てにきた UDP を 10.0.0.60 の 1194番へ転送する 設定をする必要があります。
[1] OpenVPNのインストールと設定
[root@vpn ~]#
yum --enablerepo=epel -y install openvpn bridge-utils
 
# EPELからインストール
[root@vpn ~]#
cp /usr/share/doc/openvpn-*/sample-config-files/server.conf /etc/openvpn/

[root@vpn ~]#
vi /etc/openvpn/server.conf
# 53行目:変更

dev
tap0
# 78行目:以下3行変更

ca
/etc/openvpn/easy-rsa/keys/ca.crt

cert
/etc/openvpn/easy-rsa/keys/server.crt

key
/etc/openvpn/easy-rsa/keys/server.key
# 87行目:変更

dh
/etc/openvpn/easy-rsa/keys/dh1024.pem
# 96行目:コメントにする

#
server 10.8.0.0 255.255.255.0
# 103行目:コメントにする

#
ifconfig-pool-persist ipp.txt
# 115行目:コメント解除して変更 ( [VPNサーバのIP] [マスク] [クライアントに割り当てるIPの範囲] )

server-bridge
10.0.0.60 255.255.255.0 10.0.0.200 10.0.0.254
# 138行目:追記 ( [VPNサーバのネットワーク] [マスク] )

push "route 10.0.0.0 255.255.255.0"
# 275行目:変更

status
/var/log/openvpn-status.log
# 284行目:以下2行コメント解除し変更

log
/var/log/openvpn.log

log-append
/var/log/openvpn.log
[2] CA証明書とCA秘密鍵を作成します。
[root@vpn ~]#
cp -R /usr/share/openvpn/easy-rsa/2.0 /etc/openvpn/easy-rsa

[root@vpn ~]#
cd /etc/openvpn/easy-rsa

[root@vpn easy-rsa]#
mkdir keys

[root@vpn easy-rsa]#
vi vars
# 64行目:以下5行、自身の環境に合わせて変更

export KEY_COUNTRY="
JP
"
export KEY_PROVINCE="
Hiroshima
"
export KEY_CITY="
Hiroshima
"
export KEY_ORG="
GTS
"
export KEY_EMAIL="
xxx@srv.world
"
[root@vpn easy-rsa]#
source ./vars

NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys
[root@vpn easy-rsa]#
./clean-all

[root@vpn 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]:    
# Enter

State or Province Name (full name) [Hiroshima]:    
# Enter

Locality Name (eg, city) [Hiroshima]:    
# Enter

Organization Name (eg, company) [GTS]:    
# Enter

Organizational Unit Name (eg, section) []:    
# Enter

Common Name (eg, your name or your server's hostname) [GTS CA]:
vpn.srv.world
 
# FQDN入力

Name []:
server-ca
 
# 適当に入力

Email Address [xxx@srv.world]:    
# Enter
[3]
[2]の操作により、/etc/openvpn/easy-rsa/keys/ 配下に「
ca.crt
」というファイルが作成されているので、 それをクライアントPCにFTPなりSFTPなりでもってきておきます。
[4] サーバー証明書とサーバー秘密鍵を作成します。
[root@vpn 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]:    
# Enter

State or Province Name (full name) [Hiroshima]:    
# Enter

Locality Name (eg, city) [Hiroshima]:    
# Enter

Organization Name (eg, company) [GTS]:    
# Enter

Organizational Unit Name (eg, section) []:    
# Enter

Common Name (eg, your name or your server's hostname) [server]:
vpn.srv.world
 
# FQDN入力

Name []:
server
 
# 適当に入力

Email Address [xxx@srv.world]:    
# Enter
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/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:'Hiroshima'

localityName
:PRINTABLE:'Hiroshima'

organizationName
:PRINTABLE:'GTS'

commonName
:PRINTABLE:'vpn.srv.world'

name
:PRINTABLE:'server'

emailAddress
:IA5STRING:'xxx@srv.world'

Certificate is to be certified until May 17 20:20:18 2021 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
[5] Diffie Hellman ( DH ) パラメータを生成します。
[root@vpn easy-rsa]#
./build-dh

Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
[6] クライアント用の証明書と秘密鍵を作成します。
[root@vpn easy-rsa]#
./build-key-pass client

Generating a 1024 bit RSA private key
..................++++++
..................++++++
writing new private key to 'client.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]:    
# Enter

State or Province Name (full name) [Hiroshima]:    
# Enter

Locality Name (eg, city) [Hiroshima]:    
# Enter

Organization Name (eg, company) [GTS]:    
# Enter

Organizational Unit Name (eg, section) []:    
# Enter

Common Name (eg, your name or your server's hostname) [client]:
vpn.srv.world
 
# FQDN入力

Name []:
client
   
# 適当に入力

Email Address [xxx@srv.world]:    
# Enter
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/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:'Hiroshima'

localityName
:PRINTABLE:'Hiroshima'

organizationName
:PRINTABLE:'GTS'

commonName
:PRINTABLE:'vpn.srv.world'

name
:PRINTABLE:'client'

emailAddress
:IA5STRING:'xxx@srv.world'

Certificate is to be certified until May 17 20:33:28 2021 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
[7]
[6]の操作により、/etc/openvpn/easy-rsa/keys/ 配下に「
client.crt
」と 「
client.key
」いう二つのファイルが作成されているので、 それをクライアントPCにFTPなりSFTPなりでもってきておきます。
[8] VPNサーバーのブリッジの設定と起動スクリプトの作成をし、OpenVPNを起動します。
[root@vpn ~]#
cp /usr/share/doc/openvpn-*/sample-scripts/bridge-stop /etc/openvpn/

[root@vpn ~]#
cp /usr/share/doc/openvpn-*/sample-scripts/bridge-start /etc/openvpn/

[root@vpn ~]#
chmod 755 /etc/openvpn/bridge-start

[root@vpn ~]#
chmod 755 /etc/openvpn/bridge-stop

[root@vpn ~]#
vi /etc/openvpn/bridge-start
# 17-20行目:変更

eth="eth0"    
# 必要があれば変更

eth_ip="
10.0.0.60
"    
# ブリッジに使用するIP

eth_netmask="
255.255.255.0
"    
# サブネットマスク

eth_broadcast="
10.0.0.255
"    
# ブロードキャストアドレス
[root@vpn ~]#
vi /etc/rc.d/init.d/openvpn
  start)
   echo -n $"Starting openvpn: "
  
# 126行目:追記

  
/etc/openvpn/bridge-start
  
# 205行目:追記

  
/etc/openvpn/bridge-stop

   success; echo
   rm -f $lock
[root@vpn ~]#
/etc/rc.d/init.d/openvpn start

Starting openvpn: tun: Universal TUN/TAP device driver, 1.6
tun: (C) 1999-2004 Max Krasnyansky <maxk@qualcomm.com>
Mon May 30 22:48:15 2011 TUN/TAP device tap0 opened
Mon May 30 22:48:15 2011 Persist state set to: ON
Bridge firewalling registered
device eth1 entered promiscuous mode
device tap0 entered promiscuous mode
br0: port 2(tap0) entering learning state
br0: port 1(eth1) entering learning state
[ OK ]
[root@vpn ~]#
chkconfig openvpn on
 
Tweet