VPNサーバー(OpenVPN)の設定



##############################################################################
● VPNサーバー(OpenVPN)の設定

1) OpenVPN がインストールされていない場合はインストールする

root@www:~# dpkg -l openvpn
要望=(U)不明/(I)インストール/(R)削除/(P)完全削除/(H)保持
| 状態=(N)無/(I)インストール済/(C)設定/(U)展開/(F)設定失敗/(H)半インストール/(W)トリガ待ち/(T)トリガ保留
|/ エラー?=(空欄)無/(R)要再インストール (状態,エラーの大文字=異常)
||/ 名前           バージョン   アーキテクチ 説明
+++-==============-============-============-=================================
ii  openvpn        2.3.4-5      amd64        virtual private network daemon

インストールされていない場合はインストール
root@www:~# aptitude install openvpn		<--- インストールする

2) 新しい OpenVPN には easy-rsa が含まれていないので、別途インストールする

root@www:~# dpkg -l easy-rsa
要望=(U)不明/(I)インストール/(R)削除/(P)完全削除/(H)保持
| 状態=(N)無/(I)インストール済/(C)設定/(U)展開/(F)設定失敗/(H)半インストール/(W)トリガ待ち/(T)トリガ保留
|/ エラー?=(空欄)無/(R)要再インストール (状態,エラーの大文字=異常)
||/ 名前           バージョン   アーキテクチ 説明
+++-==============-============-============-=================================
ii  easy-rsa       2.2.2-1      all          Simple shell based CA utility

入っていない場合はインストールする
root@www:~# aptitude install easy-rsa		<--- インストールする

3) ブリッジユーティリティがインストールされていない場合はインストールする

root@www:~# dpkg -l bridge-utils
要望=(U)不明/(I)インストール/(R)削除/(P)完全削除/(H)保持
| 状態=(N)無/(I)インストール済/(C)設定/(U)展開/(F)設定失敗/(H)半インストール/(W)トリガ待ち/(T)トリガ保留
|/ エラー?=(空欄)無/(R)要再インストール (状態,エラーの大文字=異常)
||/ 名前           バージョン   アーキテクチ 説明
+++-==============-============-============-=================================
ii  bridge-utils   1.5-9        amd64        Utilities for configuring the Lin

インストールされていない場合はインストール
root@www:~# aptitude install bridge-utils

4) 設定ファイル、証明書/鍵保存用ディレクトリをコピーする

root@www:~# cp -r /usr/share/easy-rsa /etc/openvpn/easy-rsa

root@www:~# gunzip -c /usr/share/doc/openvpn/exsamples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf

(既存システムがあるなら、設定ファイルはコピーして使用する)

	設定例は以下の条件の場合


	OpenVPNサーバーのポートが 1194
	プロトコルは TCP を使用
	接続方式はブリッジ接続
	OpeVPNサーバーのIPアドレスが 192.168.0.2
	クライアントへのIPアドレス割り当て範囲が 192.168.0.221 - 192.168.0.230
	OpnVPNサーバーがsamba サーバー(WINSサポート)も兼ねている

root@www:~# cd /etc/openvpn

root@www:/etc/openvpn# vi server.conf

;local a.b.c.d
local 192.168.1.2
	:
	:
	:
port 1194
	:
	:
proto tcp
;proto udp
	:
	:
;dev tap
;dev tun
dev tap0
	:
	:
;ca ca.crt
;cert server.crt
;key server.key  # This file should be kept secret
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/server.crt
key /etc/openvpn/easy-rsa/keys/server.key  # This file should be kept secret
	:
	:
;dh dh1024.pem
dh /etc/openvpn/easy-rsa/keys/dh2048.pem
	:
	:
;server 10.8.0.0 255.255.255.0
	:
	:
ifconfig-pool-persist ipp.txt
	:
	:
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100
server-bridge 192.168.1.2 255.255.255.0 192.168.1.221 192.168.1.230
	:
	:
push "route 192.168.1.0 255.255.255.0"
	:
	:
;push "dhcp-option DNS 192.168.1.2"
push "dhcp-option WINS 192.168.1.2"
	:
	:
keepalive 10 120
	:
	:
comp-lzo
	:
	:
;user nobody
;group nobody
user nobody
group nobody
	:
	:
persist-key
persist-tun
	:
	:
status /var/log/openvpn-status.log
	:
	:
;log-append  openvpn.log
log-append  /var/log/openvpn.log
	:
	:
verb 3
	:
	:

5) 証明書/鍵を作成する際の環境変数設定用スクリプトを編集

root@www:/etc/openvpn# cd /etc/openvpn/easy-rsa
root@www:/etc/openvpn/easy-rsa# vi vars

