> CentOS > CentOS教程 >

在Centos7系统环境下安装并配置Openvpn服务(附客户端使用说明及常见问题排错)

OpenVPN服务端配置

简介

OpenVPN是一个用于创建虚拟专用网络加密通道的软件包最早由James Yonan编写。

OpenVPN允许参与建立VPN的单点使用公开密钥、电子证书、或者用户名密码来进行身份验证。它大量使用了OpenSSL加密库中的SSLv3/TLSv1协议函数库。

目前OpenVPN能在Solaris、Linux、OpenBSD、FreeBSD、NetBSD、Mac OS X与Windows 2000XPVista7上运行并包含了许多安全性的功能。它并不是一个基于Web的VPN软件也不与IPsec及其他VPN软件包兼容。

 

前提

条件允许先关闭selinux

 

安装使用环境

系统Centos 7.1

 

软件版本

easy-rsa-2.2.2

openvpn-2.3.10

 

安装依赖包

yum install -y openssl openssl-devel lzo lzo-devel pam pam-devel automake pkgconfig

 

1. 安装服务端OpenVPN软件包

默认的Centos 的yum源里没有OpenVPN的软件包我们可以添加rpmforge的repo从而实现yum安装openvpn

 

针对CentOS 5系统

rpm -ivh http://apt.sw.be/redhat/el5/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm

 

针对CentOS 6系统

rpm -ivh http://apt.sw.be/redhat/el6/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm

 

针对Centos 7系统

http://apt.sw.be/redhat/el7/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm

 

安装完rpmforge的repo之后执行yum命令安装OpenVPN

Yum makecache

yum install -y openvpn

 

2. 生成OpenVPN需要的证书

使用easy-rsa脚本产生OpenVPN所需的CA证书、CA私钥、服务端证书、服务端私钥、客户端证书、客户端私钥

由于新版VPN已经不包含easy-rsa服务所以需要单独下载安装

yum install -y easy-rsa

然后将easy-rsa目录 copy到/etc/openvpn并添加可执行权限

cp -R /usr/share/easy-rsa/  /etc/openvpn/

cd /etc/openvpn/easy-rsa/2.0

chmod +x  *

修改vars配置如下使得生成证书时不用再次输入只需一路回车即可。

export KEY_COUNTRY="CN"  国家

export KEY_PROVINCE="BJ"  省份

export KEY_CITY="Beijing"  城市

export KEY_ORG="xxxx" 组织

export KEY_EMAIL="xxxx@xxxx.com"  邮箱

export KEY_OU="xxxx.com"  单位

保存退出

 

然后使用easy-rsa的脚本生成证书

. vars 注意. 之间有空格

./clean-all  初始化keys目录创建所需要的文件和目录

./build-ca server  生成root CA证书,用于签发server和client证书完成后生成ca.crt ca.key index.txt serial文件

./build-key-server server 生成服务器端密钥, 后面这个server就是服务器名可自定义完成后生成server.crt server.key文件 

./build-key client   生成客户端密钥例如客户端用户名为client

./build-dh  生成Diffie Hellman文件,#TLS server 需要使用的一个文件完成后生成dh1024.pem或dh2048.pem文件,大小在配置文件中定义。

 

执行以上命令后将在/etc/openvpn/easy-rsa/2.0/keys/目录下产生对应的证书和秘钥,ls一下确认都已经生成后面要用到。

 

以下为可选项

-------------------------------------------------------------------------

为防止恶意攻击如DOS、UDP port flooding我们生成一个"HMAC firewall"

#openvpn --genkey --secretkeys/ta.key

生成证书吊销链文件防止日后有人丢失证书被非法用户接入VPN

#./make-crl vpncrl.pem

Using configuration from /etc/openvpn/easy-rsa/openssl.cnf

-------------------------------------------------------------------------

 

3.生成OpenVPN服务端配置文件

cp /usr/share/doc/openvpn-2.2.2/sample-config-files/server.conf  /etc/openvpn/

编辑/etc/openvpn/server.conf文件内容如下

 

port        1194 (使用的端口默认1194可自定义)

proto       tcp 使用的协议可以设置为udp客户端ovpn文件中设置要与此一致

dev         tun  #基于路由的隧道

ca          /etc/openvpn/easy-rsa/2.0/keys/ca.crt     #之前执行./build-ca建立的根证书

cert        /etc/openvpn/easy-rsa/2.0/keys/server.crt #之前执行./build-key-server生成的服务器私有证书

key         /etc/openvpn/easy-rsa/2.0/keys/server.key #之前执行./build-key-server生成的服务器私有密钥

dh          /etc/openvpn/easy-rsa/2.0/keys/dh2048.pem  #之前执行./build-dh生成的文件

server      10.1.1.0 255.255.255.0  #要分配的VPN网段不能与本机IP网段相同

ifconfig-pool-persist ipp.txt #记录客户端所获得IP

push "route 172.31.90.0 255.255.255.0"  #通过VPN Server去往其它网段路由重启vpn服务生效

log         /var/log/openvpn.log  #定义日志路径

max-clents 100  #允许客户端并发连接的数量

client-to-client   #允许客户端之间相互通讯

status openvpn-status.log  #定义openvpn连接状态日志

comp-lzo  #开启VPN连接压缩.客户端必须做相同设置

persist-key

persist-tun

crl-verify /etc/openvpn/easy-rsa/2.0/crl.pem   ####用于注销已删除用户的key

其它选择默认即可

 

4.开启OpenVPN服务

/usr/sbin/openvpn --config /etc/openvpn/server.conf &     配置文件路径及名称可自己定义

