一、××× 介绍

××× virtural private network ,依靠ISP,NSP ,在公共网络中建立专用数据通信网络的技术,可以再企业与个人之间建立通信隧道.可以理解为通过私有的隧道技术在公共数据网络上模拟出来的和专网有同样功能特点的点到点的专线技术。


pptp ,ipsec ,ssh,LVS TUN


二、×××一般的作用:

1,建立IDC与IDC之间局域网通信

2,出差拨号到公司内部,访问某些服务

 

三、×××的分类

1,远程访问×××服务

a,即个人出差笔记本拨号到公司办公网

b,对于运维人员需要个人电脑拨号到企业网站IDC机房,远程维护IDC内网服务器。(牤牛阵法)


2,企业内部网络之间的×××服务

在公司的分支机构的局域网和公司总部LAN之间的×××连接。例如各大超市之间业务结算.


3,互联网公司多IDC机房之间×××服务


4,企业外部×××服务

LAN---LAN


5,访问国外网站 (×××)



四、常见的隧道协议

1,PPTP ,点对点的隧道协议,比较适合远程的企业用户拨号到企业进行办公等应用,只能建立单一隧道.


2,L2TP (layer2 tunneling protocol)第2层隧道协议,是一种工业标准internet隧道协议。PPTP 和L2TP 都使用PPP协议对数据进行封装,然后添加附加包头用于数据在互联网上传输。

L2TP支持两端点之间多隧道


3,ipsec ip安全协议,实际上是一套协议包而不是一个独立的协议

一般在多机房互联使用较多


4,SSL ×××


SSL 协议提供了数据加密,端点验证,信息完整性等特征。



SSL独立于应用,SSL本身就被所有的web浏览器支持。典型的SSLV *** 应用如open ***,一个比较好的开源软件,它并不是基于web的×××软件,也不与IPSEC及其他×××软件包容。C/S架构,单独安装open ×××客户端(此处不及PPTP,唯一一个点)




五、实现×××功能的常见开源产品

1,PPTP ××× 

最大优势在于,无需windows客户端安装***客户端软件,默认windows支持PPTP ***拨号,企业对企业也不太好,许多路由器不支持。

2,SSL ××× (open ***) 

适合用于pptp的应用场景,还合适企业异地两地之间分公司的×××不间断地按需连接,需要安装客户端软件。 

开源软件:open***

3,ipsec ***  企业和idc之间××× 不间断按需连接,并且部署更简单方便   

ipsec *** 的开源软件openswan


六、根据企业的使用按需选择×××方案

1,硬件级别的,防火墙,负载均衡

2,开源软件 open*** ipsec 

3,对于开源软件的产品选择,建议:

  a,个人拨号open*** ,功能强大,稳定

  b,多个企业之间或者多个IDC机房直接互联,选择ipsec (openswan)或者open*** .可以满足各种企业需求



###########################################################################################

1,1,1open*** 开源产品

1.1.2,open***的产品介绍


open***是一个用于创建虚拟专用网络加密通道的软件包,open*** 依赖SSL,TSL协议,诞生的目的,安全,以及数据完整性保障。

TSL是SSL 的继任者、


open ***的加密原理:


目前open ***使用TLS加密


加密分为 :可逆加密,不可逆加密

不可逆加密分为:

对称加密(AES)和非对称加密(RSA)


1.1.3open ***的多种身份认证:

1,预享私钥  2,第三方证书以及用户名、密码组合 3,open ***2.0以后使用了用户名和密码组合身份认证


open ***通信原理


open*** 所有的通信基于一个单一的ip端口,(默认为1194),建议使用tcp,也可以使用udp(会丢包)

open***的核心技术是虚拟网卡。其次是SSL协议实现。



1.1.4 案例:

1,  企业生产场景常用×××工作结构图  open*** 

wKiom1YkurnTOyWUAAGsYTF1v7o785.jpg

a,企业的远程访问内部机器 如图远程访问open***

首先客户端和服务器端都有ca证书,客户端有自己的密钥

(1)此时访问时候,回路由有两种方案,

a,添加lan server的网关为*** server的网关ip(172.16.1.7),有时工作环境不允许此种做

b,添加网段路由。

(2) 此时访问时候,在××× server做NAT映射,凡是请求连接访问10.8.0.x 网段的请求全部转发到内网网段172.16.1.7,

 


2,   企业***远程拨号访问场景逻辑图  ipsec


wKioL1YkuzPyQRz3AALJ0b31k0k867.jpg



1.1.5 open*** 生产环境需求以及环境模拟实现上图案例一

1.1.5.1 环境需求
  设备                                    ip
笔记本PC(adsl上网)                    192.168.0.0/24(办公室DHCP)               
open***   server(双网卡)                 eth0:192.168.2.28(外网)                                              eth1:172.16.1.28(内网)
IDC机房内部局域网服务器                  172.16.1.0/24(IDC 机房局域网无外网IP,又希望adsl 上网笔记本(运维人员),在不同网络内能够直接访问
app  server                         eth0:172.16.1.17(内网)


实现需求  在远端通过***客户端(笔记本)拨号到***server,然后笔记本可以直接访问***server所在局域网的多个servers,进行管理  

        



环境:

***server 
eth0:192.168.2.48  (外网ip)
GW:192.168.2.1
eth1:172.16.1.28   (内网)
GW:不配,一个机器只能配置一个网关
检查是否可以ping通  client eth0 ip  不通的话会影响整个搭建 
app client server  
eth0:172.16.1.17(内网)
GW: 路由器
检查是否可以ping通***server eth1 ip



1.1.5.2 open*** 实践环境搭建

1),先建立open***软件存放的目录

 

