Open***
环境:
拓扑图:
出差人员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
客户端的配置请看下一篇
https://blog.51cto.com/sharkyun/1788166