最近需要在openstack中集成openvpn功能,故熟悉了一下openvpn的搭建流程,记录下来,供参考

版本:openvpn-2.3.4.tar.gz

下载地址:http://pan.baidu.com/s/1hq3iQJ6

操作系统:CentOS7

1. 准备

yum install -y gcc openssl-devel lzo-devel pam-devel

2. 安装OpenVPN

将下载的安装文件移动到/usr/local/文件夹中(你也可以自行移动到其他目录)。

使用tar命令,将该压缩文件解压到当前目录,完整命令为:tar zxf openvpn-2.3.4.tar.gz

依次执行如下命令:

#跳转到解压后的openvpn目录cd openvpn-2.3.4#调用configure./configure#编译make#安装make install

3. 配置OpenVPN

配置OpenVPN主要有两个步骤:

1. 生成服务器和客户端所需的各种证书

2. 编写服务器和客户端所需的配置文件。

3.1 下载easy-rsa

下载地址:http://pan.baidu.com/s/1o66Yaz4

将下载的easy-rsa-release-2.x.zip文件放在/root目录中

依次执行如下命令:

#转到easy-rsa安装文件所在目录cd /root/#解压该安装文件unzip -q easy-rsa-release-2.x.zip

执行结果如下图所示(其中的ls命令用于查看文件列表):

接着,将上图中所标注的easy-rsa-release-2.x/easy-rsa文件夹复制到OpenVPN的解压目录中,命令如下:

#复制解压后的easy-rsa目录到OpenVPN解压目录下cp -r easy-rsa-release-2.x/easy-rsa /usr/local/openvpn-2.3.4

然后执行命令cd /usr/local/openvpn-2.3.4/easy-rsa/2.0从而进入OpenVPN下的easy-rsa/2.0目录。

PS:实际上就只是下载了easy-rsa 2.0,并将解压后的easy-rsa子目录复制到了OpenVPN的主目录下

3.2 使用easy-rsa生成CA证书

在生成证书之前,我们建议你对2.0目录中的vars文件稍作修改。vars文件存储的是一些用户变量设置信息,每次生成证书都会使用到其中的某些变量。如下图所示,我们着重建议你关注红色矩形框内的变量,并选择性地对其进行修改(你可以不修改这些参数,但不要把这些参数留空)。

KEY_SIZE:表示密钥的长度,一般为1024或2048(长度越长,性能耗费越多)。

#下面是一些用户相关信息配置
KEY_COUNTRY:所在国家
KEY_PROVINCE:所在省
KEY_CITY:所在城市
KEY_ORG:所在组织
KEY_EMAIL:邮箱地址
KEY_OU:机构单位或部门名称

下面,开始来生成证书了。保持当前目录为OpenVPN根目录/easy-rsa/2.0。然后依次执行下列命令:

#初始化命令,用于设置后续命令所需的相关变量信息. ./vars#清除之前创建的所有证书和密钥./clean-all#生成CA证书和密钥./build-ca

PS:证书的用户信息可以根据需要自行输入。如果不输入、直接回车,则表示该字段使用"[]"中的默认值(也就是前面vars文件中设置的参数值);如果输入".",则表示该字段留空。在这里需要注意Common Name字段,这相当于证书的"用户名",请确保每个证书的Common Name字段是唯一的。

到这里,我们的CA证书和密钥就已经生成成功了,生成的证书和密码默认均存放在当前目录的子文件夹keys中。

3.3 生成服务器端证书

接下来,我们为服务器和客户端生成各自所需的证书和密钥(所有的证书和密钥都必须由OpenVPN服务器上的easy-rsa生成)。

我们可以执行命令./build-key-server server来生成服务器端所需的证书和密钥。如下图所示,与创建CA证书一样,我们先输入证书的相关信息,并在最后输入两次"y"确认生成即可。

3.4 生成客户端证书

与创建服务器端证书类似,我们可以使用命令./build-key clientName来生成客户端证书和密钥,其中clientName为自定义的客户端名称(例如:client1、client2、jim、tom)。如果需要为多个客户端生成证书,只需要分别执行多次即可。