export KEY_COUNTRY="JP"				<-- サーバー所在地(国名)を指定
export KEY_PROVINCE="Kanagawa"		<-- サーバー所在地(都道府県名)を指定
export KEY_CITY="Yokohama-city"		<-- サーバー所在地(市区町村名)を指定
export KEY_ORG="gusuku.org"			<--組織名を指定
export KEY_EMAIL="root@gusuku.org"	<-- サーバー管理者メールアドレスを指定
export KEY_EMAIL=root@gusuku.org	<-- サーバー管理者メールアドレスを指定
export KEY_NAME="www.gusuku.org"	<-- 変更
export KEY_OU=""					<-- 変更
export PKCS11_MODULE_PATH=			<-- 変更

#export PKCS11_PIN=1234
#export KEY_CN="CommonName"


6) 環境変数をセットして認証局の証明書を作成

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

root@www:/etc/openvpn/easy-rsa# ./clean-all
root@www:/etc/openvpn/easy-rsa# ./build-ca
Generating a 2048 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) [Kanagawa]:		<-- Enter
Locality Name (eg, city) [Yokohama]:				<-- Enter
Organization Name (eg, company) [GUSUKU]:			<-- Enter
Organizational Unit Name (eg, section) []:			<-- Enter
Common Name (eg, your name or your server's hostname) [GUSUKU CA]:	<-- Enter
Name [www.gusuku.org]:									<-- Enter
Email Address [root@gusuku.org]:					<-- Enter


7) サーバー証明書を作成

root@www:/etc/openvpn/easy-rsa# ./build-key-server server
Generating a 2048 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) [Kanagawa]:		<-- Enter
Locality Name (eg, city) [Yokohama]:				<-- Enter
Organization Name (eg, company) [GUSUKU]:			<-- Enter
Organizational Unit Name (eg, section) []:			<-- Enter
Common Name (eg, your name or your server's hostname) [server]:www.gusuku.org
Name [server]:										<-- Enter
Email Address [root@gusuku.org]:					<-- Enter

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:							<-- Enter
An optional company name []:						<-- Enter
Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'JP'
stateOrProvinceName   :PRINTABLE:'Kanagawa'
localityName          :PRINTABLE:'Yokohama'
organizationName      :PRINTABLE:'GUSUKU'
commonName            :PRINTABLE:'www.gusuku.org'
name                  :PRINTABLE:'www.gusuku.org'
emailAddress          :IA5STRING:'root@gusuku.org'
Certificate is to be certified until Sep 21 16:04:42 2025 GMT (3650 days)
Sign the certificate? [y/n]:y								<-- y+Enter


1 out of 1 certificate requests certified, commit? [y/n]y	<-- y+Enter
Write out database with 1 new entries
Data Base Updated


8) DHパラメータを作成

root@www:/etc/openvpn/easy-rsa# ./build-dh
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
........................................................................+......................+..............................................+.......................+.................................+........................................................................................................................................................................................+................................................+...........+............................................................................................................+.................+.........+....................+...+................+....................................................................................................+................+.........................................................+..................................+............+.................................................................+..................................................................................+......................................................................................+........+.............................+...........+.....................................+................................................................+..............................................+..........+..................+.........................................+.......+..........+....+............................+.................+.....................+........................................+....................................................................................................................................................+.....................................+...................................+.......................+..............................+..........+.....+..........................................................................................+.................................................+.......+...+................+................+........................................................................................................+................................................................................................................................................................+....................................................................................+...........................................................................+...........................+......................................+..................+...........................+..........+...................................................+..............................................+............................................+.+......+............................................................................................................+....+............+.......................+......................+...............+..+...............................+................................+.....................+...................................................................................................................................+...+............................+.......................+............................+.................................................+.........................................................................................................................................................................+.........+.................................+..........................................................+............+............................................+........+............................................................................................................................+..+.............+..............................................................................................................+........................................++*++*++*


9) サーバー移行の場合は元のサーバーからキーをコピーする

root@www:/etc/openvpn/easy-rsa# cd /etc/openvpn/easy-rsa

念のために元にキーを保存
root@www:/etc/openvpn/easy-rsa# mv keys keys.org

root@www:/etc/openvpn/easy-rsa# scp -rp old_host:/etc/openvpn/easy-rsa/keys .


10) ブリッジ接続のために /etc/network/interfaces を編集

root@www:~# vi /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

#auto lo eth0				<-- eth0 の記述を削除
auto lo br0					<-- br0 の記述を追加
allow-hotplug eth0			<-- eth0 は動的に有効にする

# The loopback network interface
iface lo inet loopback

#iface eth0 inet static			<-- eth0 の記述を削除
#   address     192.168.1.2
#   network     192.168.1.0
#   netmask     255.255.255.0
#   broadcast   192.168.1.255
#   gateway     192.168.1.1
#   dns-nameservers 192.168.1.2,192.168.1.1

