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="[email protected]" <-- サーバー管理者メールアドレスを指定
export [email protected] <-- サーバー管理者メールアドレスを指定
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 [[email protected]]: <-- 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 [[email protected]]: <-- 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:'[email protected]'
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 [[email protected]]: <---
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:'[email protected]'
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 です。
自宅のルーターのフィルタ設定で、ブロックされないように注意してください。
戻る