一、Open××× 的安装环境
1、Server 端的环境
Red Hat Enterprise Linux AS release 4 (Nahant Update 8)
Kernel:2.6.27.48
Ip:192.168.0.1

2、Client 端的环境
Windows XP PRO SP2
Ip:192.168.0.2

二、Open××× 服务端安装过程
1、检查 kernel 需要支持 tun 设备,需要加载 iptables 模块。
检查 tun 是否安装:
代码:

[root@localhost ~]# modinfo tun
filename:       /lib/modules/2.6.27.48/kernel/drivers/net/tun.ko
description:    Universal TUN/TAP device driver
author:         (C) 1999-2004 Max Krasnyansky <maxk@qualcomm.com>
license:        GPL
alias:          char-major-10-200
vermagic:       2.6.27.48 SMP mod_unload modversions 686 4KSTACKS
depends:       

 

2、检查OpenSSL
如果需要启用 SSL 连接,则需要先安装 OpenSSL。默认rhel4内都安装了 OpenSSL ,如果没有请自行安装。

3、下载安装 Lzo
http://www.oberhumer.com/opensource/lzo/download/ 下载最新版 lzo-2.03.tar.gz
代码:

[root@localhost src]# tar zxvf lzo-2.03.tar.gz
[root@localhost src]# cd lzo-2.03
[root@localhost lzo-2.03]# ./configure
[root@localhost lzo-2.03]# make
[root@localhost lzo-2.03]# make check   (运行检查,此步骤可以省略)
[root@localhost lzo-2.03]# make test     (运行全面测试,此步骤可以省略)
[root@localhost lzo-2.03]# make install   (试用root身份安装)

 

4、下载安装 Open×××
http://openvpn.net/download.html 下载最新版本 openvpn-2.1.2.tar.gz
代码:

[root@localhost src]# tar zxvf openvpn-2.1.2.tar.gz
[root@localhost src]# cd openvpn-2.1.2
[root@localhost openvpn-2.1.2]# ./configure --prefix=/usr/local/openvpn \
                            --with-lzo-lib=/usr/local/lib  \
                            --with-ssl-headers=/usr/include/openssl \
                            --with-ssl-lib=/lib
[root@localhost openvpn-2.1.2]# make
[root@localhost openvpn-2.1.2]# make install

 

 5、生成 vpn 服务端和客户端的证书和密钥
设置环境变量
方法一:export 声明变量
代码:

[root@localhost openvpn-2.1.2]# cd easy-rsa/2.0
[root@localhost 2.0]# export D=`pwd`
[root@localhost 2.0]# export KEY_CONFIG=$D/openssl.cnf
[root@localhost 2.0]# export KEY_DIR=$D/keys
[root@localhost 2.0]# export KEY_SIZE=1024
[root@localhost 2.0]# export KEY_COUNTRY=CN
[root@localhost 2.0]# export KEY_PROVINCE=SH
[root@localhost 2.0]# export KEY_CITY=SH
[root@localhost 2.0]# export KEY_ORG="dzh.com"
[root@localhost 2.0]# export KEY_EMAIL="me@dzh.com"

 

方法二:编辑环境变量文件 vars
代码:

[root@localhost 2.0]# vi vars    (按照上面的内容修改变量文件里的相应变量值)
[root@localhost 2.0]# . vars 

 

清理以前的ca证书和密钥
代码:

[root@localhost 2.0]# ./clean-all 
 

生成 CA
代码:

[root@localhost 2.0]# ./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) [CN]:
State or Province Name (full name) [SH]:
Locality Name (eg, city) [Shanghai]:
Organization Name (eg, company) [dzh.com]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) [dzh.com CA]:
Name []:
Email Address [me@dzh.com]:
因为已经在变量里设置过了,所以直接回车就是默认值了。 

 

为 openvpn 服务端生成key
代码:

[root@localhost 2.0]# ./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) [CN]:
State or Province Name (full name) [SH]:
Locality Name (eg, city) [Shanghai]:
Organization Name (eg, company) [dzh.com]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) [server]:
Name []:
Email Address [me@dzh.com]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /usr/local/src/openvpn-2.1.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:'CN'
stateOrProvinceName   :PRINTABLE:'SH'
localityName          :PRINTABLE:'Shanghai'
organizationName      :PRINTABLE:'dzh.com'
commonName            :PRINTABLE:'server'
emailAddress          :IA5STRING:'me@dzh.com'
Certificate is to be certified until Aug 17 07:20:17 2020 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
 

 