[root@localhost ~]# mkdir -p /home/wyb/open*** 
2)下载所需软件
lzo-2.06.tar.gz
官网http://www.open***.net/release/open***-2.0.9.tar.gz
open***-2.0.9.tar.gz
(3) 开始安装
1005  tar vxf lzo-2.06.tar.gz 
1006  cd lzo-2.06
1007  ls
1008  ./configure 
1009  make 
1010  make install 
1011  history 
rpm -qa | grep openssl
1022  yum install openssl* -y 
1025  tar xvf open***-2.0.9.tar.gz 
1026  cd open***-2.0.9
1027  ./configure  --with-lzo-headers=/usr/local/include/  --with-lzo-lib=/usr/local/lib   加载lzo
1028  make 
1029  make install


1.1.6配置openvpon server --建立CA 证书

初始化配置命令:
先到软件存放目录
cd /home/wyb/open***/
cd open***-2.0.9/easy-rsa/2.0
[root@localhost 2.0]# pwd
/home/wyb/open***/open***-2.0.9/easy-rsa/2.0
[root@localhost 2.0]# cp vars vars.20151016.bak
2.0.9版本只有以下几行,
[root@localhost 2.0]# vim vars
export KEY_COUNTRY="CN"
export KEY_PROVINCE="BJ"
export KEY_CITY="Beijing"
export KEY_ORG="oldboy"
export KEY_EMAIL="334035686@qq.com"


所以需要新增以下内容

export KEY_EMAIL=334035686@qq.com
export KEY_CN=CN
export KEY_NAME=oldboy
export KEY_OU=oldboy
export PKCS11_MODULE_PATH=changeme
export PKCS11_PIN=1234
使配置文件生效
[root@localhost 2.0]# source vars
NOTE: If you run ./clean-all, I will be doing a rm -rf on /home/wyb/open***/open***-2.0.9/easy-rsa/2.0/keys
[root@localhost 2.0]# ./clean-all   清除所有证书相关
开始生产ca证书
./build-ca
[root@localhost 2.0]# ll keys/
total 12
-rw-r--r-- 1 root root 1245 Oct 16 08:56 ca.crt   certificate 证书
-rw------- 1 root root  916 Oct 16 08:56 ca.key   RSA private key
-rw-r--r-- 1 root root    0 Oct 16 08:54 index.txt
-rw-r--r-- 1 root root    3 Oct 16 08:54 serial
[root@localhost 2.0]#



1.1.7 生成服务器端证书和密匙key 文件。

