烂泥:ubuntu 14.04搭建Open***服务器

本文首发于烂泥行天下html

公司分部须要链接公司内部的服务器,可是该服务器只容许公司内部的网络访问。linux

为了解决这个问题,打算使用×××。对于×××之前使用最多的是PPTP这个解决方案,可是PPTP相对于open***来讲,没有open***安全,并且PPTP在linux下命令行支持不是很好,稳定性也不如open***。因此最后就选择open***来搭建×××。ubuntu

PS:本文在ubuntu 14.04上安装,open***服务器地址为192.168.1.8。vim

有关open***在centos6.6 64bit的配置彻底可使用,已经通过验证。文章后有centos详细配置命令及步骤。windows

1、open***原理centos

open***经过使用公开密钥(非对称密钥,加密解密使用不一样的key,一个称为Publice key,另一个是Private key)对数据进行加密的。这种方式称为TLS加密安全

open***使用TLS加密的工做过程是,首先××× Sevrver端和××× Client端要有相同的CA证书,双方经过交换证书验证双方的合法性,用于决定是否创建×××链接。服务器

而后使用对方的CA证书,把本身目前使用的数据加密方法加密后发送给对方,因为使用的是对方CA证书加密,因此只有对方CA证书对应的Private key才能解密该数据,这样就保证了此密钥的安全性,而且此密钥是按期改变的,对于窃听者来讲,可能尚未破解出此密钥,×××通讯双方可能就已经更换密钥了。网络

2、安装open***ssh

open***的安装咱们分为apt-get方式和源码方式,下面咱们只讲解apt-get方式的安装。有关源码方式安装open***,可自行百度。

apt-get方式安装,咱们可使用以下命令:

sudo apt-get -y install open*** libssl-dev openssl

clip_p_w_picpath001

open***安装完毕后,咱们来查看open***的版本,以下:

open*** --version

clip_p_w_picpath002

经过上图,咱们能够看到open***目前的版本为2.3.2。这个版本号,建议记住。

咱们再来查看下open***安装时产生的文件,以下:

dpkg -L open*** |more

clip_p_w_picpath003

经过上图,咱们能够很明显的看出open***已经有相关配置的模版了。

open***安装完毕后,咱们再来安装easy-rsa。

easy-rsa是用来制做open***相关证书的。

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

sudo apt-get -y install easy-rsa

clip_p_w_picpath004

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

dpkg -L easy-rsa |more

clip_p_w_picpath005

经过上图,咱们能够很明显的看到easy-rsa已经安装到/usr/share/easy-rsa/目录下。

3、制做相关证书

根据第一章节open***的工做原理,咱们能够知道open***的证书分为三部分:CA证书、Server端证书、Client端证书。

下面咱们经过easy-rsa分别对其进行制做。

3.1 制做CA证书

open***与easy-rsa安装完毕后,咱们须要在/etc/open***/目录下建立easy-rsa文件夹,以下:

sudo mkdir /etc/open***/easy-rsa/

clip_p_w_picpath006

而后把/usr/share/easy-rsa/目录下的全部文件所有复制到/etc/open***/easy-rsa/下,以下:

sudo cp -r /usr/share/easy-rsa/* /etc/open***/easy-rsa/

clip_p_w_picpath007

固然,咱们也能够直接在/usr/share/easy-rsa/制做相关的证书,可是为了后续的管理证书的方便,咱们仍是把easy-rsa放在了open***的启动目录下。

注意:因为咱们如今使用的是ubuntu系统,因此咱们必须切换到root用户下才能制做相关证书,不然easy-rsa会报错。若是是centos系统,则不存在此问题。

切换到root用户下,使用以下命令:

sudo su

clip_p_w_picpath008

在开始制做CA证书以前,咱们还须要编辑vars文件,修改以下相关选项内容便可。以下:

sudo vi /etc/open***/easy-rsa/vars

export KEY_COUNTRY="CN"

export KEY_PROVINCE="HZ"

export KEY_CITY="HangZhou"

export KEY_ORG="ilanni"

export KEY_EMAIL="ilanni@ilanni.com"

export KEY_OU="ilanni"

export KEY_NAME="***ilanni"

clip_p_w_picpath009

vars文件主要用于设置证书的相关组织信息,红色部分的内容能够根据本身的实际状况自行修改

其中export KEY_NAME="***ilanni"这个要记住下,咱们下面在制做Server端证书时,会使用到。

注意:以上内容,咱们也可使用系统默认的,也就是说不进行修改也是可使用的。

而后使用source vars命令使其生效,以下:

source vars

./clean-all

clip_p_w_picpath010

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

如今开始正式制做CA证书,使用以下命令:

./build-ca

clip_p_w_picpath011

一路按回车键便可。制做完成后,咱们能够查看keys目录。以下:

ll keys/

clip_p_w_picpath012

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

如今把该CA证书的ca.crt文件复制到open***的启动目录/etc/open***下,以下:

cp keys/ca.crt /etc/open***/

ll /etc/open***/

clip_p_w_picpath013

3.2 制做Server端证书

CA证书制做完成后,咱们如今开始制做Server端证书。以下:

./build-key-server ***ilanni

clip_p_w_picpath014

clip_p_w_picpath015

注意:上述命令中***ilanni,就是咱们前面vars文件中设置的KEY_NAME

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

ll keys/

clip_p_w_picpath016

经过上图,能够很明显的看到已经生成了***ilanni.crt、***ilanni.key和***ilanni.csr三个文件。其中***ilanni.crt和***ilanni.key两个文件是咱们要使用的。

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

./build-dh

clip_p_w_picpath017

查看生成的文件,以下:

ll keys/

clip_p_w_picpath018

经过上图,咱们能够很明显的看出已经生成了dh2048.pem,这个文件。

以上操做完毕后,把***ilanni.crt、***ilanni.key、dh2048.pem复制到/etc/open***/目录下,以下:

cp keys/***ilanni.crt keys/***ilanni.key keys/dh2048.pem /etc/open***/

clip_p_w_picpath019

如此,Server端证书就制做完毕。

3.3 制做Client端证书

Server端证书制做完成后,咱们如今开始制做Client端证书,以下:

./build-key ilanni

clip_p_w_picpath020

clip_p_w_picpath021

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

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

./build-key --batch test1

clip_p_w_picpath022

clip_p_w_picpath023

查看生成的证书,以下:

ll keys/

clip_p_w_picpath024

经过上图,咱们能够很明显的看出已经生成了ilanni.csr、ilanni.crt和ilanni.key这个三个文件。其中ilanni.crt和ilanni.key两个文件是咱们要使用的。

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

4、配置Server端

全部证书制做完毕后,咱们如今开始配置Server端。Server端的配置文件,咱们能够从open***自带的模版中进行复制。以下:

cp /usr/share/doc/open***/examples/sample-config-files/server.conf.gz /etc/open***/

cd /etc/open***/

clip_p_w_picpath025

解压server.conf.gz 文件,使用以下命令:

gzip -d server.conf.gz

clip_p_w_picpath026

注意:上述命令的意思是解压server.conf.gz文件后,而后删除原文件。

如今咱们来修改server.conf文件,以下:

grep -vE "^#|^;|^$" server.conf

port 1194

proto tcp

dev tun

ca ca.crt

cert ***ilanni.crt

key ***ilanni.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 open***-status.log

verb 3

clip_p_w_picpath027

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

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

第2、修改了open***服务器的相关证书,由原来的server.csr、server.key修改成***ilanni.crt、***ilanni.key。

第3、修改了Diffie-Hellman文件,由原来的dh1024.pem修改成dh2048.pem。

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

同时,若是上述文件若是没有存放在/etc/open***/目录下,在server.conf文件中,咱们要填写该文件的绝对路径。以下所示:

clip_p_w_picpath028

配置文件修改完毕后,咱们如今来启动open***,使用以下命令:

/etc/init.d/open*** start

netstat -tunlp |grep 1194

clip_p_w_picpath029

经过上图,咱们能够很明显的看出open***已经在此启动,并且也确实使用的TCP协议的1194端口。

5、配置Client端

Server端配置并启动后,咱们如今来配置Client端。Client端根据操做系统的不一样,又分为Linux OS上和Windows OS上。如下咱们对此一一惊醒讲解。

5.1 在Windows OS上

不管是在Windows OS仍是在Linux OS上Client端的配置,咱们都须要把Client证书、CA证书以及Client配置文件下载下来。

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

clip_p_w_picpath030

先把这几个文件复制到/home/ilanni/目录下,而后再把open***客户端的配置文件模版也复制到/home/ilanni/目录下。以下:

cp ilanni.crt ilanni.key ca.crt /home/ilanni/

cp /usr/share/doc/open***/examples/sample-config-files/client.conf /home/ilanni/

clip_p_w_picpath031

修改以上几个文件的用户属性,以下:

chown ilanni:ilanni ilanni.*

chown ilanni:ilanni ca.crt

clip_p_w_picpath032

修改完毕后,退出root用户,回到ilanni用户的家目录下,而后使用sz命令把这几个文件下载下来。以下:

sz -y ilanni.crt ilanni.key ca.crt client.conf

clip_p_w_picpath033

clip_p_w_picpath034

下载完毕后,把client.conf文件重命名为client.o***,而后进行编辑,以下:

client

dev tun

proto tcp

remote 192.168.1.8 1194

resolv-retry infinite

nobind

persist-key

persist-tun

ca ca.crt

cert ilanni.crt

key ilanni.key

ns-cert-type server

comp-lzo

verb 3

clip_p_w_picpath035

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

第1、使用的协议,由原来的UDP修改成TCP,这个必定要和Server端保持一致。不然Client没法链接

第2、remote地址,这个地址要修改成Server端的地址。

第3、Client证书名称,这个要和咱们如今使用的Client证书名称保持一直。

以上修改完毕后,咱们要把这个几个文件放在同一个文件夹中,而且必定要保持client.o***这个文件名称是惟一的。不然在open***客户端链接时,会报错。以下:

clip_p_w_picpath036

安装open*** for windows客户端,咱们能够从这个地址下载,以下:http://build.open***.net/downloads/releases/