iface br0 inet static			<-- br0 の記述を追加
    address     192.168.1.2
    network     192.168.1.0
    netmask     255.255.255.0
    broadcast   192.168.1.255
    gateway     192.168.1.1
    bridge_ports    eth0 tap0
    pre-up openvpn --mktun --dev tap0
    gateway         192.168.1.1
    dns-nameservers 192.168.1.2,192.168.1.1


11) tap0 インターフェイスとTCPのポート1194への接続許可の設定

root@www:~# vi /etc/sysconfig/iptables

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:MyFirewall - [0:0]
-A INPUT -j MyFirewall
-A FORWARD -j MyFirewall
-A MyFirewall -m state --state ESTABLISHED,RELATED -j ACCEPT
-A MyFirewall -p icmp -j ACCEPT
-A MyFirewall -i lo -j ACCEPT
-A MyFirewall -i tap+ -j ACCEPT			<---追加
-A MyFirewall -s 192.168.0.0/24 -j ACCEPT
-A MyFirewall -m udp -p udp --dport 53 -j ACCEPT
-A MyFirewall -m udp -p udp --dport 123 -j ACCEPT
-A MyFirewall -m state --state NEW -m tcp -p tcp --dport 20 -j ACCEPT
-A MyFirewall -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A MyFirewall -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A MyFirewall -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT
-A MyFirewall -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A MyFirewall -m state --state NEW -m tcp -p tcp --dport 113 -j ACCEPT
-A MyFirewall -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
-A MyFirewall -m state --state NEW -m tcp -p tcp --dport 1194 -j ACCEPT	<---追加
-A MyFirewall -m state --state NEW -m tcp -p tcp --dport 8090 -j ACCEPT
-A MyFirewall -j REJECT --reject-with icmp-host-prohibited
COMMIT


12) 必要ならルーターのポートマッピングを設定する

    外部からの TCP 1194 ポートへの接続は VPNサーバーに転送するように設定

13) ブート時にサーバーを起動する設定を行う

root@www:~# update-rc.d openvpn defaults

14) サーバーを起動する

root@www:~# service openvpn start


##############################################################################
●OpenVPN 各ユーザーの使用手順

(1)OpenVPNサーバーマシンでの作業

1) OpenVPN サーバー(192.168.1.2)に telnet 等でログインして
   スーパーユーザーになる


2) カレント・ディレクトリを /etc/openvpn/easy-rsa に移動する

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


3) 証明書/鍵を作成する際の環境変数設定用スクリプトを実行する

[root@localhost easy-rsa]# source ./vars	<--- 環境変数設定
NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys


4) クライアント証明書作成
	クライアント証明書は各クライアント(ユーザー)の分を作成する
	ここでは user1 の分を作成

[root@localhost easy-rsa]# ./build-key-pass user1
Generating a 1024 bit RSA private key
....................................................++++++
...................................++++++
writing new private key to 'user1.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]:								<--- 
State or Province Name (full name) [Kanagawa]:					<--- 
Locality Name (eg, city) [Yokohama]:							<--- 
Organization Name (eg, company) [gusuku.org]:					<--- 
Organizational Unit Name (eg, section) []:						<--- 
Common Name (eg, your name or your server's hostname) [user1]:	<--- 
Email Address [root@gusuku.org]:								<--- 

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/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'JP'
stateOrProvinceName   :PRINTABLE:'Kanagawa'
localityName          :PRINTABLE:'Yokohama'
organizationName      :PRINTABLE:'gusuku.org'
commonName            :PRINTABLE:'user1'
emailAddress          :IA5STRING:'root@gusuku.org'
Certificate is to be certified until Sep 19 16:16:48 2018 GMT (3650 days)
Sign the certificate? [y/n]:y									<--- y 


1 out of 1 certificate requests certified, commit? [y/n]y		<--- y 
Write out database with 1 new entries
Data Base Updated


5) 出来あがったクライアント証明書と鍵(以下の3つのファイル)をリムーバブル
   メディア(USBメモリ等)でクライアントマシンに持って行く

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

---サーバーマシンでの作業はここまで---

(2)クライアントマシンでの作業(Windowsの場合)

1) OpenVPN をインストールする

	http://openvpn.se/ から OpenVPN GUI for Windows をダウンロードする

	2008/09/22 時点の安定版は以下のURL
	http://openvpn.se/files/install_packages/openvpn-2.0.9-gui-1.0.3-install.exe

	openvpn-2.0.9-gui-1.0.3-install.exe を実行

	質問に答えていくとインストールが完了する