3.5 生成迪菲·赫尔曼交换密钥

迪菲·赫尔曼交换密钥是一种安全协议,用以对数据进行加密。

3.6 生成TLS-auth密钥

这一步骤是可选操作。OpenVPN提供了TLS-auth功能,可以用来抵御Dos、UDP端口淹没攻击。出于安全考虑,你可以启用该功能;启用该功能,

执行命令openvpn --genkey --secret keys/ta.key来生成TLS-auth所需的密钥文件。

到这里,我们的证书生成就告一段落了。如果你以后想要生成新的客户端或执行其他操作,只需要先执行命令source ./vars,然后执行相应的命令即可,例如./build-key client2

最后,我们来看看我们一共生成了哪些证书和密钥。

编号①:CA证书和密钥
编号②:客户端client1的证书和密钥,
编号③:迪菲·赫尔曼交换密钥 (如果你的KEY_SIZE=1024,则该文件名称为dh1024.pem)。
编号④:服务器端证书和密钥。
编号⑤:启用tls-auth所需的文件。

3.7 编写配置文件

众所周知,OpenVPN虽然可以分为客户端和服务器,不过它们的安装程序是完全一样的,只是通过不同的证书和配置文件来进行区分。在这里,我们先在OpenVPN主目录下创建一个config目录,并将其所需的证书和密钥文件拷贝到该目录中。

其中,服务器端需要用到的文件有:

ca.crt
ca.key
dh2048.pem (如果最初的变量KEY_SIZE设为1024,这里就是dh1024.pem)
server.crt
server.key
ta.key (如果不开启tls-auth,则无需该文件)

客户端client1需要用到的文件有:

ca.crt
client1.crt
client1.key (名称client1根据个人设置可能有所不同)
ta.key (如果不开启tls-auth,则无需该文件)

在这里,我们以OpenVPN服务器端为例来演示上述操作流程。

#创建config目录mkdir /usr/local/openvpn-2.3.4/config#复制证书和密钥文件到config目录cp keys/ca.crt keys/ca.key keys/server.crt keys/server.key keys/dh2048.pem keys/ta.key /usr/local/openvpn-2.3.4/config

此外,还需要为服务器和每个客户端的config目录分别编写一个配置文件,服务器端的配置文件为server.conf,客户端的配置文件为client.conf。

这两个配置文件该如何编写呢?OpenVPN已经在sample/sample-config-files子目录中为我们提供了相关的示例文件server.conf和client.conf,并且配置文件中的每个配置选项均有详细的英文说明(配置文件中"#"或";"开头的均为注释内容)。

现在,我们先将server.conf文件拷贝到config目录中,然后再对其进行修改。

#转到simple-config-files目录cd /usr/local/openvpn-2.3.4/sample/sample-config-files#复制server.conf到config目录中cp server.conf /usr/local/openvpn-2.3.4/config

server.conf的详细配置,并注明每项配置的作用。

local 192.168.1.106     #指定监听的本机IP(因为有些计算机具备多个IP地址),该命令是可选的,默认监听所有IP地址。port 1194             #指定监听的本机端口号proto udp             #指定采用的传输协议,可以选择tcp或udpdev tun               #指定创建的通信隧道类型,可选tun或tapca ca.crt             #指定CA证书的文件路径cert server.crt       #指定服务器端的证书文件路径key server.key    #指定服务器端的私钥文件路径dh dh2048.pem         #指定迪菲赫尔曼参数的文件路径server 10.0.0.0 255.255.255.0   #指定虚拟局域网占用的IP地址段和子网掩码,此处配置的服务器自身占用10.0.0.1。ifconfig-pool-persist ipp.txt   #服务器自动给客户端分配IP后,客户端下次连接时,仍然采用上次的IP地址(第一次分配的IP保存在ipp.txt中,下一次分配其中保存的IP)。tls-auth ta.key 0     #开启TLS-auth,使用ta.key防御攻击。服务器端的第二个参数值为0,客户端的为1。keepalive 10 120      #每10秒ping一次,连接超时时间设为120秒。comp-lzo              #开启VPN连接压缩,如果服务器端开启,客户端也必须开启client-to-client      #允许客户端与客户端相连接,默认情况下客户端只能与服务器相连接persist-keypersist-tun           #持久化选项可以尽量避免访问在重启时由于用户权限降低而无法访问的某些资源。status openvpn-status.log    #指定记录OpenVPN状态的日志文件路径verb 3                #指定日志文件的记录详细级别,可选0-9,等级越高日志内容越详细

