CentOS 6.5下OpenVPN的搭建

一、openvpn原理

二、安装openvpn

三、制作相关证书

    3.1 制作CA证书

    3.2 制作Server端证书

    3.3 制作Client端证书

四、配置Server端

五、配置Client端

一、openvpn原理

openvpn通过使用公开密钥(非对称密钥,加密解密使用不同的key,一个称为Publice key,另外一个是Private key)对数据进行加密的。这种方式称为TLS加密

openvpn使用TLS加密的工作过程是,首先VPN Sevrver端和VPN Client端要有相同的CA证书,双方通过交换证书验证双方的合法性,用于决定是否建立VPN连接。

然后使用对方的CA证书,把自己目前使用的数据加密方法加密后发送给对方,由于使用的是对方CA证书加密,所以只有对方CA证书对应的Private key才能解密该数据,这样就保证了此密钥的安全性,并且此密钥是定期改变的,对于窃听者来说,可能还没有破解出此密钥,VPN通信双方可能就已经更换密钥了。

二、安装openvpn

yum方式安装,此处统一使用aliyun中centos和epel源

# rm /etc/yum.repos.d/* -fr

# vim /etc/yum.repos.d/ali.repo

[centos6]

name=centeros6 base

baseurl=http://mirrors.aliyun.com/centos/6/os/x86_64/

gpgcheck=0

 

[epel]

name=epel base

baseurl=http://mirrors.aliyun.com/epel/6/x86_64

gpgcheck=0

blob.png

为避免出现错误,关闭selinux

# setenforce 0;sed -i 's/SELINUX=.*/SELINUX=permissive/' /etc/selinux/config

blob.png

我们可以使用如下命令:

# yum install -y openvpn openssl pkcs11-helper

 

openvpn安装完毕后,我们来查看openvpn的版本,如下:

# openvpn –version

blob.png

openvpn安装完毕后,我们再来安装easy-rsa。

easy-rsa是用来制作openvpn相关证书的。

安装easy-rsa,使用如下命令:

[root@localhost keys]# yum install -y easy-rsa

查看easy-rsa安装的文件,如下:

[root@localhost keys]# rpm -ql easy-rsa

blob.png

通过上图,我们可以很明显的看到easy-rsa已经安装到/usr/share/easy-rsa/目录下。

三、制作相关证书

根据第一章节openvpn的工作原理,我们可以知道openvpn的证书分为三部分:CA证书、Server端证书、Client端证书。

下面我们通过easy-rsa分别对其进行制作。

3.1 制作CA证书

openvpn与easy-rsa安装完毕后,我们需要在/etc/openvpn/目录下创建easy-rsa文件夹,如下:

[root@localhost keys]# mkdir /etc/openvpn/easy-rsa/

 

然后把/usr/share/easy-rsa/目录下的所有文件全部复制到/etc/openvpn/easy-rsa/下,如下:

[root@localhost keys]# cp -r /usr/share/easy-rsa/2.0/* /etc/openvpn/easy-rsa/

[root@localhost keys]# ll /etc/openvpn/easy-rsa/

blob.png

当然,我们也可以直接在/usr/share/easy-rsa/制作相关的证书,但是为了后续的管理证书的方便,我们还是把easy-rsa放在了openvpn的启动目录下。

 

在开始制作CA证书之前,我们还需要编辑vars文件,修改如下相关选项内容即可。如下:

[root@localhost keys]# vim /etc/openvpn/easy-rsa/vars

export KEY_COUNTRY=”CN

export KEY_PROVINCE=”BJ

export KEY_CITY=”Chaoyang

export KEY_ORG=”TEST

export KEY_EMAIL=”TEST@TEST.com

export KEY_OU=”TEST

export KEY_NAME=”TEST”

blob.png

vars文件主要用于设置证书的相关组织信息,红色部分的内容可以根据自己的实际情况自行修改

然后使用source vars命令使其生效,如下:

[root@localhost easy-rsa]# source vars.

[root@localhost easy-rsa]# ./clean-all

blob.png

注意:执行clean-all命令会删除,当前目录下keys文件夹里证书等文件。

现在开始正式制作CA证书,使用如下命令:

[root@localhost easy-rsa]# ./build-ca

blob.png

 

一路按回车键即可。制作完成后,我们可以查看keys目录。如下:

[root@localhost easy-rsa]# ll keys/

blob.png

 

通过上图,我们可以很明显的看到已经生成了ca.crt和ca.key两个文件,其中ca.crt就是我们所说的CA证书。如此,CA证书制作完毕。

现在把该CA证书的ca.crt文件复制到openvpn的启动目录/etc/openvpn下,如下:

[root@localhost easy-rsa]# cp keys/ca.crt /etc/openvpn

[root@localhost easy-rsa]# ll /etc/openvpn/

blob.png

3.2 制作Server端证书

CA证书制作完成后,我们现在开始制作Server端证书。如下:

[root@localhost easy-rsa]# ./build-key-server vpnserver

blob.png

 

查看生成的Server端证书,如下:

[root@localhost easy-rsa]# ll keys/

