净无邪 2010-11-19
OpenVPN是一个用于创建虚拟专用网络加密通道的软件包,允许参与建立VPN的单点使用公开密钥、电子证书、或者用户名/密码来进行身份验证,能在Solaris、Linux、OpenBSD、FreeBSD、NetBSD、Mac OS X与Windows上运行,K包含了许多安全性的功能。本文一步一步介绍了在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
修改完成之后,以下面这个命令启动openvpn server
# /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