2) クライアント証明書と鍵を C:\Program Files\OpenVPN\config 以下にコピーする

	例:

	C:\Program Files\OpenVPN\config\target_server に以下のファイルをコピーする

	C:\Program Fuiles\OpenVPN\config> mkdie target_server
	C:\Program Fuiles\OpenVPN\config> copy A:\ca.crt target_server
	C:\Program Fuiles\OpenVPN\config> copy A:\user1.crt target_server
	C:\Program Fuiles\OpenVPN\config> copy A:\user1.key target_server

3) クライアント用の設定ファイルを作成する

  target_server への接続用の target_server.ovpn ファイルを以下に示す

---ここから-------------------------------------------------------------------
##############################################
# Sample client-side OpenVPN 2.0 config file #
# for connecting to multi-client server.     #
#                                            #
# This configuration can be used by multiple #
# clients, however each client should have   #
# its own cert and key files.                #
#                                            #
# On Windows, you might want to rename this  #
# file so it has a .ovpn extension           #
##############################################

# Specify that we are a client and that we
# will be pulling certain config file directives
# from the server.
client

# Use the same setting as you are using on
# the server.
# On most systems, the VPN will not function
# unless you partially or fully disable
# the firewall for the TUN/TAP interface.
dev tap
;dev tun

# Windows needs the TAP-Win32 adapter name
# from the Network Connections panel
# if you have more than one.  On XP SP2,
# you may need to disable the firewall
# for the TAP adapter.
;dev-node MyTap

# Are we connecting to a TCP or
# UDP server?  Use the same setting as
# on the server.
proto tcp
;proto udp

# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
;remote my-server-1 1194
remote www.gusuku.org 1194				 <--- VPNサーバーのホスト名とポート番号

# Choose a random host from the remote
# list for load-balancing.  Otherwise
# try hosts in the order specified.
;remote-random

# Keep trying indefinitely to resolve the
# host name of the OpenVPN server.  Very useful
# on machines which are not permanently connected
# to the internet such as laptops.
resolv-retry infinite

# Most clients don't need to bind to
# a specific local port number.
nobind

# Downgrade privileges after initialization (non-Windows only)
user nobody
group nobody

# Try to preserve some state across restarts.
persist-key
persist-tun

# If you are connecting through an
# HTTP proxy to reach the actual OpenVPN
# server, put the proxy server/IP and
# port number here.  See the man page
# if your proxy server requires
# authentication.
;http-proxy-retry # retry on connection failures
;http-proxy [proxy server] [proxy port #]

# Wireless networks often produce a lot
# of duplicate packets.  Set this flag
# to silence duplicate packet warnings.
;mute-replay-warnings

# SSL/TLS parms.
# See the server config file for more
# description.  It's best to use
# a separate .crt/.key file pair
# for each client.  A single ca
# file can be used for all clients.
ca target_server\\ca.crt			<--- 証明書/鍵のパス
cert target_server\\user1.crt		<--- 証明書/鍵のパス
key target_server\\user1.key		<--- 証明書/鍵のパス

# Verify server certificate by checking
# that the certicate has the nsCertType
# field set to "server".  This is an
# important precaution to protect against
# a potential attack discussed here:
#  http://openvpn.net/howto.html#mitm
#
# To use this feature, you will need to generate
# your server certificates with the nsCertType
# field set to "server".  The build-key-server
# script in the easy-rsa folder will do this.
;ns-cert-type server

# If a tls-auth key is used on the server
# then every client must also have the key.
;tls-auth ta.key 1

# Select a cryptographic cipher.
# If the cipher option is used on the server
# then you must also specify it here.
;cipher x

keepalive 10 120

# Enable compression on the VPN link.
# Don't enable this unless it is also
# enabled in the server config file.
comp-lzo

# Set log file verbosity.
verb 3

# Silence repeating messages
;mute 20

;pull
;float

---ここまで-------------------------------------------------------------------

  証明書/鍵のパスを設定ファイルからの相対パスで指定する。
  パスの区切りは \ ではなく、\\ を使用すること。

  例:C:\Program Files\OpenVPN\config\target_serverに証明書と鍵をコピーした場合

ca target_server\\ca.crt
cert target_server\\user1.crt
key target_server\\user1.key

  作成した target_server.ovpn を C:\Program Files\OpenVPN\config にコピーする


5) サーバーに接続してみる

  タスクトレイの「OpenVPN GUI」を右クリックして、メニューの「Connect」を選択する
  パスワードの入力画面で、クライアント証明書・鍵を作成した時のパスフレーズを入力
  すると、接続が開始する。
  タスクトレイの OpenVPN GUI アイコン付近に接続完了のメッセージが表示されれば
  接続は完了です。

  OpenVPN GUIを終了してしまった場合は、スタートメニューから
  「スタート」->「プログラム」->「OpenVPN」->「OpenVPN GUI」を実行すると、
  タスクトレイに常駐する。

  使用するポート番号は 1194 です。
  自宅のルーターのフィルタ設定で、ブロックされないように注意してください。



戻る