[root@localhost 2.0]# ./build-key-server  server
Generating a 1024 bit RSA private key
...........++++++
...............................++++++
writing new private key to 'server.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [CN]:
State or Province Name (full name) [BJ]:
Locality Name (eg, city) [Beijing]:
Organization Name (eg, company) [oldboy]:
Organizational Unit Name (eg, section) [oldboy]:
Common Name (eg, your name or your server's hostname) [server]:
Email Address [334035686@qq.com]:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:123456
An optional company name []:oldboy
Using configuration from /home/wyb/open***/open***-2.0.9/easy-rsa/2.0/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'CN'
stateOrProvinceName   :PRINTABLE:'BJ'
localityName          :PRINTABLE:'Beijing'
organizationName      :PRINTABLE:'oldboy'
organizationalUnitName:PRINTABLE:'oldboy'
commonName            :PRINTABLE:'server'
emailAddress          :IA5STRING:'334035686@qq.com'
Certificate is to be certified until Oct 13 01:05:59 2025 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
[root@localhost 2.0]# 
查看服务器端所创建的证书
[root@localhost 2.0]# ll keys/
total 40
-rw-r--r-- 1 root root 3897 Oct 16 09:06 01.pem
-rw-r--r-- 1 root root 1245 Oct 16 08:56 ca.crt
-rw------- 1 root root  916 Oct 16 08:56 ca.key
-rw-r--r-- 1 root root  109 Oct 16 09:06 index.txt
-rw-r--r-- 1 root root   21 Oct 16 09:06 index.txt.attr
-rw-r--r-- 1 root root    0 Oct 16 08:54 index.txt.old
-rw-r--r-- 1 root root    3 Oct 16 09:06 serial
-rw-r--r-- 1 root root    3 Oct 16 08:54 serial.old
-rw-r--r-- 1 root root 3897 Oct 16 09:06 server.crt   ************
-rw-r--r-- 1 root root  749 Oct 16 09:05 server.csr   ************
-rw------- 1 root root  916 Oct 16 09:05 server.key   ************



1.1.8 生成客户端证书和key文件


生成client 证书和key文件。若建立多个客户端证书,则重复以下步骤即可,只需要修改common name 项oldboy的名称


在open***中,这种配置方法是每一个登陆的***客户端需要有一个证书,每个证书在同一时刻只能提供一个客户端连接(如果有两个机器安装相同证书,同时拨服务器,都能拨上,但是只有第一个拨上的才能连通网络


),所以,如果有多个人,每个人需要建立一份证书。 (建立一份证书多人使用后面也会提到,但是不好管理,有人离职,就必须重新新建证书)



下面开始建立2个客户端证书,名称分别为test,ett:

 [root@localhost 2.0]# ./build-key  test
Generating a 1024 bit RSA private key
.................++++++
......++++++
writing new private key to 'test.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [CN]:
State or Province Name (full name) [BJ]:
Locality Name (eg, city) [Beijing]:
Organization Name (eg, company) [oldboy]:
Organizational Unit Name (eg, section) [oldboy]:
Common Name (eg, your name or your server's hostname) [test]:
Email Address [334035686@qq.com]:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:123456
An optional company name []:oldboy
Using configuration from /home/wyb/open***/open***-2.0.9/easy-rsa/2.0/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'CN'
stateOrProvinceName   :PRINTABLE:'BJ'
localityName          :PRINTABLE:'Beijing'
organizationName      :PRINTABLE:'oldboy'
organizationalUnitName:PRINTABLE:'oldboy'      
commonName            :PRINTABLE:'test'
emailAddress          :IA5STRING:'334035686@qq.com'
Certificate is to be certified until Oct 13 01:31:10 2025 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
[root@localhost 2.0]# ll keys/
total 64
-rw-r--r-- 1 root root 3897 Oct 16 09:06 01.pem
-rw-r--r-- 1 root root 3773 Oct 16 09:31 02.pem
-rw-r--r-- 1 root root 1245 Oct 16 08:56 ca.crt
-rw------- 1 root root  916 Oct 16 08:56 ca.key
-rw-r--r-- 1 root root  216 Oct 16 09:31 index.txt
-rw-r--r-- 1 root root   21 Oct 16 09:31 index.txt.attr
-rw-r--r-- 1 root root   21 Oct 16 09:06 index.txt.attr.old
-rw-r--r-- 1 root root  109 Oct 16 09:06 index.txt.old
-rw-r--r-- 1 root root    3 Oct 16 09:31 serial
-rw-r--r-- 1 root root    3 Oct 16 09:06 serial.old
-rw-r--r-- 1 root root 3897 Oct 16 09:06 server.crt
-rw-r--r-- 1 root root  749 Oct 16 09:05 server.csr
-rw------- 1 root root  916 Oct 16 09:05 server.key
-rw-r--r-- 1 root root 3773 Oct 16 09:31 test.crt           *********
-rw-r--r-- 1 root root  745 Oct 16 09:31 test.csr            *********
-rw------- 1 root root  916 Oct 16 09:31 test.key         ***********
[root@localhost 2.0]#


[root@localhost 2.0]# ./build-key-pass  使用此命令也可以生成客户端密匙,证书,但是客户端拨号时候还需要输入密码再次认证,。如果使用 ./build-key 生成就不需要输入密码


举例说明,带密码的拨号:

[root@localhost 2.0]# ./build-key-pass ett
Generating a 1024 bit RSA private key
..............................................................++++++
........++++++
writing new private key to 'ett.key'
Enter PEM pass phrase:                          ---------------------------------此处的密码为client 拨号时候需要输入的密码
Verifying - Enter PEM pass phrase:
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [CN]:
State or Province Name (full name) [BJ]:
Locality Name (eg, city) [Beijing]:
Organization Name (eg, company) [oldboy]:
Organizational Unit Name (eg, section) [oldboy]:
Common Name (eg, your name or your server's hostname) [ett]:
Email Address [334035686@qq.com]:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:123456
An optional company name []:oldboy
Using configuration from /home/wyb/open***/open***-2.0.9/easy-rsa/2.0/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'CN'
stateOrProvinceName   :PRINTABLE:'BJ'
localityName          :PRINTABLE:'Beijing'
organizationName      :PRINTABLE:'oldboy'
organizationalUnitName:PRINTABLE:'oldboy'
commonName            :PRINTABLE:'ett'
emailAddress          :IA5STRING:'334035686@qq.com'
Certificate is to be certified until Oct 13 01:37:56 2025 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
[root@localhost 2.0]# ll keys/
total 80
-rw-r--r-- 1 root root 3897 Oct 16 09:06 01.pem
-rw-r--r-- 1 root root 3773 Oct 16 09:31 02.pem
-rw-r--r-- 1 root root 3768 Oct 16 09:37 03.pem
-rw-r--r-- 1 root root 1245 Oct 16 08:56 ca.crt
-rw------- 1 root root  916 Oct 16 08:56 ca.key
-rw-r--r-- 1 root root 3768 Oct 16 09:37 ett.crt      ****************
-rw-r--r-- 1 root root  741 Oct 16 09:37 ett.csr      ****************
-rw------- 1 root root 1041 Oct 16 09:37 ett.key       ****************
-rw-r--r-- 1 root root  322 Oct 16 09:37 index.txt
-rw-r--r-- 1 root root   21 Oct 16 09:37 index.txt.attr
-rw-r--r-- 1 root root   21 Oct 16 09:31 index.txt.attr.old
-rw-r--r-- 1 root root  216 Oct 16 09:31 index.txt.old
-rw-r--r-- 1 root root    3 Oct 16 09:37 serial
-rw-r--r-- 1 root root    3 Oct 16 09:31 serial.old
-rw-r--r-- 1 root root 3897 Oct 16 09:06 server.crt
-rw-r--r-- 1 root root  749 Oct 16 09:05 server.csr
-rw------- 1 root root  916 Oct 16 09:05 server.key
-rw-r--r-- 1 root root 3773 Oct 16 09:31 test.crt
-rw-r--r-- 1 root root  745 Oct 16 09:31 test.csr
-rw------- 1 root root  916 Oct 16 09:31 test.key
[root@localhost 2.0]#



1.1.9 生成generate diffie hellman parameter

提示:Diffie hellman parameter must be generate for the open*** server 
       生成传输进行密匙交换时用到的交换密匙协议文件
[root@localhost 2.0]# ./build-dh        --------------不能丢失此步骤,否则出错
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
................+.........................+..+....................................+...................................+...................................................
+...............................................
[root@localhost 2.0]#  ll  keys/
total 84
-rw-r--r-- 1 root root 3897 Oct 16 09:06 01.pem
-rw-r--r-- 1 root root 3773 Oct 16 09:31 02.pem
-rw-r--r-- 1 root root 3768 Oct 16 09:37 03.pem
-rw-r--r-- 1 root root 1245 Oct 16 08:56 ca.crt
-rw------- 1 root root  916 Oct 16 08:56 ca.key
-rw-r--r-- 1 root root  245 Oct 16 09:57 dh1024.pem              ************* 交换密匙 协议文件
-rw-r--r-- 1 root root 3768 Oct 16 09:37 ett.crt
-rw-r--r-- 1 root root  741 Oct 16 09:37 ett.csr
-rw------- 1 root root 1041 Oct 16 09:37 ett.key
-rw-r--r-- 1 root root  322 Oct 16 09:37 index.txt
-rw-r--r-- 1 root root   21 Oct 16 09:37 index.txt.attr
-rw-r--r-- 1 root root   21 Oct 16 09:31 index.txt.attr.old
-rw-r--r-- 1 root root  216 Oct 16 09:31 index.txt.old
-rw-r--r-- 1 root root    3 Oct 16 09:37 serial
-rw-r--r-- 1 root root    3 Oct 16 09:31 serial.old
-rw-r--r-- 1 root root 3897 Oct 16 09:06 server.crt
-rw-r--r-- 1 root root  749 Oct 16 09:05 server.csr
-rw------- 1 root root  916 Oct 16 09:05 server.key
-rw-r--r-- 1 root root 3773 Oct 16 09:31 test.crt
-rw-r--r-- 1 root root  745 Oct 16 09:31 test.csr
-rw------- 1 root root  916 Oct 16 09:31 test.key
[root@localhost 2.0]#


1.2.0  详解服务器以及客户端的证书和各个文件用途


filename            needed by               purpose                  secret

ca.crt              server+all client       root CA certificate        NO

ca.key              key signing machine only root CA key               YES 

dn.perm             server only             diffie hellman          NO

server.crt          server only             server certificate        NO

server.key          server only             server key              YES 

client1.crt         client1 only            client1 certificate        NO

client1.key         client1 only            client1   key              YES

   

为防止恶意***(如DOS,UDP, port flooding) ,我们生成一个“HMAC firewall”

[root@localhost 2.0]# open***  --genkey --secret keys/ta.key 

[root@localhost 2.0]# ls keys/ta.key 

keys/ta.key



1.2.1 详解服务器端×××重要命令


vars 脚本是用来创建环境变量,设置所需要的变量脚本

clean all  清除所有的证书和密匙

build-ca  脚本生成ca证书(交互)

build-key-server  脚本生成服务器端密匙(交互)

build-key 脚本生成客户端密匙(交换)

build-key-pass 脚本生成带密码的客户端密匙(交换)

build-dh  脚本生成diffie-heelman文件(交互)

pkitool  脚本直接使用vars的环境变量设置,直接生成证书(非交互)




1.2.2 详解服务器端*** server.conf重要参数

[root@localhost 2.0]# mkdir /etc/open***
[root@localhost 2.0]# cd /home/wyb/open***/open***-2.0.9/easy-rsa/2.0/
[root@localhost 2.0]# cp -ap keys /etc/open***/
[root@localhost 2.0]# cd /home/wyb/open***/open***-2.0.9/sample-config-files/   软件存放路径是 /home/wyb/open***/
[root@localhost sample-config-files]# cp client.conf server.conf /etc/open***/
[root@localhost sample-config-files]# 
[root@localhost sample-config-files]#cat /etc/open***/server.conf
local 123.x.x.x.x   哪一个本地地址需要被open***进行监听 ,此处为*** server的公网ip地址
port   52112  监听端口,默认是1194,为了安全起见,修改默认端口
proto  udp    指定监听的协议,当并发访问多了,推荐使用tcp
dev    tun    *** server 的模式采用的路由模式,可选tap或者tun
ca     ca.crt     ca证书,注意此文件和server.conf在一个目录下,否则需要使用绝对路径调用
cert   server.crt   服务端的证书
key    server.key   this fie should be kept secrt
dh     dh1024.pem   diffie hellman     交换密匙协议文件
server  10.8.0.0 255.255.255.0  这个是*** server动态分配给*** client的地址池,一般不需要修改    ******************
push "route 172.16.1.0 255.255.255.0"   这是*** server 所在的内网网段,如果有多个网段,可以写多个push,,此命令用在*** client本地生成    ************
client-to-client     允许多个*** cleint互相通信
 duplicate-cn        允许多个客户端使用同一个账号连接
keepalive 10 120     每10s ping 一次,若是120秒未收到包,认定客户端断线
comp-lzo             开启压缩功能
persist-key          当***超时后,当重新启动***,保持上一次使用的私钥匙,而不重新读取私钥匙
persist-tun          通过keepalived检查***超时后,当重新启动***后,保持tun.或者tap设备自动连接
status open***-status.log   open***日志状态信息
log /var/log/open***.log    日志文件
verb3                      指定日志文件冗余


1.2.1 实际服务器端***配置文件server.conf配置

企业生产环节如下:
local  自己的*** server公网ip
port   52115
push   "route 172.16.1.0 255.255.255.0"
client-to-client
duplicate-cn
log  /var/log/open***.log
还有注意以下三个文件的路径,
ca   /etc/open***/keys/ca.crt
cert /etc/open***/keys/server.crt
key  /etc/open***/keys/server.key  # This file should be kept secret
dh  /etc/open***/keys/dh1024.pem

1.2.2  调试服务器端***服务启动环境

a,关闭防火墙的拦截,(iptables,selinux)以及允许服务进行转发

b, 开启内核转发功能:

[root@localhost open***]# sed -i 's#net.ipv4.ip_forward = 0#net.ipv4.ip_forward = 1#g' /etc/sysctl.conf && sysctl -p


1.2.3 启动服务器端***服务并检查

[root@localhost open***]# /usr/local/sbin/open*** --config /etc/open***/server.conf &   这样方便加入/etc/rc.local
[root@localhost open***]# netstat -tnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 192.168.2.48:52115          0.0.0.0:*                   LISTEN      18901/open***  
加入开机启动
echo "startup open*** service" >>/etc/rc.local
echo "/usr/local/sbin/open*** --config /etc/open***/server.conf &" >>/etc/rc.local
检查结果
tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:10.8.0.1  P-t-P:10.8.0.2  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
此时说明已经成功

1.2.4 配置常规方式启动open***服务


以service方式启动open*** 

[

root@localhost open***]# cp /home/wyb/open***/open***-2.0.9/sample-scripts/open***.init /etc/init.d/open*** 
[root@localhost open***]# chmod 700 /etc/init.d/open*** 
[root@localhost open***]# vim /etc/init.d/open*** 
因为/etc/open***、下多个.conf 文件,导致启动报错,所以修改一下内容
148 行的内容进行修改:
for c in `/bin/ls *.conf 2>/dev/null`; do
改后内容:
for c in `/bin/ls server.conf 2>/dev/null`; do
[root@localhost open***]# chkconfig --add open*** 
[root@localhost open***]# chkconfig open*** on 
[root@localhost open***]# chkconfig  --list | grep open***
open***        0:off1:off2:on3:on4:on5:on6:off
 
[root@localhost open***]# netstat -tnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 192.168.2.48:52115          0.0.0.0:*                   LISTEN      18995/open***


1.2.5 安装windows *** 客户端***连接



下载并安装: http://swupdate.open***.org/community/releases/open***-2.2.2-install.exe 下载与服务器端一样版本的客户端

默认安装即可。


接下来下载客户端证书到window7 pc机器(不同的用户不同的证书 )

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



将文件放置C:\Program Files (x86)\Open×××\config目录下,每个客户端对应的这几个文件都要下载到客户机的相对安装目录



1.2.6 client.conf 默认情况开启的配置


备份原始文件,然后过滤出来


root@localhost keys]# egrep -v "#|^$|;" client.conf
client
dev tun
proto udp
remote my-server-1 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
comp-lzo
verb 3



修改配置文件,更改后的内容如下: 此配置文件为windows 7 客户端里面的配置文件,此时修改配置文件,并改名为test.o***,而不再是client.conf

client
dev tun
proto tcp
remote 192.168.2.48 52115
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert test.crt
key  test.key
comp-lzo
verb 3


1.2.7 开始拨号,进行测试


a,打开Open××× GUI 。右键connect、出现Assigned IP:10.8.0.6 表明客户端机器已经成功连接到*** server上


此时在PC机器可以测试是否可以和***server 机器同一局域网内的机器(即ping app client server )

如图所示


C:\Users\Administrator> ping  172.16.1.28  28ip为*** server的内网ip


正在 Ping 172.16.1.28 具有 32 字节的数据:

来自 172.16.1.28 的回复: 字节=32 时间<1ms TTL=64

来自 172.16.1.28 的回复: 字节=32 时间<1ms TTL=64

来自 172.16.1.28 的回复: 字节=32 时间<1ms TTL=64

来自 172.16.1.28 的回复: 字节=32 时间<1ms TTL=64


172.16.1.28 的 Ping 统计信息:

    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),

往返行程的估计时间(以毫秒为单位):

    最短 = 0ms,最长 = 0ms,平均 = 0ms


C:\Users\Administrator> ping  172.16.1.17   17ip为app client server机器


正在 Ping 172.16.1.17 具有 32 字节的数据:

请求超时。

请求超时。

请求超时。

请求超时。


172.16.1.17 的 Ping 统计信息:

    数据包: 已发送 = 4,已接收 = 0,丢失 = 4 (100% 丢失),



b,然后通过分别在*** server与*** 的内部机器app server client上抓包分析

如图所示


[root@localhost open***]# tcpdump -nnn -s 10000 | grep -i icmp

wKioL1Yl-5fyypHhAAFkG88NkDs514.jpg



提示:***服务器上的icmp包有去无回


提示:***的内部机器有去无回

以上说明,数据包到达××× 的内部机器上,没回返回


c,解决以上问题的办法是: 在*** 的内部机器上添加返回路由或者把*** server作为内部机器的网关 


方法1:route add default gw  172.168.1.28 eth0 -----------添加***server的内网ip作为app  client server机器的网关


C:\Users\Administrator> ping  172.16.1.17


正在 Ping 172.16.1.17 具有 32 字节的数据:

来自 172.16.1.17 的回复: 字节=32 时间<1ms TTL=63

来自 172.16.1.17 的回复: 字节=32 时间<1ms TTL=63

来自 172.16.1.17 的回复: 字节=32 时间<1ms TTL=63

来自 172.16.1.17 的回复: 字节=32 时间<1ms TTL=63


172.16.1.17 的 Ping 统计信息:

    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失)

