Open***

环境:

拓扑图:

wKiom1dopHmRdyUjAAI188ALTwU816.png-wh_50


                                                           

                     出差人员win7 client    

                                                                                     115.16.1.8/30

                                                                   |

              郑州站点------------互联网-------上海站点

              内网:192.168.20.0   |         内网:192.168.10.0.24

                            |                                                    

                      eth0 :   1.1.1.1/30            

                      北京Open ×××(iptables)

                      eth1:  192.168.0.1/2                                                     |

                      eth0:  192.168.0.100/24

                        公司内网网络

希望屏幕前的你,能看懂O(∩_∩)O~

以下内容可能有错误的地方,发现了还行给予提示,发送到邮箱:dockerhub@163.com

在此谢过!!!


系统版本:CentOS release 6.6 (Final)---64位

内核版本:CentOS release 6.6 (Final)

软件版本:open***-2.3.11-1.el6.x86_64

                    easy-rsa-2.2.2-1.el6.noarch

一、安装前的准备

1.关闭SELINUX

$sudo sed -ri   '/^SELINUX=.*/cSELINUX=disabled'              /etc/selinux/config


2.在防火墙上开启TCP 1194 端口,***的监听端口

$sudo  iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

$sudo iptables -t filter -A INPUT-p tcp -i eth0 –dport 1194 -j ACCEPT


3.时间同步,很重要哦

$sudo  ntpdate  1.cn.pool.ntp.org

注:eth0为open***的监听网卡接口,是自己的网络环境而定


二、安装软件

1.配置YUM

$sudo  yum  -y   install   epel-releas

2.开启YUM缓存

$sudo  sed  -ri '/^keepcache=.*/ckeepcache=1' /etc/yum.con

3.清空YUM缓存的软件包

$sudo yum clean  packages

4.安装软件包

假如你有本地光盘镜像源,用如下的方法之间安装

$sudo   yum -y install  open***  easy-rsa

假如你可以连接互联网,用如下的方法安装

$sudo  rpm -ivh    http://download.fedoraproject.org/pub/epel/6/x86_64/epel-\

                release-6-8.noarch.rpm

注意:上面是一行

5.把缓存好的open***所需要的软件包打包,以备在其他Linux站点或客户端用

$ tar  jcf open***.tar.bz2    $(find /var/cache/yum/x86_64/6/  -iname "*.rpm" )

注:解压的时候先看一下压缩包里的内容,用以下命令:

tar  jtf  open***.tar.bz2

你可以只解压里面的文件,不要里面的目录。用这个命令:

tar jxf  open***.tar.bz2 --strip-components=7  -C    指定的文件夹

这里的 7是解压文件前面有斜杠“/”的个数,我这里是7层


三、在×××服务器端配置证书和私钥

1.建立自签名的CA证书和私钥

a.  修改一下建立签发证书需要的变量,基本作用就是设置一下签发证书的单位的一些信息

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

$sudo vim vars

export KEY_COUNTRY="CN"                        //国家

export KEY_PROVINCE="BJ"                        //省份        

export KEY_CITY="BJ"                          //城市

export KEY_ORG="SharkYun"                       //所属机构

export KEY_EMAIL="dockerhub@163.com"                //邮箱


$suod source  vars                           //初始化变量


b.  生成CA的私钥和证书(CA机构也就是这台open*** server,字签名的嘛!)

$sudo ./build-ca                             //一路回车


c.  为这台open*** server 生成私钥和由CA机构签名的证书

$sudo ./buid-key-server  ***server                //一路回车,输2次y                                               //***server是自定义的证书名字


d.  为每个open***客户端生成他们的私钥和CA机构签发的证书;因为默认情况下,每个证书同一时间

只能提供一个客户端进行登录到*** server;这里我们依次生成上海、郑州以及出差人员西瓜甜的私  

钥和证书,证书名都是自定义的                

$sudo  ./buid-key    bj-client                //一路回车,输2次y

$sudo  ./buid-key    zz-client                //一路回车,输2次y

$sudo  ./buid-key    xiguatian-client           //一路回车,输2次y


e.  创建秘钥协商文件     迪菲·赫尔曼密钥,这里是新版本,会生成2048位的

$sudo  ./build-dh                                                       //时间稍长,请耐心等待…


f.  为了防止DDOS***和UDP淹没等恶意***,生成一下   ta.key

$sudo open***  --genkey   --sercret  keys/ta.key


g.  到这里,我们需要的密钥和证书暂时创建完成,以后若还有出差人员需要,再创建一个就行了;

   ##现在查看一下。

$pwd

/usr/share/easy-rsa/2.0

$sudo  ls  -l   keys


h.  把我们用到的证书和私钥用合适的方式传输到合适的位置,每个客户端都需要CA证书和,以及

    open*** server 会需要CA证书和ta.key证书 ca.key  

    注意:这里要说明一下,以 .crt  结尾的文件是签名的证书,以 .key 结尾的文件是私钥,以 .csr

     为 结尾的文件是申请签名的用的,这个现在不需要了。以 .crt 和 .key 结尾的文件是我们需要的。

$sudo cp    -a   keys/{ca.crt,***server{crt,key},dh2048.pem,ta.key}      /etc/open***/

     下面的操作是把各个客户端所需有的文件打包,方便传送到各个客户端的机器上;至于怎么 传,

     建议用u盘吧,毕竟包含了敏感信息,不要用网络。至于上海和郑州的站点,安装个加密软件传

     送会比较安全。

$sudo cd  keys

$sudo tar    jcf    bj-client.tar.bz2   ca.crt   ta.key   bj-client*  