为客户端生成key
代码:

[root@localhost 2.0]# ./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) [CN]:
State or Province Name (full name) [SH]:
Locality Name (eg, city) [Shanghai]:
Organization Name (eg, company) [dzh.com]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) [client1]:
Name []:
Email Address [me@dzh.com]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /usr/local/src/openvpn-2.1.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:'CN'
stateOrProvinceName   :PRINTABLE:'SH'
localityName          :PRINTABLE:'Shanghai'
organizationName      :PRINTABLE:'dzh.com'
commonName            :PRINTABLE:'client1'
emailAddress          :IA5STRING:'me@dzh.com'
Certificate is to be certified until Aug 17 07:24:46 2020 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 

 

如果有多个客户端,可以使用 ./build-key 依次生成不同的客户端key。
注意在进入 Common Name (eg, your name or your server's hostname) []: 的输入时, 每个证书输入的名字必须不同。

生成 Diffie Hellman 参数
代码:

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

 

6、为服务器端生成配置文件和服务启动脚本
代码:

[root@localhost openvpn-2.1.2]# mkdir /etc/openvpn
[root@localhost openvpn-2.1.2]# cp sample-config-files/server.conf /etc/openvpn
[root@localhost openvpn-2.1.2]# cp sample-scripts/openvpn.init /etc/init.d/openvpnd
注意:这个默认的 openvpn.init 脚本里的openvpn应用程序的路径可能跟你实际安装的不一样,需要更改的。
[root@localhost openvpn-2.1.2]# vi /etc/init.d/openvpnd
将脚本里:openvpn_locations="/usr/sbin/openvpn /usr/local/sbin/openvpn" 修改成实际安装的路径,比如:openvpn_locations="/usr/local/openvpn/sbin/openvpn"
[root@localhost openvpn-2.1.2]# chkconfig --add openvpnd
[root@localhost openvpn-2.1.2]# cp easy-rsa/2.0/keys/ca.crt /etc/openvpn/
[root@localhost openvpn-2.1.2]# cp easy-rsa/2.0/keys/server.crt /etc/openvpn/
[root@localhost openvpn-2.1.2]# cp easy-rsa/2.0/keys/server.key /etc/openvpn/
[root@localhost openvpn-2.1.2]# cp easy-rsa/2.0/keys/dh1024.pem /etc/openvpn/
 

 

7、启动 openvpn 服务端
代码:

[root@localhost openvpn-2.1.2]# service openvpnd start
Starting openvpn: [ OK ]
[root@localhost openvpn-2.1.2]# tail /var/log/messages
Aug 20 15:50:29 localhost openvpn[20961]: Open××× 2.1.2 i686-pc-linux-gnu [SSL] [LZO2] [EPOLL] built on Aug 20 2010
Aug 20 15:50:29 localhost openvpn[20961]: NOTE: Open××× 2.1 requires '--script-security 2' or higher to call user-defined scripts or executables
Aug 20 15:50:29 localhost openvpn[20961]: Diffie-Hellman initialized with 1024 bit key
Aug 20 15:50:29 localhost openvpn[20961]: TLS-Auth MTU parms [ L:1542 D:138 EF:38 EB:0 ET:0 EL:0 ]
Aug 20 15:50:29 localhost openvpn[20961]: Socket Buffers: R=[109568->131072] S=[109568->131072]
Aug 20 15:50:29 localhost openvpn[20961]: ROUTE default_gateway=222.73.34.190
Aug 20 15:50:29 localhost openvpn[20961]: TUN/TAP device tun0 opened
Aug 20 15:50:29 localhost openvpn[20961]: TUN/TAP TX queue length set to 100
Aug 20 15:50:29 localhost openvpn[20961]: /sbin/ifconfig tun0 10.8.0.1 pointopoint 10.8.0.2 mtu 1500
Aug 20 15:50:29 localhost kernel: tun0: Disabled Privacy Extensions
Aug 20 15:50:29 localhost openvpn[20961]: /sbin/route add -net 10.8.0.0 netmask 255.255.255.0 gw 10.8.0.2
Aug 20 15:50:29 localhost openvpn[20961]: Data Channel MTU parms [ L:1542 D:1450 EF:42 EB:135 ET:0 EL:0 AF:3/1 ]
Aug 20 15:50:29 localhost openvpn[20966]: UDPv4 link local (bound): [undef]:1194
Aug 20 15:50:29 localhost openvpn[20966]: UDPv4 link remote: [undef]
Aug 20 15:50:29 localhost openvpn[20966]: MULTI: multi_init called, r=256 v=256
Aug 20 15:50:29 localhost openvpnd:  succeeded
Aug 20 15:50:29 localhost openvpn[20966]: IFCONFIG POOL: base=10.8.0.4 size=62
Aug 20 15:50:29 localhost openvpn[20966]: IFCONFIG POOL LIST
Aug 20 15:50:29 localhost openvpn[20966]: Initialization Sequence Completed
Aug 20 15:50:34 localhost udevd[1278]: udev done!

[root@localhost openvpn-2.1.2]# ifconfig -a
Link encap:Ethernet  HWaddr 00:26:55:1E:D8:9A 
          inet addr:192.168.0.1  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::226:55ff:fe1e:d89a/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 b)  TX bytes:526 (526.0 b)
          Interrupt:193 Memory:fa000000-fa012100  