如果OpenVPN启动失败请查看OpenVPN的启动日志/var/log/openvpn.log。可能导致启动失败的原因

 

添加openvpn开机启动

echo "/usr/sbin/openvpn --config  /etc/openvpn/server.conf &" >> /etc/rc.local

 

若成功运行执行ifconfig命令会多出一个tun0即VPN的虚拟网卡

技术分享

 

5.服务端开启nat功能

客户端拨入OpenVPN后默认网关会指向OpenVPN服务器为了能使客户端可以上网需要在服务端开启nat功能

首先打开ip forward功能

sed -i ‘/net.ipv4.ip_forward/s/0/1/g‘ /etc/sysctl.conf 

sysctl -w net.ipv4.ip_forward=1

然后配置iptables nat(此处不配置的话客户端连上VPN后只能登陆服务端一台主机需要特别注意) 

iptables -t nat -A POSTROUTING -s 192.168.21X.0/24 -o em2 -j MASQUERADE

192.168.21X.0为vpnserver分配给客户端的虚拟网段em2为出口网卡

/etc/init.d/iptables save 保存配置

 

 

6、客户端配置

对于Windows客户端

到http://openvpn.se/download.html 下载gui版的OpenVPN按照提示安装完成

技术分享

 

然后进入到安装目录如D:\Program Files\OpenVPN。将Linux服务端使用easy-rsa产生的客户端证书、私钥和ca证书下载到客户端电脑。需要下载的文件如下

/etc/openvpn/easy-rsa/2.0/keys/ca.crt       #ca证书

/etc/openvpn/easy-rsa/2.0/keys/client.crt   #客户端证书client为测试客气端用户名

/etc/openvpn/easy-rsa/2.0/keys/client.key   #客户端私钥

将这些文件下载到D:\Program Files\OpenVPN\config下。

 

编辑客户端C:\Program Files (x86)\OpenVPN\sample-config\client.ovpn,内容如下

client

dev tun

proto udp 协议要与服务器端口配置文件定义一致

remote 211.112.112.112  1194   #VPN服务器的外网IP地址和端口

resolv-retry infinite

nobind

persist-key

persist-tun

ca ca.crt

cert client.crt   #####client为测试用户名正式环境改为正式用户名.crt

key client.key    #####client为测试用户名正式环境改为正式用户名.key

comp-lzo

verb 3

redirect-gateway def1

route-method exe

route-delay 2

将client.ovpn文件拷贝到C:\Program Files (x86)\OpenVPN\config下

右键以管理员身份运行openvpn客户端软件不以管理员运行可以出现连接后也不能访问的情况稍后在桌面右下角灰色小图标处右击选择connect即可。如下图

技术分享

技术分享

 

VPN连接过程

技术分享

 

VPN连接成功如下图

技术分享

 

对于Mac 客户端

到 http://sourceforge.net/projects/tunnelblick/ 下载OpenVPN 客户端软件 Tunnelblick

 

 

7、一些官方openvpn排错

如果遇到OpenVPN初始化失败或者ping失败下面有一些共同的问题症状和解决办法:

1.你得到如下错误信息: TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity). 这个错误指出客户端不能跟服务器建立网络链接.

解决办法

a.请确认客户端访问的服务器的机器名/IP和端口是正确的. 

b.如果你的OpenVPN服务器是单网卡并处在受保护的局域网中请确认你你的网关防火墙使用了正确的端口转发规则。比如你的OpenVPN机器的地址是192.168.4.4但处在防火墙保护下时刻监听着UDP协议1194的连接请求那么负责维护192.168.4.x子网的网关就会有一个端口转发策略即所有访问UDP协议1194端口的请求都被转发到192.168.4.4 。

c.打开服务器的防火墙允许UDP协议1194端口连接进来或者不管是TCP还是UDP协议在服务器的配置文件中配置了。

 

2.你得到如下错误信息: Initialization Sequence Completed with errors – 这个错误可能发生在windows下a你没有启用DHCP客户端服务b你的XP SP2使用了某个第三方的个人防火墙。

解决办法: 启动DHCP客户端服务或者你确认你的XP SP2正确使用了个人防火墙.

 

3.你虽然获得了Initialization Sequence Completed 的信息但ping测试还是失败了那就通常是在服务器或者客户端的防火墙阻止过滤了在TUN/TAP设备结构上的网络流量。

解决办法: 关闭客户端的防火墙如果防火墙过滤了TUN/TAP设备端口的流量。比如在Windows XP SP2系统你可以到Windows 安全中心 -> Windows 防火墙 -> 高级 然后不要选择TAP-Win32 adapter设备 (即禁止TUN/TAP设备使用防火墙过滤 实质上就是告诉防火墙不要阻止VPN认证信息)。 同样在服务器端也要确认TUN/TAP设备不实用防火墙过滤 (也就是说在TUN/TAP接口上选择过滤是有一定的安全保障的. 具体请看下面一节的访问策略).

 

4.当以udp协议的配置文件启动的时候连接停止服务器的日志文件显示如下一行信息

TLS: Initial packet from x.x.x.x:x, sid=xxxxxxxx xxxxxxxx

不管怎么样这信息只在服务器端显示在客户端是不会显示相同的信息。

解决办法: 你只拥有单向连接从客户端到服务器从服务器到客户端的连接被防火墙挡住 通常在客户端这边防火墙a可能是个运行在客户端的个人防火墙软件b或者服务客户端的NAT路由 网关被设置为从服务器端访问客户端的UDP协议包被阻挡返回。

 

 

END

本文出自 “小五台车神” 博客,请务必保留此出处http://linuxtech.blog.51cto.com/3670088/1739943


 

(责任编辑:IT)