往返行程的估计时间(以毫秒为单位):

    最短 = 0ms,最长 = 0ms,平均 = 0ms


C:\Users\Administrator>


再次抓包,已经可以reply.如图所示



方法二:添加网关路由

route add -net 10.8.0.0/24 gw 172.168.1.28


缺点:

1,当××× client端的GW,不是××× server内网地址时候,所有的××× client端都要加网络路由,命令如下,如果××× client的GW是××× server内网地址时候,无需增加路由

route add -net 10.8.0.0/24 gw 172.168.1.28

route add default gw  172.168.1.28 eth0

2,重启*** client 端机器重启,重启网卡,路由失效,所以可以添加静态路由或者开机加载


http://oldboy.blog.51cto.com/2561410/974194

http://oldboy.blog.51cto.com/2561410/784625



如果要是永久生效,有如下几种方法:

方法一:

vi /etc/sysconfig/network-scripts/route-eth0  #默认不存在此文件

加入如下内容:

192.168.1.0/24 via 192.168.1.1

提示:写到配置里,重启网络服务和重启系统都会生效!

 

方法二:

vi /etc/sysconfig/static-routes  #默认不存在此文件

加入如下内容:

any net 192.168.1.0/24 gw 192.168.1.1

提示:写到配置里,重启网络服务和重启系统都会生效!

 