客户端配置文件client.conf。

client         #指定当前VPN是客户端dev tun        #必须与服务器端的保持一致proto udp      #必须与服务器端的保持一致remote 192.168.1.106 1194      #指定连接的远程服务器的实际IP地址和端口号resolv-retry infinite    #断线自动重新连接,在网络不稳定的情况下(例如:笔记本电脑无线网络)非常有用。nobind         #不绑定特定的本地端口号persist-keypersist-tunca ca.crt      #指定CA证书的文件路径cert client1.crt       #指定当前客户端的证书文件路径key client1.key    #指定当前客户端的私钥文件路径ns-cert-type server      #指定采用服务器校验方式tls-auth ta.key 1     #如果服务器设置了防御DoS等攻击的ta.key,则必须每个客户端开启;如果未设置,则注释掉这一行;comp-lzo              #与服务器保持一致verb 3                #指定日志文件的记录详细级别,可选0-9,等级越高日志内容越详细

实际上,将两个模板文件中与IP地址有关的配置修改一下,就可以直接拿来使用。
关于OpenVPN配置文件的更多信息请参考server.conf配置详解client.conf配置详解

3.8 启动OpenVPN

当我们把服务器和客户端所需的证书、密钥和配置文件都分配完毕之后,我们就可以尝试启动OpenVPN来检查我们的工作成果了。

在Linux中,我们可以直接执行以下命令来启动OpenVPN:

openvpn 配置文件路径

如果你是服务器端,就指定server.conf文件的路径,如果你是客户端就指定client.conf文件的路径。

请注意:

  1. 建议你将配置文件与文件路径相关的部分全部改为绝对路径。
  2. OpenVPN服务器所在计算机必须允许OpenVPN通过防火墙,你可以禁用掉防火墙,或者将OpenVPN设为可信程序,或者开放1194端口。
  3. 启动服务器和客户端都需要一定的权限,建议用root账户或sudo命令进行启动。

以下就是OpenVPN服务器的启动效果:

客户端的启动效果如下:

我们在客户端尝试ping服务器的虚拟IP地址10.0.0.1,顺利ping通。

3.8 windows客户端连接

1. 下载 OpenVPN Windows 安装包,并安装它

地址:https://openvpn.net/index.php/download/community-downloads.html

缺省情况下,OpenVPN 将被安装到 C:\Program Files\OpenVPN 目录中

推荐使用OpenVPN官方客户端2.3.6和以上版本,安装时选择”OpenVPN GUI”模块即可安装客户端

2. 将配置文件放入 C:\Program Files\OpenVPN\config 目录中

3. 将以下内容保存到 C:\Program Files\OpenVPN\config 目录中,文件名任意, 扩展名为 .ovpn ,比如可以叫做 xxxxxxxx.ovpn

client
dev tun
proto udp
remote 192.168.1.125 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
tls-auth ta.key 1
comp-lzo
verb 3

