OpenVPN是一个用于创建虚拟专用网络加密通道的软件包,允许参与建立VPN的单点使用公开密钥、电子证书、或者用户名/密码来进行身份验 证,能在Solaris、Linux、OpenBSD、FreeBSD、NetBSD、Mac OS X与Windows上运行,並包含了许多安全性的功能.本文一步一步介绍了在CentOS 5.5上安装openvpn的过程.

一、下载软件包

$ cd /opt
$ wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.04.tar.gz
$ wget http://openvpn.net/release/openvpn-2.1_rc22.tar.gz

二、解压及安装

$ tar zxvf lzo*
$ tar zxvf openvpn*

进入相应文件夹下,执行以下命令编译安装:

$ ./configure && make && make install

三、服务器端设置: 1.用easy-rsa生成服务器证书客户端证书

$ cp /opt/openvpn-2.1_rc22/easy-rsa/2.0 -r /etc/openvpn
$ cd /etc/openvpn/2.0

编辑所需的参数再调用之:

$ vim vars
$ source ./vars

下面这个命令在第一次安装时可以运行,以后在添加客户端时千万别运行,这个命令会清除所有已经生成的证书密钥.

$ ./clean-all

生成服务器端ca证书:

$ ./build-ca

生成服务器端密钥证书, 后面这个server-name就是服务器名,可以自定义.

$ ./build-server-key server-name

一路Enter之后证书生成. 再依次生成所需客户端证书密钥文件:

$ ./build-key client-name1
$ ./build-key client-name2

再生成 diffie hellman 参数:

$ ./build-dh

创建并编辑服务器端配置文件:

cp /opt/openvpn-2.1_rc22/sample-config-files/server.conf /etc/openvpn/
vi /etc/openvpn/server.conf

编辑成下面的内容:

port 1494
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
server 10.1.0.0 255.255.255.0
push "route 10.1.0.0 255.255.255.0"
push "route 10.1.1.0 255.255.255.0"
client-config-dir /etc/vpn/ccd
route 10.1.1.0 255.255.255.0
client-to-client
keepalive 10 120
user nobody
group nobody
persist-key
persist-tun
log-append openvpn.log
verb 3

其中 ca.crt, server.key,server.crt 可以用以前贴出的 ca 工具创建,dh1024.pem 用 OpenVPN 自带的工具创建. 这个配置文件创建了两个网段:10.1.0.* 和 10.1.1.*,VPN 服务器将从这两个网段中给 Client 分配 IP 地址.VPN Server 自身 IP 将是 10.0.0.1. "client- config-dir"指明 Client 的专有配置文件目录.在这个目录下可以针对特定用户建立配置文件.例如,要为用户 abc 指定一个 IP 地址(如10.1.1.5)而不是让 VPN Server 自动分配,可以在配置目录 /etc/vpn/ccd下建立一个 abc 文件,内容如下:

ifconfig-push 10.1.1.5 10.1.1.6

那么 VPN Server 就会自动给 abc 用户分配 10.1.1.5 这个地址.注意第一个IP地址 的最后一个数字(这里是 5)必须是 4*n + 1 的数. 问题是,VPN Server 怎么知道哪个用户是 abc 呢?它是 Client 数字证书中的 Common Name 域来判断的.就是说,在连接协商时如果 Client 端数字证书的 Common Name 是 abc,那么 VPN Server 就找配置目录下 abc 这个文件. 修改完成之后,到VPN目录下执行:

$ /usr/local/sbin/openvpn --config /etc/openvpn/server.conf;

每次都运行上面这个命令有点麻烦,这里有一个script,把它复制到 /etc/init.d 文件夹下,可以实现启动,状态查询,重启等.该文件适应于CentOS 5.5, 如果密钥及配置文件位置不一样,也许要作一些小的修改. 再在rcX.d文件夹下作几个软链接就可以实现开机自动启动了. 也可以修改 /etc/rc.local文件实现开机启动. 密钥分发: 把ca.crt 及相应client 的三个密钥证书文件一共四个分别分发出去就可以了.注意不需要将ca.key分发出去, ca.key应该保密.

四、客户端配置

1.Linux 相应比较简单,安装好openvpn后,把收到的ca及lient文件放到相应的位置,配置好client.conf就可以了.

2.Windows 到openvpn官方网站下载windows安装包进行安装,在安装文件夹下有下个config文件夹,把你的ca及client文件放到该文件夹下,从sample-config下拷贝一个client.ovpn并作相应修改即可. 五、固定IP地址分配 在服务器端配置文件(server.conf)里取消下面行的注释:

;client-config-dir ccd
;route 10.8.0.0 255.255.255.252

/etc/openvpn文件夹下新建名为ccd文件夹,在ccd 文件夹里以客户名为名新建文件,内容格式如下:

ifconfig-push 10.8.0.20 10.8.0.120

客户端启动后即获得IP地: 10.8.0.20. 但要注意上面格式只对linux有效,如果客户端为windows,则客户端会连接不成功.因为openvpn在windows下时, 其local IP 与 remote IP 必须在网址掩码为255.255.255.252的同一网段内,而且不能取头尾两端的IP,因此一个openvpn连接在windows下最少要占用4个ip地址. windows 下的 客户端IP配置必须为如下形式:

ifconfig-push 10.8.0.30 10.8.0.29

因为10.8.0.28/30网段包含以下IP: 10.8.0.28-31, 去除头尾,只有29与30可用.其他类推. 六、访问外网设置 开启服务器端路由转发功能:

$ echo 1 > /proc/sys/net/ipv4/ip_forward

为了使CentOS重启后仍然开启路由转发功能我们需要再执行下列命令:

$ sysctl -w net.ipv4.ip_forward=1

添加iptables转发规则: 因为我的CentOS是ADSL拨号上网,所以把出口设置成ppp0,请根据实际情况设置, 如eth0:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o ppp0 -j MASQUERADE

必须保证server.conf配置中,有下面三个配置:

push "dhcp-option DNS 10.8.0.1"
push "dhcp-option DNS 202.103.44.150" #客户端获得的DNS地址
push "dhcp-option DNS 202.103.24.68" #客户端获得的DNS地址.