方法三:

vi /etc/rc.local

加入如下内容:

route add -net 192.168.1.0/24 gw 192.168.1.1

PS: 方法一推荐生产环境使用

提示:方法三写到/etc/rc.local里只在开机时加载,当手工重启网络后会失效,但是重启系统后会生效!

 

如果是配置默认路由网关可以再网卡配置里:

[root@oldboy ~]# grep GATEWAY /etc/sysconfig/network-scripts/ifcfg-eth0

GATEWAY=10.0.0.254


测试×××客户端连接*** server连通性的其他方法



C:\Users\Administrator>ping   10.8.0.1


正在 Ping 10.8.0.1 具有 32 字节的数据:

来自 10.8.0.1 的回复: 字节=32 时间=1ms TTL=64

来自 10.8.0.1 的回复: 字节=32 时间<1ms TTL=64

来自 10.8.0.1 的回复: 字节=32 时间<1ms TTL=64

来自 10.8.0.1 的回复: 字节=32 时间<1ms TTL=64


10.8.0.1 的 Ping 统计信息:

    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),

往返行程的估计时间(以毫秒为单位):

    最短 = 0ms,最长 = 1ms,平均 = 0ms


C:\Users\Administrator>







NAT方法:在××× 服务器上执行NAT配置,(这里不需要再app client server端在添加网络路由等配置)

 此方法在*** client server端所有机器都不需要添加默认路由和网络路由,只需要转发即可