CentOS7中OpenVPN的配置的更多相关文章

  1. centos7中安装、配置、验证、卸载redis

    本文介绍在centos7中安装.配置.验证.卸载redis等操作,以及在使用redis中的一些注意事项. 一 安装redis 1 创建redis的安装目录 利用以下命令,切换到/usr/local路径 ...

  2. CentOs7中的网卡配置工具

    CentOs7中的网卡配置工具 摘自:https://blog.51cto.com/13572810/2087991 misslaziness1人评论2715人阅读2018-03-17 22:09:1 ...

  3. centos7中安装、配置jdk(转载)

    参考命令:http://www.jb51.net/os/RedHat/73016.html来进行安装 安装说明 系统环境:centos7安装方式:rpm安装软件:jdk-8u25-linux-x64. ...

  4. centos7中redis安装配置

    1.官网下载对应版本,本例以5.0.5为例 2.tar -zxvf xxxxx 并mv到安装目录 3.进入redis-5.0.5目录下,执行编译命令 make 4.编译完成后,经redis安装到指定目 ...

  5. CentOS7中PPTP的配置

    最近做各种vpn,记录一下pptp的流程 1.准备 #yum install -y perl ppp iptables //centos默认安装了iptables和ppp   2.安装pptpd #y ...

  6. Centos7 中lvs DR配置

    服务器主机: 10.200.3.100       DirectServer 10.200.3.99         RealServer1 10.200.3.101 RealServer2 10.2 ...

  7. CentOS7中GreVPN的配置

    目前只实现了三层的GRE隧道,但其实二层也可以实现的,但是没有找到很好的方法,待研究 环境如下: host A :  121.207.22.123 host B: 111.2.33.28 1. 在ho ...

  8. docker 在centos7中设置 DOCKER_OPTS

    不同于Ubuntu目录 /etc/default/docker. 在 CentOS7中Docker默认配置的路径在 /usr/lib/systemd/system/docker.service [例如 ...

  9. CentOS-7.0.中安装与配置Tomcat-7的方法

    安装说明 安装环境:CentOS-7.0.1406安装方式:源码安装 软件:apache-tomcat-7.0.29.tar.gz 下载地址:http://tomcat.apache.org/down ...

随机推荐

  1. webpack报错运行时没有定义

    一.问题描述 ReferenceError: regeneratorRuntime is not defined 二.问题分析 缺少regenerator的运行时库,具体原理,可查看babel文章. ...

  2. bzoj 4842 [Neerc2016]Delight for a Cat 最小费用最大流,线性规划

    题意:有n个小时,对于第i个小时,睡觉的愉悦值为si,打隔膜的愉悦值为ei,同时对于任意一段连续的k小时,必须至少有t1时间在睡觉,t2时间在打隔膜.如果要获得的愉悦值尽 量大,求最大的愉悦值和睡觉还 ...

  3. scrapy 爬虫返回json格式内容unicode编码转换为中文的问题解决

    最近在基于python3.6.5 的环境使用scrapy框架爬虫获取json数据,返回的数据是unicode格式的,在spider里面的parse接口中打印response.text出来如下: cla ...

  4. Navicat premium 破解步骤

    测试环境:MacOS High Sierra 10.13.3Windows版破解教程请看 https://www.52pojie.cn/thread-688820-1-1.html 破解思路依然是替换 ...

  5. d4-01

    一.字典 1.1 var dict = {"name":"zhangsan"}  定义字典 1.2 dict.name     取得name的值 1.3 del ...

  6. 子集三种生成方法 java

    增量构造法 public class Main1 { static int A[] = new int[1 << 7]; static int da[] = new int[1<&l ...

  7. vector, map, queue,set常用总结

    #include<bits/stdc++.h> using namespace std; vector<,); 定义一个大小为9,初始化全是1的vector数组 set<int ...

  8. (81)Wangdao.com第十六天_JavaScript 严格模式

    严格模式 除了正常的运行模式,JavaScript 还有第二种运行模式:严格模式(strict mode).顾名思义,这种模式采用更加严格的 JavaScript 语法 同样的代码,在正常模式和严格模 ...

  9. ping vs telnet, what is the difference between them and when to use which?

    Ping is an ICMP protocol. Basically any system with TCP/IP could respond to ICMP calls if they were ...

  10. tableview Footerview有多余的间距

    调整footerView的高度 UIView *footerV = [[UIView alloc] initWithFrame:CGRectMake(, , Main_Screen_Width, )] ...