blob.png

 

通过上图,可以看到已经生成了vpnserver.crt、vpnserver.key和vpnserver.csr三个文件。其中vpnserver.crt和vpnserver.key两个文件是我们要使用的。

现在再为服务器生成加密交换时的Diffie-Hellman文件,如下:

[root@localhost easy-rsa]# ./build-dh

查看生成的文件,如下:

[root@localhost easy-rsa]# ll keys/

blob.png

 

通过上图,我们可以很明显的看出已经生成了dh2048.pem,这个文件。

以上操作完毕后,把vpnserver.crt、vpnserver.key、dh2048.pem复制到/etc/openvpn/目录下,如下:

[root@localhost easy-rsa]# cp keys/vpnserver.crt keys/vpnserver.key keys/dh2048.pem /etc/openvpn/

[root@localhost easy-rsa]# ll /etc/openvpn/

blob.png

至此,Server端证书就制作完毕。

3.3 制作Client端证书

Server端证书制作完成后,我们现在开始制作Client端证书,如下:

[root@localhost easy-rsa]# ./build-key user1

blob.png

 

注意:上述命令中的user1,是客户端的名称。这个是可以进行自定义的。

如果你想快速生成用户证书不需要手工交互的话,可以使用如下命令:

[root@localhost easy-rsa]# ./build-key –batch user2

blob.png

查看生成的证书,如下:

[root@localhost easy-rsa]# ll keys/

blob.png

通过上图,我们可以很明显的看出已经生成了user1.csr、user1.crt和user1.key这个三个文件。user1.crt和user1.key两个文件是我们要使用的。

如此,Client端证书就制作完毕。

 

四、配置Server端

所有证书制作完毕后,我们现在开始配置Server端。Server端的配置文件,我们可以从openvpn自带的模版中进行复制。如下:

[root@localhost easy-rsa]# cp /usr/share/doc/openvpn-2.3.10/sample/sample-config-files/server.conf /etc/openvpn/server.conf.bak

[root@localhost easy-rsa]# cd /etc/openvpn/

blob.png

现在我们通过修改server.conf.bak文件来生成server.conf文件,如下:

[root@localhost openvpn]# grep -vE "^#|^;|^$" server.conf.bak > server.conf

[root@localhost openvpn]# vim server.conf

port 1194

proto tcp

dev tun

ca ca.crt

cert vpnserver.crt

key vpnserver.key

dh dh2048.pem

server 10.8.0.0 255.255.255.0

ifconfig-pool-persist ipp.txt

keepalive 10 120

comp-lzo

persist-key

persist-tun

status openvpn-status.log

verb 3

blob.png

与原模版文件相比,在此我修改几个地方。

第一、修改了openvpn运行时使用的协议,由原来的UDP协议修改为TCP协议。生成环境建议使用TCP协议。

第二、修改了openvpn服务器的相关证书,由原来的server.csr、server.key修改为vpnserver.crt、vpnserver.key。

注意:上述server.conf文件中vpnserver.crt、vpnserver.key、dh2048.pem要与/etc/openvpn/目录下的相关文件一一对应。

同时,如果上述文件如果没有存放在/etc/openvpn/目录下,在server.conf文件中,我们要填写该文件的绝对路径。如下所示:

blob.png

配置文件修改完毕后,我们现在来启动openvpn,使用如下命令:

[root@localhost openvpn]# service openvpn start

[root@localhost openvpn]# ss -tnlp |grep 1194

blob.png

通过上图,我们可以的看出openvpn已经在此启动,使用的TCP协议的1194端口。

 

五、配置Client端

Server端配置并启动后,我们现在来配置Client端。我们主要在Windows OS上。下载安装“openvpn-2.1.1-gui-1.0.3-install-cn-64bit”,地址为: https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/vpntech/openvpn-2.1.1-gui-1.0.3-install-cn-64bit.zip

 

5.1 在Windows OS上

无论是在Windows OS还是在Linux OS上Client端的配置,我们都需要把Client证书、CA证书以及Client配置文件下载下来。

先来下载Client证书和CA证书,Client证书我们主要使用crt和key结尾的两个文件,而CA证书我们主要使用crt结尾的文件。如下:

blob.png

先把这几个文件复制到/root/user1目录下,然后再把openvpn客户端的配置文件模版也复制到/root/user1/目录下。如下:

[root@localhost keys]# mkdir /root/user1/ -pv

[root@localhost keys]# cp /usr/share/doc/openvpn-2.3.10/sample/sample-config-files/client.conf /root/user1/client.ovpn

[root@localhost keys]# cp user1.crt user1.key /root/user1/

blob.png

 

复制完毕后,回到/root/user1目录下,然后使用sz命令把这几个文件下载到windows上存放user1配置文件的目录。如下:

windows下路径C:\Program Files (x86)\OpenVPN\config,存放user1的配置文档,新建文件夹user1

blob.png

 

[root@localhost keys]# cd /root/user1

[root@localhost user1]# sz *

blob.png

 

blob.png

 

下载完毕后,然后编辑client.ovpn,如下:

client

dev tun

proto tcp

remote openvpnserver.test.com 1194

resolv-retry infinite

nobind

persist-key

persist-tun

ca ca.crt

cert user1.crt

key user1.key

ns-cert-type server

comp-lzo

verb 3

 

blob.png 

 

Client配置文件client.ovpn,修改了几个地方:

第一、使用的协议,由原来的UDP修改为TCP,这个一定要和Server端保持一致。否则Client无法连接

第二、remote地址,这个地址要修改为Server端的地址。

第三、Client证书名称,这个要和我们现在使用用户的Client证书名称保持一致。

 

现在我们来启动openvpn客户端连接Server,如下:

blob.png 

点击“连接服务”,会出现如下的弹窗:

blob.png

如果配置都正确的话,会出现如下的提示:

blob.png 

通过上图,我们可以很明显的看到Client已经正确连接Server端,并且获得的IP地址是10.8.0.6。

下面我们在本机查看下,该IP地址,如下:

blob.png 

通过上图,我们可以看到本机确实已经连接到Server端,而且获得的IP地址也确实为10.8.0.6。

到此为止,openvpn的配置完成,如果需要设定vpnClient访问特定网段,例如访问“192.168.3.0,192.168.4.0,192.168.100.0”,则需要在Server的配置文件里增加以下路由推送语句。

blob.png 

push "route 192.168.3.0 255.255.255.0"

push "route 192.168.4.0 255.255.255.0"

push "route 192.168.100.0 255.255.255.0"

重启openvpn服务即可。

 

此文参考自http://www.ilanni.com/?p=9837,并根据实际环境进行了修改,非常感谢~~烂泥行天下-起于尘土,翱翔于九天!分享技术,永不止步……  http://www.ilanni.com/

原创文章,作者:Tuolei,如若转载,请注明出处:http://www.178linux.com/15145

(3)
TuoleiTuolei
上一篇 2016-04-20 13:14
下一篇 2016-04-21 15:45

相关推荐

  • 文本查看及处理工具

    文本查看及处理工具 wc wc命令用来计算数字。利用wc指令我们可以计算文件的Byte数、字数或是列数 语法 wc(选项)(参数) 选项 -c或–bytes或——chars:只显示Bytes数; -l或——lines:只显示列数; -w或——words:只显示字数。 参数 文件:需要统计的文件列表 实例 [root@localhost tmp]# cat …

    Linux干货 2018-03-18
  • 硬链接与软链接

    硬连接:          其本质就是:一个文件,多个名字。注意:目录是没有硬链接的。 用ln filename linkname创建硬链接,注意源文件和链接文件位置顺序,硬链接不可以跨分区建。 在创建硬链接时会增加硬连接数,可以通过ls –l查看,如下图所示的,可看到硬链接数。…

    2017-07-20
  • N28-第四周

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。
    2、编辑/etc/group文件,添加组hadoop。
    3、手动编辑/etc/passwd文件新增一行,添加用户hadoop,其基本组ID为hadoop组的id号;其家目录为/home/hadoop。
    4、复制/etc/skel目录为/home/hadoop,要求修改hadoop目录的属组和其它用户没有任何访问权限。
    5、修改/home/hadoop目录及其内部所有文件的属主为hadoop,属组为hadoop。
    6、显示/proc/meminfo文件中以大写或小写S开头的行;用两种方式;
    7、显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户;
    8、显示/etc/passwd文件中其默认shell为/bin/bash的用户;
    9、找出/etc/passwd文件中的一位数或两位数;
    10、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;
    11、显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;
    12、打出netstat -tan命令执行结果中以‘LISTEN’,后或跟空白字符结尾的行;
    13、添加用户bash, testbash, basher, nologin (此一个用户的shell为/sbin/nologin),而后找出当前系统上其用户名和默认shell相同的用户的信息;

    2017-12-30
  • linux 系统启动流程

    假设以个人架设的linux主机为例:当你按下电源键之后,计算机硬件会主动读取BIOS来加载硬件信息及进行硬件系统的自我测试,之后系统会主动读取系统第一个可启动的设备,此时就可以读入引导装载程序了。 引导程序可以指定使用哪个内核文件来启动,并实际加载内核到内存中解压缩与执行,此时内核就能够开始在内存内活动,并检测所有硬件信息,与加载适当的驱动程序来使这部主机开…

    Linux干货 2016-09-12
  • find命令简单总结

     find     字符串类查询:            -type   //根据文件类型查找       &…

    Linux干货 2015-09-14
  • Linux用户及用户组管理

    马哥网络教育22期第三周练习 Linux用户及用户组管理 Linux是个多用户多任务的分时操作系统,所有一个要使用系统资源的用户都必须先向系统管理员申请一个账号,然后以这个账号的身份进入系统。用户的账号一方面能帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也能帮助用户组织文件,并为用户提供安全性保护。每个用户账号都拥有一个惟一的…

    Linux干货 2016-09-19

评论列表(1条)

  • stanley
    stanley 2016-04-26 09:51

    有markdown的润色会更上一层楼