[root@localhost open***]# /etc/init.d/iptables stop 
[root@localhost open***]# /etc/init.d/iptables stop 
[root@localhost open***]# /sbin/iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth1 -j SNAT --to-source  172.16.1.28
[root@localhost open***]# iptables -t nat -L -n
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
SNAT       all  --  10.8.0.0/24          0.0.0.0/0           to:172.16.1.28 
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination  
假如源地址是变化的,可以使用MASQUERADE进行伪装
/sbin/iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth1 -j  MASQUERADE


整个NAT转发过程是如图所示:


 

1.2.8 NAT 方式××× 架构方案的适合应用场景分析


a,适合APP CLIENT的网关不是××× server的场景,如果app client 网关是app server,则不需要用NAT 转发了。


1.2.9路由方式和NAT方式在企业实际应用中的区别和异同


a,NAT 方式适合app client的网关不是××× server场景

b, app client 每个客户端需要配置路由,大量机器的话比较繁琐,所以

推荐:NAT方式,方便,简单




1.3.0 企业open***服务维护常见问题


1.3.0.1  如何增加多个*** client证书文件

方法一:为每个客户建立一个证书
       
cd /home/wyb/open***/open***-2.0.9/easy-rsa/2.0/
source vars           -此时不需要执行./clean-all 
             
./build-key-pass wyb
生成文件目录:
[root@localhost 2.0]#  ll /home/wyb/open***/open***-2.0.9/easy-rsa/2.0/keys/wyb.*
-rw-r--r-- 1 root root 3768 Oct 16 16:53 /home/wyb/open***/open***-2.0.9/easy-rsa/2.0/keys/wyb.crt
-rw-r--r-- 1 root root  741 Oct 16 16:53 /home/wyb/open***/open***-2.0.9/easy-rsa/2.0/keys/wyb.csr
-rw------- 1 root root 1041 Oct 16 16:53 /home/wyb/open***/open***-2.0.9/easy-rsa/2.0/keys/wyb.key
然后将ca.crt wyb.o*** wyb.crt wyb.csr wyb.key  同样放到open***安装目录即可,记得修改wyb.o***的配置文件,即客户端配置文件
  
 
修改wyb.o*** 配置文件
client
dev tun
proto tcp
remote 192.168.2.48 52115
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert wyb.crt    ********
key  wyb.key    ********  
comp-lzo
verb 3
此时client端完全配置完毕,拨号即可




1.3.1 多个用户公用一个证书

 

如果允许不同客户使用相同的certificate/key 或者相同的common name

;duplicate-cn  打开此项 多个客户端可以通过一个相同证书连接××× server





