1.系统环境: CentOS 6.5 64位
2.openvpn额外涉及到的软件包介绍如下;
openssl
openssl服务主要作用:openvpn使用了OpenSSL的加密以及验证功能,意味着,它能够使用任何OpenSSL支持的算法
leo
leo主要作用:LZO 是一个用 ANSI C
语言编写的无损压缩库。他能够提供非常快速的压缩和解压功能, OPNVPN服务需要使用到该服务
pam
pam主要作用:认证模块
pkcs11-helper跟pkcs11-helper-devel
3.安装依赖的软件包
yum
install lzo lzo-devel openssl openssl-devel pam pam-devel –y
yum
install pkcs11-helper pkcs11-helper-devel –y
4.检查需要的软件包安装结果
rpm
-qa lzo lzo-devel openssl openssl-devel pam pam-devel pkcs11-helper
pkcs11-helper-devel
5.开始安装openvpn服务,首先下载openvpn的源码包
wget
http://oss.aliyuncs.com/aliyunecs/openvpn-2.2.2.tar.gz
使用rpmbuild将源码包编译成rpm包来进行安装,这样比较省事
rpmbuild
-tb openvpn-2.2.2.tar.gz
执行这条命令以后就会正常开始编译了,编译完成以后会在/root/rpmbuild/RPMS/x86_64目录下生成openvpn-2.2.2-1.x86_64.rpm安装文件
执行rpm -ivh openvpn-2.2.2-1.x86_64.rpm 以rpm包的方式安装
至此OPENVPN服务已经安装完成
6.开始配置OPENVPN服务(服务端)
首先初始化PKI (Public Key Infrastructure 公共秘钥)
#cd/usr/share/doc/openvpn-2.2.2/easy-rsa/2.0
进入到/usr/share/doc/openvpn-2.2.2/easy-rsa/2.0目录下,找到vars证书环境文件,修改最后几行export定义的值
exportKEY_COUNTRY="CN"
你所在的国家
export
KEY_PROVINCE="GD"
你所在的省份
exportKEY_CITY="Shenzhen"
你所在的城市
exportKEY_ORG="myvpn"
你所属的组织
export
[email protected]
你的邮件地址
这些都可以根据自己的实际情况更改的,没什么问题
vars环境文件修改完成以后,那我们就来生成服务端的证书,只要执行以下步骤即可;
ln -s openssl-1.0.0.cnf openssl.cnf
做个软链接到openssl-1.0.0.cnf配置文件
source
/usr/share/doc/openvpn-2.2.2/easy-rsa/2.0/vars
使修改的变量vars生效
./clean-all
清除并删除keys目录下的所有key
./build-ca
生成CA证书,由于刚刚已经在vars文件中配置了,只要一路回车就可以了,不需要额外配置
./build-key-server server
成服务器证书,其中server是自己定义的名字,一
路回车,到最后会有一次交互,输入2次y确认就可以了,完成后会在keys目录下保存了自定义的名字的.key .csr .和.crt三个文件,比如我定义的名为server,那就会在keys目录下生产server.keyserver.csr跟server.crt三个 文件,
而且这个定义的名字在后面修改server.conf文件中也会用到,需要注意下
创建用户秘钥跟证书
#./build-key user1
创建用户名为user1用户的秘钥跟证书,只需要一路回车,到最后
会有一次交换确认,只要按y确认即可,创建用户私钥的过程与服务器密钥的
程类似,完成后,在keys目录下生成1024位RSA服务器密钥user1.key、
user1.crt和user1.csr 三个文件,若要建立多个用户私钥, 可以使用build-key脚本生产多个不同的用户,只要后面的用户名称修改下就好了
生成Diffie Hellman参数
./build-dh
执行了./build-dh后,会在keys目录下生成dh参数文件dh1024.pem,dh1024.pem文件客户端验证的时候会用到
cp /usr/share/doc/openvpn-2.2.2/easy-rsa/2.0/keys/* /etc/openvpn/
将/usr/share/doc/openvpn-2.2.2/easy-rsa/2.0/keys目录下的所有文件复
制到/etc/openvpn下
cp /usr/share/doc/openvpn-2.2.2/sample-config-files/server.conf
/etc/openvpn/
复制openvpn服务端配置文件server.conf文件到/etc/openvpn/目录下,定义
文件名为server.conf
修改server.conf配置文件的主要参数,修改的参数如下;
proto
tcp
选择使用tcp还是udp协议
server
192.168.0.0 255.255.255.0
定义分配给客户端的IP地址段,这个参数主要是设置分配给VPN客户端的IP
地址的,可以根据自己的实际要求更改,我这边定义地址段位192.168.0.0段
user
nobody
group
nobody
去除user nobody 和group nobody前的分号,使系统使用nobody用户启动
openvpn进程
log openvpn.log
去掉log前面的#注释,若不去除,openvpn的日志会写入到系统日志中
ca
ca.crt
CA证书文件,默认就可以
cert
server.crt
这个需要注意,根据自己实际定义的证书名来更改,也就是上面执行
了./build-key-server server命令生成的证书,
比如我定义证书名称为server 那参数就应该更改成cert server.crt,如果定
义的是其它名称,必须更改成定义的名称才可以,
要不然openvpn会无法启动的
key
server.key
跟上的cert的一样,设置的是什么必须写成什么,我这边定义的证书名称是
server,那自然也就是keyserver.key
push"redirect-gateway
def1 bypass-dhcp"
去掉前面的分号,要不然VPN连接了以后数据不会走服务器出去,去掉以后默认数据就会走VPN出去了
到此为止,服务端的配置文件已经修改完成了,那就是启动openvpn服务了,正
常情况下修改没问题的话就是能成功启动的
7.启动openvpn服务
service
openvpn start
ps -ef |grep openvpn 查看openvpn的进行是否正常
ifconfig-a 可以查看到openvpn的接口已经启动
最后还需要做2个事情,开启转发功能跟NAT策略,要不然数据包会出不去的
echo 1>
/proc/sys/net/ipv4/ip_forward
开启路由转发功能
iptables -t nat -A POSTROUTING -s
192.168.0.0/24 -o eth1 -j MASQUERADE
这里NAT的地址段跟server.conf文件中定义的IP地址段要一致,然后接口可
service iptables save
保存下iptables策略,避免防火墙重启后规则丢失以根据机器的实际情况来定
到此为止openvpn服务端上的配置都完成了,下面就开始配置客户端,比较简单
8.客户端的配置
http://oss.aliyuncs.com/aliyunecs/openvpn-2.1.3-install.rar
下载openvpn客户端,windows系统下安装,直接默认下一步安装就好
加载密钥文件(假设是用户user1,如果有其它用户如user2则下载user2的)
将/etc/openvpn目录下的
user1.crt user1.key
user1.csr ca.crt ca.key文件打包下载到需要拨号的客户端上
然后将下载的文件解压放到openvpn服务安装路径下的\OpenVPN\config目录下
配置client.opvn
将openvpn安装路径下的\OpenVPN\sample-config\目录中下的client.opvn复制到openvpn安装路径下的\OpenVPN\config目录下,然后并修配置文件中的如下参数;
proto tcp
去掉前面的分号,因为服务端用的是tcp协议,那这边也要用tcp协议
remote 182.92.148.244 1194
去掉前面的分号注释, 其中182.92.148.244为openvpn的服务器ip地址 1194为openvpn的通讯端口,跟服务端的一致
cert user1.crt
key user1.key
cert和key改成实际用户名,我创建的登入用户是user1 那这边就应该更改为user1
修改完成以后通过VPN客户端去连接,正常的话就能正常通过认证并获取到IP地址
如果成功连接上VPN服务,那右下角的小电脑图片会变成绿色
使用ipconfig/all
也可以看到VPN的虚拟IP地址段
最后通过浏览器去访问外网显示的IP地址就应该为VPN服务器的IP了