$sudo tar    jcf    zz-client.tar.bz2   ca.crt   ta.key   zz-client*

$suod tar    jcf    xiguatian-client.tar.bz2   ca.crt    ta.key      xiguatian-client*


四、配置open*** server

下面文中\表示一行中的shell内换行符,这个大家应该都知道啦。

1.先从示例中拷贝一份过来

$sudo cp /usr/share/doc/open***-2.3.11/sample    /sample-config-files/server.conf /etc/open***/server.conf

注意: 上面是一行

2.配置open***server的配置文件,修改成为一下内容

#*** server 的监听地址

local    1.1.1.1

#监听断口

port    1194

#采用的协议,默认是udp协议;假如有http-proxy的话,就必须用tcp了。

proto   tcp

#采用路由隧道模式

dev    tun

#CA机构的证书的位置和名字,可以绝对路径,也可以相对路径,相对路径是相对与此文件

#所在的目录

ca    ca.crt

#此***服务器的证书位置以及证书名字

cert     ***server.crt

#此***服务器的私钥位置和名字,这个文件要保护好,确保其安全!!!

key   ***server.key  # This file should be kept secret

#协商加密的文件

dh   keys/dh2048.pem


#这个是隧道的网络,第一个地址会分配个此***服务器

server   10.8.0.0 255.255.255.0

#客户端重新连接***时,会优先从此文件中匹配后,分配给它地址,位置在此文件目录下

ifconfig-pool-persist ipp.txt


#下面三项是用push来想所用客户端发布到各个站点内网的路由信息

push "route 192.168.10.0 255.255.255.0"    //上海的内网

push "route 192.168.20.0 255.255.255.0"    //郑州的内网

push "route 192.168.0.0 255.255.255.0"     //北京的内网


#下面两项是用route来向本地发布到各个站点的路由信息

route 192.168.10.0  255.255.255.0         //上海的内网

route 192.168.20.0  255.255.255.0          //郑州的内网

#这里说明一下,要想真正实现北京/上海和郑州的各个内网之间互相通信,还需要在各自的内网主机设

#置各自的内网网关定义了各个站点的自定义配置文件所在的文件夹(这里是#相对路径),主要作用是

#用iroute来定义允许其他站点访问自己的内网的网络;在ccb文件夹下创建;

#各自站点的配置文件,文件名必须是和创建站点证书名字一样!!!

client-config-dir ccd

#这个选项定义了客户端和客户端之间和以通信

client-to-client

#保持时间和超时断开时间。//这个解释是我自己的理解

keepalive 10 120


#这个是防止DDOS***,使用的私钥位置和名字

tls-auth ta.key 0 # This file is secret


#传输数据进行过程中采用压缩

comp-lzo

#×××服务器启动后会以下面的用户和组运行,主动放弃root权限

user nobody

group nobody


#当服务器因超时主动断开,客户端重新连接时,保持的之前连接用的私钥和地址的有效性

persist-key

persist-tun

#×××服务器的状态日志

status open***-status.log

#日志会以添加的形式去写入日志文件,注意要日志切割!

log-append open***.log


#记录日志的级别,默认是3,5会有更多的信息让我们去调试

verb 5

#这个好像就是日志切割吧,不确定

mute 20


#下面最重要,定义了出差或者在家的客户端,在采用证书的方式进行验证的同时,还会

#采用用户名和密码的方式进行验证

script-security 2

auth-user-pass-verify /etc/open***/auth_pass.sh via-file

#说明一下,auth_pass.sh是用到的脚本,脚本里有定义存放用户名和密码的文件

# via-file  表示从文件的方式获取用户名和密码

# via-env   表示从环境变量的方式获取用户名和密码 //这种方式我还每尝试成功。


#当我们采用TCP协议时,建议用此选项降低吞吐量,从而来降低网络延时

socket-flags TCP_NODELAY

#享客户端发布此选项,因为TCP协议嘛,需要两端都设置

push "socket-flags TCP_NODELAY"


3.在open*** server上定义客户端各个站点的配置文件

$sudo mkdir  /etc/open***/ccb

$sudo vim /etc/open***/ccb/sh-client

iroute 192.168.10.0   255.255.255.0            //上海的内网

$sudo vim /etc/open***/ccb/zz-client

iroute 192.168.20.0   255.255.255.0             //郑州的内网


4.编写需要用到的脚本

$sudo vim  /etc/open***/auth_pass.sh

#!/bin/bash

# the username+password is stored in a temporary file

# pointed to by $1

username=`head  -1  $1`

password=`tail  -1  $1`

if  grep "$username:$password"  pass_file  >  /dev/null 2>&1

then

      exit 0

else

      if grep "$username" pass_file > /dev/null 2>&1

      then

           echo "auth-user-pass-verify: Wrong password entered for user '$username'"

      else

            echo "auth-user-pass-verify: Unknown user '$username'"

       fi

       exit 1

fi

######################## The  end ##############################


5.创建用户和密码对应文件

名字要和脚本中的一样

$sudo vim /etc/open***/pass_file

xiguatian:123

shanghai:123

zhengzhou:123

#注意格式,密码和用户名中间是冒号;这显然不安全,所有我们采用了证书双重验证。

6.在open*** server上开启路由转发功能

$sudo sed -i '/^net.ipv4_forward = */cnet.ipv4.ip_forward = \

1'  /etc/sysctl.conf

$sudo sysctl -p

7.启动服务,设置开机自启动

$service open***  restart && chkconfing  open*** on

 

客户端的配置请看下一篇