1.3.2  open***  server怎么验证客户端登陆?

通过

[root@localhost open***]# tail -f open***-status.log
Open××× CLIENT LIST
Updated,Mon Oct 19 09:31:23 2015
Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since
wyb,192.168.2.76:55273,8794,5648,Mon Oct 19 09:30:53 2015
ROUTING TABLE
Virtual Address,Common Name,Real Address,Last Ref
10.8.0.6,wyb,192.168.2.76:55273,Mon Oct 19 09:30:54 2015
GLOBAL STATS
Max bcast/mcast queue length,0
END
 
可以查看open*** client 是否有登陆open*** server


1.3.3open***客户端单多个证书的撤销


如果某个员工离职,需要撤销***的拨号权限,可以通过在服务器端吊销该员工的证书来实现


a,open***客户端单个用户证书的撤销

(1)初始化配置文件,修改openssl配置文件
cd  /home/wyb/open***/open***-2.0.9/easy-rsa/2.0/
[root@localhost 2.0]# source vars
NOTE: If you run ./clean-all, I will be doing a rm -rf on /home/wyb/open***/open***-2.0.9/easy-rsa/2.0/keys
[root@localhost 2.0]# 
如果open***的版本是open***-2.0.9,在回收权限时候注释掉openssl.conf的结尾6行,(open***-2.2.2可以不做。
[root@localhost 2.0]# tail -7 openssl.cnf 
[ pkcs11_section ]
engine_id = pkcs11
dynamic_path = /usr/lib/engines/engine_pkcs11.so
MODULE_PATH = $ENV::PKCS11_MODULE_PATH
PIN = $ENV::PKCS11_PIN
init = 0
[root@localhost 2.0]# vim openssl.cnf 
[root@localhost 2.0]# tail -7 openssl.cnf 
#[ pkcs11_section ]
#engine_id = pkcs11
#dynamic_path = /usr/lib/engines/engine_pkcs11.so
#MODULE_PATH = $ENV::PKCS11_MODULE_PATH
#PIN = $ENV::PKCS11_PIN
#init = 0
如果不处理以上openssl.conf的配置文件,会报一下错误
[root@localhost 2.0]# ./revoke-full svn
Using configuration from /home/wyb/open***/open***-2.0.9/easy-rsa/2.0/openssl.cnf
Revoking Certificate 05.
Data Base Updated
Using configuration from /home/wyb/open***/open***-2.0.9/easy-rsa/2.0/openssl.cnf
svn.crt: C = CN, ST = BJ, L = Beijing, O = oldboy, OU = oldboy, CN = svn, emailAddress = 334035686@qq.com
error 23 at 0 depth lookup:certificate revoked



(2)生成吊销证书crl.pem列表

[root@localhost 2.0]# ll keys/crl.pem 
-rw-r--r-- 1 root root 528 Oct 19 09:46 keys/crl.pem
[root@localhost 2.0]# 
可以通过以下文件来查看吊销的情况
[root@localhost 2.0]# cat keys/index.txt
V251013010559Z01unknown/C=CN/ST=BJ/L=Beijing/O=oldboy/OU=oldboy/CN=server/emailAddress=334035686@qq.com
V251013013110Z02unknown/C=CN/ST=BJ/L=Beijing/O=oldboy/OU=oldboy/CN=test/emailAddress=334035686@qq.com
V251013013756Z03unknown/C=CN/ST=BJ/L=Beijing/O=oldboy/OU=oldboy/CN=ett/emailAddress=334035686@qq.com
V251013085349Z04unknown/C=CN/ST=BJ/L=Beijing/O=oldboy/OU=oldboy/CN=wyb/emailAddress=334035686@qq.com
R251013092703Z151019014545Z05unknown                    ---R标示已经吊销
C=CN/ST=BJ/L=Beijing/O=oldboy/OU=oldboy/CN=svn/emailAddress=334035686@qq.com
[root@localhost 2.0]# 
(3)配置***服务端加载crl.pem,吊销用户的证书文件:
[root@localhost 2.0]# cp keys/crl.pem /etc/open***/keys/
[root@localhost open***]# vim server.conf    添加 crl-verify  /etc/open***/keys/crl.pem至配置文件
[root@localhost open***]# tail -1 server.conf
crl-verify  /etc/open***/keys/crl.pem
[root@localhost open***]#



(4)小结:将生成的crl.pem吊销文件复制到/etc/open***/keys,并在server.conf中加入下列一行内容crl-verify  /etc/open***/keys/crl.pem(),重启×××服务.当用户拨入时候,open***就会读取吊销列表中的


客户端,并禁止其拨入, 当被撤销的客户端尝新的连接时候,***服务会检查crl.pem文件,匹配时候,阻止连接,当再次revoke其他用户证书时候crl.pem这个文件会被修改,所以每次revoke完的时候,都需要将新的crl.pem文件都需要复制到/etc/open***/keys/下、(这里每次新的crl.pem 不会使之前client用户的revoke失效)

[root@localhost 2.0]# cat keys/index.txt
V251013010559Z01unknown/C=CN/ST=BJ/L=Beijing/O=oldboy/OU=oldboy/CN=server/emailAddress=334035686@qq.com
R251013013110Z151019022812Z02unknown/C=CN/ST=BJ/L=Beijing/O=oldboy/OU=oldboy/CN=test/emailAddress=334035686@qq.com
V251013013756Z03unknown/C=CN/ST=BJ/L=Beijing/O=oldboy/OU=oldboy/CN=ett/emailAddress=334035686@qq.com
V251013085349Z04unknown/C=CN/ST=BJ/L=Beijing/O=oldboy/OU=oldboy/CN=wyb/emailAddress=334035686@qq.com
R251013092703Z151019014545Z05unknown/C=CN/ST=BJ/L=Beijing/O=oldboy/OU=oldboy/CN=svn/emailAddress=334035686@qq.com
R251016024032Z151019024636Z06unknown/C=CN/ST=BJ/L=Beijing/O=oldboy/OU=oldboy/CN=client1/emailAddress=334035686@qq.com ********
R251016024053Z151019024758Z07unknown/C=CN/ST=BJ/L=Beijing/O=oldboy/OU=oldboy/CN=client2/emailAddress=334035686@qq.com ********
[root@localhost 2.0]#



1.3.4 怎么取消吊销的证书,使其再次可用

 
注释掉/etc/open***/server.conf 此行
#crl-verify  /etc/open***/keys/crl.pem
/etc/init.d/open*** stop
/etc/init.d/open*** start

1.3.5

新增大量用户,可以写脚本,传入一个参数即可


1.3.6 远程访问***服务小结

出差,家里,这种情况拨号到*** server后,然后访问企业或者机房内部的一个解决方案



补充,,由于client端时间和open*** server端时间不一致,导致client连接时候报错

TCP connection established with 192.168.2.76:49336
Sat Sep 19 18:34:40 2015 TCPv4_SERVER link local: [undef]
Sat Sep 19 18:34:40 2015 TCPv4_SERVER link remote: 192.168.2.76:49336
Sat Sep 19 18:34:40 2015 192.168.2.76:49336 TLS: Initial packet from 192.168.2.76:49336, sid=5daae1f6 0885ea1e
Sat Sep 19 18:34:40 2015 192.168.2.76:49336 VERIFY ERROR: depth=1, error=certificate is not yet valid: /C=CN/ST=BJ/L=Beijing/O=oldboy/OU=oldboy/CN=oldboy/emailAddress=334035686@qq.com
Sat Sep 19 18:34:40 2015 192.168.2.76:49336 TLS_ERROR: BIO read tls_read_plaintext error: error:140890B2:SSL routines:SSL3_GET_CLIENT_CERTIFICATE:no certificate returned
Sat Sep 19 18:34:40 2015 192.168.2.76:49336 TLS Error: TLS object -> incoming plaintext read error     #&*********************************
Sat Sep 19 18:34:40 2015 192.168.2.76:49336 TLS Error: TLS handshake failed
Sat Sep 19 18:34:40 2015 192.168.2.76:49336 Fatal TLS error (check_tls_errors_co), restarting
Sat Sep 19 18:34:40 2015 192.168.2.76:49336 SIGUSR1[soft,tls-error] received, client-instance restarting
Sat Sep 19 18:34:40 2015 TCP/UDP: Closing socket
Sat Sep 19 18:34:45 2015 MULTI: multi_create_instance called
Sat Sep 19 18:34:45 2015 Re-using SSL/TLS context
Sat Sep 19 18:34:45 2015 LZO compression initialized


同步两端时间就OK


2.0 配置linux下open*** 客户端      


linux下的open*** 客户端和windows下的客户端角色是一样的。

2.0.1 安装open*** client
操作命令
0  mkdir -p /home/wyb/tools/open***
 1001  cd /home/wyb/tools/open***/
 1002  ls
 1003  wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.06.tar.gz
 1004  ping www.baidu.com
 1005  vim  /etc/resolv.conf 
 1006  rz -E
 1007  ls
 1008  tar xvf lzo-2.06.tar.gz 
 1009  cd lzo-2.06
 1010  ls
 1011  ./configure && make && make install 
2.0.1.1 安装open*** 软件
 tar vxf open***-2.0.9.tar.gz 
 1005  cd open***-2.0.9
 1006  ls
 1008  ./configure --with-lzo-headers=/usr/local/include/ --with-lzo-lib=/usr/local/lib 
 1009  make && make install 
       mkdir /etc/open***
 1011  cd /etc/op
 1012  cd /etc/open***/
将windows client 端随便一个config下的所有文件复制到 /etc/open*** 下,改名即可
[root@***client open***]# pwd
/etc/open***
将o***改名为conf
mv client3.o*** client3.conf
[root@***client open***]# ls
ca.crt  client3.conf  client3.crt  client3.csr  client3.key  client3.zip
[root@***client open***]# 
2.0.1.2 启动open*** client服务并检查
 /usr/local/sbin/open*** --config /etc/open***/client3.conf & 
 1025  ifconfig 
 1026  ping   *** client2
 看日志



2.0.1.3 linux客户端拨号连接open*** server的应用场景

a,多机房,或者多个企业网络互联时候

b,办公室的linux,同步数据到机房某一个内网的机器

d,跨机房的数据备份,备份服务器没有外网ip 

e,摘掉所有不是必须使用外网ip的服务器

f, 异地数据读取,(北京机房web服务写数据到上海机房的mysql,读写比例20几:1)远程写问题不大,远程读有点吃力,企业用户可以远程写数据库,然后本地

做一个slave。


同一个业务跨机房集群架构,通过***传数据,尽量远程写,本地读。


一个用户登陆多个机房,拨号一个×××可以连接多个机房内网。(多机房互联)


open***,ipsec 做机房互联,等多的是功能应用,大数据的传输,对实时性要求高,不适合


多机房互联详细介绍见后续文章。