lo        Link encap:Local Loopback 
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:1754296 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1754296 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:165016597 (157.3 MiB)  TX bytes:165016597 (157.3 MiB)

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) 

 

看到上面的信息就说明 openvpn 服务起来了,openvpn 服务端配置完毕了。

三、Open××× GUI For Windows 客户端安装过程
1、下载安装Open××× GUI For Windows
http://openvpn.net/index.php/open-source/downloads.html 下载 openvpn-2.1.2-install.exe
注意: Open××× GUI 的版本要和 Open××× Server 的版本配套。
Windows下的安装过程就不具体说了,安装大家都会的。我使用默认路径安装在C:\Program Files\Open×××下了。

2、配置客户端配置文件
复制 sample-config 目录下的 client.ovpn 到 config 目录下。
用记事本打开配置文件 client.ovpn ,修改一下部分:

remote my-server-1 1194  改为  remote 192.168.0.1 1194
cert client.crt  改为  cert client1.crt
key client.key  改为  key client1.key 

 

把服务器端的认证证书下载下来
把  ca.crt client1.crt client1.key 这三个文件从服务端下载到客户端的 config 目录里。

3、启动客户端GUI
打开“开始”菜单----->“程序”----->“openvpn”----->“openvpn gui”,在出来的程序界面里点击“链接”按钮
代码:

C:\Documents and Settings\office>ipconfig /all

Windows IP Configuration

        Host Name . . . . . . . . . . . . : office

        Primary Dns Suffix  . . . . . . . :
        Node Type . . . . . . . . . . . . : Unknown
        IP Routing Enabled. . . . . . . . : No
        WINS Proxy Enabled. . . . . . . . : No

Ethernet adapter vpn:

        Connection-specific DNS Suffix  . :
        Description . . . . . . . . . . . : TAP-Win32 Adapter V9
        Physical Address. . . . . . . . . : 00-FF-FF-5D-70-E6
        Dhcp Enabled. . . . . . . . . . . : Yes
        Autoconfiguration Enabled . . . . : Yes
        IP Address. . . . . . . . . . . . : 10.8.0.6
        Subnet Mask . . . . . . . . . . . : 255.255.255.252
        Default Gateway . . . . . . . . . :
        DHCP Server . . . . . . . . . . . : 10.8.0.5
        Lease Obtained. . . . . . . . . . : 2010年8月20日 16:47:39
        Lease Expires . . . . . . . . . . : 2011年8月20日 16:47:39

Ethernet adapter local:

        Connection-specific DNS Suffix  . :
        Description . . . . . . . . . . . : Realtek RTL8139/810x Family Fast Eth
ernet NIC
        Physical Address. . . . . . . . . : 00-1B-B9-5F-C3-58
        Dhcp Enabled. . . . . . . . . . . : Yes
        Autoconfiguration Enabled . . . . : Yes
        IP Address. . . . . . . . . . . . : 10.9.21.74
        Subnet Mask . . . . . . . . . . . : 255.255.255.0
        Default Gateway . . . . . . . . . : 10.9.21.254
        DHCP Server . . . . . . . . . . . : 10.9.21.254
        DNS Servers . . . . . . . . . . . : 114.80.136.14
                                            114.80.157.11
        Lease Obtained. . . . . . . . . . : 2010年8月20日 12:41:54
        Lease Expires . . . . . . . . . . : 2010年8月21日 12:41:54 

 

上面vpn 链接获取正确的ip地址,就说明客户端已经和服务端链接成功了。要是需要客户端操作系统启动就能自动链接到服务端,可以在windows的服务里找到openvpn服务,设置为“自动”就可以了。