注意:下载的客户端版本号必定要与服务器端open***的版本一直,不然可能会出现没法链接服务器的现象。

咱们如今服务器端的open***版本是2.3.2,因此客户端也建议使用2.3.2的版本。

下载并安装后,把testilanni这个文件夹复制到open***客户端安装的config文件夹。以下:

clip_p_w_picpath037

如今咱们来启动open***客户端链接Server,以下:

clip_p_w_picpath038

注意:上图中的client就是根据client.o***,这个文件名来的。

点击connect,会出现以下的弹窗:

clip_p_w_picpath039

若是配置都正确的话,会出现以下的提示:

clip_p_w_picpath040

经过上图,咱们能够很明显的看到Client已经正确链接Server端,而且得到的IP地址是10.8.0.6。

下面咱们在本机查看下,该IP地址,以下:

clip_p_w_picpath041

经过上图,咱们能够看到本机确实已经链接到Server端,并且得到的IP地址也确实为10.8.0.6。

5.2 在Linux OS上

在Windows OS上测试完毕后,咱们如今在切换到linux系统。在此咱们以ubuntu14.04为例。

要在ubuntu上链接open***Server端,咱们须要先安装open***软件,以下:

sudo apt-get -y install open***

clip_p_w_picpath042

安装完毕后,把咱们刚刚在Windows系统配置的文件上传到ubuntu系统中。以下:

clip_p_w_picpath043

注意:上传完毕后,咱们不须要修改任何配置文件。由于这几个文件在Windows下已经能够正确链接open*** Server端。

注意:在链接Server端以前,必定要切换到root用户下。由于在链接Server端时,open***会在本机建立一个虚拟网卡,若是使用普通用户的话,是没有权限建立虚拟网卡的。

切换到root用户,使用sudo su命令,以下:

sudo su

clip_p_w_picpath044

如今开始链接Server端,使用以下命令:

open*** --config client.o***

clip_p_w_picpath045

若是出现上图的信息,说明已经正确链接Server端。

如今咱们在本机使用ifconfig进行查看,在此建议从新开启一个新的ssh窗口,以下:

ifconfig

clip_p_w_picpath046

经过上图,咱们能够很明显的看出,本机已经正确链接Server端,而且也在本机虚拟出一个叫tun0的虚拟网卡。

若是想让ubuntu开机启动并后台运行的话,能够把这条命令写入rc.local文件中。以下:

/usr/sbin/open*** --config /home/ilanni/testilanni/client.o*** >/var/log/open***.log &

clip_p_w_picpath047

注意,命令末尾的&符号不能省略,不然将可能阻塞系统的正常启动。

同时这个时候,client.o***文件中有关证书的配置必定要写成绝对路径,要否则系统会报错。以下:

clip_p_w_picpath048

若是是centos系统的话,咱们首先须要安装epel源,而后安装open***软件包。以下:

rpm -ivh http://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm

yum -y install open***

以上安装完毕后,把Windows已经成功链接的Client相关文件上传到centos系统中,而后链接方法和ubuntu系统上同样。

注意:若是在centos系统要开机启动的话,也是和ubuntu系统是同样的,可是有一点须要指出就是Client相关配置文件不能放在/root目录下。

给一个正确配的例子,以下:

clip_p_w_picpath049

clip_p_w_picpath050

clip_p_w_picpath051

由于centos的open*** server配置和unubutn基本同样,因此就再也不单独写一篇有关centos下安装配置open*** sever的文章。

可是附上在centos下,全部执行的命令。以下:

rpm -ivh http://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm

yum -y install open***

rpm -ql open***

cat /usr/share/doc/open***-2.3.7/sample/sample-config-files/README

http://open***.net/howto.html

yum -y install easy-rsa

rpm -ql easy-rsa

cd /usr/share/easy-rsa/2.0/

vim vars

export KEY_COUNTRY="CN"

export KEY_PROVINCE="HangZhou"

export KEY_CITY="HZ"

export KEY_ORG="ilanni"

export KEY_EMAIL="ilanni@ilanni.com"

export KEY_OU="MyOrganizationalUnit"

export KEY_NAME="ilanni"

source vars

./clean-all

./build-ca

./build-key-server ilanni

./build-dh

./build-key centos

cd  keys

cp ca.crt ilanni.key ilanni.crt dh2048.pem /etc/open***/

cp ca.crt centos.key centos.crt /root/

cp /usr/share/doc/open***-2.3.7/sample/sample-config-files/client.conf /root

cp /usr/share/doc/open***-2.3.7/sample/sample-config-files/server.conf /etc/open***/

服务器端配置文件:

vim /etc/open***/server.conf

grep -vE ";|#|^$" /etc/open***/server.conf

port 1194

proto udp

dev tun

ca ca.crt

cert ilanni.crt

key ilanni.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 open***-status.log

verb 3

客户端配置文件:

grep -vE ";|#|^$" centos.conf

client

dev tun

proto udp

remote 182.254.223.140 1194

resolv-retry infinite

nobind

persist-key

persist-tun

ca ca.crt

cert centos.crt

key centos.key

remote-cert-tls server

comp-lzo

verb 3