1.***概述

×××(全称Virtual Private Network)虚拟专用网络,是依靠ISAP和其他的NSP,在公共网络中建立专用的数据通信网络的技术。 

2.隧道协议

PPTP:点对点隧道协议(PPTP)是由微软和3Com 等公司组成的PPTP论坛开发的一种点对点隧道协议,基于拨号使用的PPP协议

L2TP:第2层隧道协议(L2TP)是IETF基于L2F(cisco的第二层转发协议)开发的PPTP后续版本,可以创建不同的隧道。支持验证

IPSec:IP安全协议(IPSec:IP Security)实际上是一套协议包而不是一个独立的协议,IPSec隧道模式隧道是封装,

SSL ×××,SSL 协议提供了数据私密性、端点验证、信息完整性等特性,协商一种加密算法和密码钥匙。

3.Open×××介绍

open***是一个开源软件,Open×××允许参与建立×××单点使用预设的私钥,第三方证书,或者用户名/密码来进行身份验证。它大量使用OpenSSL加密库,以及SSLv3/TLSv1 协。C/S架构

4.选择×××建议

1.硬件产品   负载均衡设备

2.Open×××功能强大、稳定可靠

5.Open×××开源产品

Open×××支持平台win  linux  BSD  MAC 

6.Open×××是通过公开密钥(非对称密钥,加密解密使用不同的key)对数据进行加密。

验证支持第三方的证书,以及用户名/密码 

7.Open×××通信原理

所有的通信基于一个单一的IP端口1194,默认使用UDP协议,同时TCP也被支持,Open×××连接能通过大多数代理服务器,

Open×××的应用

Open×××能够运行于大多常见的系统平台,是一个基于SSL/TLS的×××解决方案。Open×××能够基于TAP/TUN虚拟设备驱动实现2层及3层的链接,提供基于SSL/TLS的工业级别加密功能,并且实现了大多数常见×××解决方案的全部特性。但目前提供整合了Open×××的×××硬件厂商还不太多。

环境部署  

1.双网卡

eth0  外网  192.168.1.139

eth1  内网  192.168.8.139

前期工作查看系统版本

[root@bier ~]# cat /etc/redhat-release  

CentOS release 6.5 (Final)

[root@bier ~]# uname -r

2.6.32-431.el6.x86_64

同步系统时间

[root@bier ~]# ntpdate pool.ntp.org

 3 Aug 19:50:20 ntpdate[2739]: step time server 202.112.29.82 offset 89.002306 sec

设置定时任务

[root@bier ~]# crontab -e

[root@bier ~]# crontab -l

####sec time

*/5 * * * * /usr/sbin/ntpdate pool.ntp.org >/dev/null 2>&1 >>/val/spool/cron/root

open*** 依赖包

yum install -y openssl openssl-devel pam pam-devel  automake pkgconfig libtool

安装最新EPEL扩展库

[root@bier ~]#rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

安装open***之前先安装它的压缩模块lzo

下载地址http://www.oberhumer.com/opensource/lzo/download/

wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.06.tar.gz

tar -xf lzo-2.06.tar.gz 

cd lzo-2.06

./configure ----prefix=/usr/local/lzo

make && make install

安装open***

下载地址

https://open***.net/index.php/component/content/article/58-open-source/downloads/471-old-releases.html

tar -xf open***-2.2.2.tar.gz 

cd open***-2.2.2

./configure --prefix=/usr/local/open*** --with-lzo-headers=/usr/local/lzo/include/ --with-lzo-lib=/usr/local/lzo/lib/ --enable-password-save

make && make install

可执行文件

which open***

cp /usr/local/open***/sbin/open*** /usr/sbin

至此open***安装完成

配置open*** server 设置CA证书

[root@bier open***]# pwd

/root/open***

[root@bier open***]# cd open***-2.2.2/easy-rsa/2.0/

[root@bier 2.0]# cp vars vars.bak.20160803

[root@bier 2.0]# vi vars打开最后,修改如下

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

export KEY_COUNTRY="CN"

export KEY_PROVINCE="BJ"

export KEY_CITY="Beijing"

export KEY_ORG="bier"

export KEY_EMAIL="947370895@qq.com"

export KEY_EMAIL=947370895@qq.com

export KEY_CN=CN

export KEY_NAME=bier

export KEY_OU=bier

export PKCS11_MODULE_PATH=changeme

export PKCS11_PIN=1234

保存退出

[root@bier 2.0]# source vars

NOTE: If you run ./clean-all, I will be doing a rm -rf on /root/open***/open***-2.2.2/easy-rsa/2.0/keys

然后根据提示执行

[root@bier 2.0]# ./clean-all    #清除所有证书相关

[root@bier 2.0]# ./build-ca    #生成ca证书,根证书ca.crt和根密钥ca.key

Country Name (2 letter code) [CN]:

State or Province Name (full name) [BJ]:

Locality Name (eg, city) [Beijing]:

Organization Name (eg, company) [bier]:

Organizational Unit Name (eg, section) [bier]:

Common Name (eg, your name or your server's hostname) [CN]:bier #==>官方提示这里一定要输入***服务器的主机名

Name [bier]:

Email Address [947370895@qq.com]:

build-ca 后生成的ca证书

[root@bier 2.0]# ll ./keys/

total 12

-rw-r--r-- 1 root root 1383 Aug  3 21:07 ca.crt

-rw------- 1 root root  916 Aug  3 21:07 ca.key

-rw-r--r-- 1 root root    0 Aug  3 20:56 index.txt

-rw-r--r-- 1 root root    3 Aug  3 20:56 serial

## 为服务器端生成证书和密钥

[root@bier 2.0]# ./build-key-server server

Country Name (2 letter code) [CN]:

State or Province Name (full name) [BJ]:

Locality Name (eg, city) [Beijing]:

Organization Name (eg, company) [bier]:

Organizational Unit Name (eg, section) [bier]:

Common Name (eg, your name or your server's hostname) [server]:bier

Name [bier]:

Email Address [947370895@qq.com]:

Please enter the following 'extra' attributes

to be sent with your certificate request

A challenge password []:123456

An optional company name []:bier

查看创建的服务端证书

[root@bier 2.0]# ls -lrt keys/            

total 48

-rw-r--r-- 1 root root    3 Aug  3 20:56 serial.old

-rw-r--r-- 1 root root    0 Aug  3 20:56 index.txt.old

-rw------- 1 root root  916 Aug  3 21:07 ca.key

-rw-r--r-- 1 root root 1383 Aug  3 21:07 ca.crt

-rw------- 1 root root  916 Aug  3 21:20 server.key

-rw-r--r-- 1 root root  802 Aug  3 21:20 server.csr

-rw-r--r-- 1 root root    3 Aug  3 21:27 serial

-rw-r--r-- 1 root root   21 Aug  3 21:27 index.txt.attr

-rw-r--r-- 1 root root  138 Aug  3 21:27 index.txt

-rw-r--r-- 1 root root 4122 Aug  3 21:27 server.crt

-rw-r--r-- 1 root root 4122 Aug  3 21:27 01.pem

生成客户端证书和key文件

[root@bier 2.0]# ./build-key client

这样子的方式访问是不需要密码的,然后密码和公司名输入和上面的一样

## 每一个登录的××× 客户端需要证书,每一个客户端同一时刻只能供一个客户端连接,需要多个客户端连接一个证书需要修改配置文件。不建议这样去做

提示错误:

failed to update database

TXT_DB error number 2

这里产生的错误解决方法

修改keys/目录下的index.txt.attr

unique_subject = yes

改为

unique_subject = no

下面创建一个带密码的用户

[root@bier 2.0]# ./build-key-pass bier   #安装提示输入密码

[root@bier 2.0]#./build-dh   #这步不能落,不然出错

## 会生成dh1024.pem 文件

查看创建的服务端及客户端的证书

生成的证书目录及文件如下

[root@bier 2.0]# pwd

/root/open***/open***-2.2.2/easy-rsa/2.0

[root@bier 2.0]# ls -lrt keys/   

total 68

-rw-r--r-- 1 root root    3 Aug  3 20:56 serial.old

-rw-r--r-- 1 root root    0 Aug  3 20:56 index.txt.old

-rw------- 1 root root  916 Aug  3 21:07 ca.key

-rw-r--r-- 1 root root 1383 Aug  3 21:07 ca.crt

-rw------- 1 root root  916 Aug  3 21:20 server.key

-rw-r--r-- 1 root root  802 Aug  3 21:20 server.csr

-rw-r--r-- 1 root root    3 Aug  3 21:27 serial

-rw-r--r-- 1 root root   21 Aug  3 21:27 index.txt.attr

-rw-r--r-- 1 root root  138 Aug  3 21:27 index.txt

-rw-r--r-- 1 root root 4122 Aug  3 21:27 server.crt

-rw-r--r-- 1 root root 4122 Aug  3 21:27 01.pem

-rw-r--r-- 1 root root  916 Aug  3 21:36 client.key

-rw-r--r-- 1 root root  802 Aug  3 21:36 client.csr

-rw-r--r-- 1 root root    0 Aug  3 21:36 client.crt

-rw------- 1 root root 1041 Aug  3 21:39 bier.key

-rw-r--r-- 1 root root  802 Aug  3 21:39 bier.csr

-rw-r--r-- 1 root root    0 Aug  3 21:39 bier.crt

-rw-r--r-- 1 root root  245 Aug  3 21:41 dh1024.pem

为防止恶意***,要生成一个HMAC firewall

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

此时open***服务端的工作已经完成,接下来就是把证书拷贝到指定的位置

把所以的keys和配置拷贝到/etc/open***目录下

[root@bier 2.0]# mkdir -p /etc/open***

[root@bier 2.0]# pwd

/root/open***/open***-2.2.2/easy-rsa/2.0

[root@bier 2.0]# cp -a keys /etc/open***/

[root@bier open***-2.2.2]# pwd

/root/open***/open***-2.2.2

[root@bier open***-2.2.2]# cp sample-config-files/server.conf /etc/open***/

[root@bier open***-2.2.2]# tree /etc/open***/

/etc/open***/

|-- keys# clinet拨号时使用的配置文件

|   |-- 01.pem

|   |-- ca.crt

|   |-- ca.key

|   |-- bier.crt

|   |-- bier.csr

|   |-- bier.key

|   |-- dh1024.pem

|   |-- index.txt

|   |-- index.txt.attr

|   |-- index.txt.old

|   |-- serial

|   |-- serial.old

|   |-- server.crt

|   |-- server.csr

|   |-- server.key

|   |-- ta.key

|   |-- client.crt

|   |-- client.csr

|   `-- client.key

`-- server.conf   # server.conf open***的主配置文件,启动的时候需要加载这个文件

[root@bier open***-2.2.2]# cd /etc/open***/

[root@bier open***]# pwd

/etc/open***

[root@bier open***]# ll

total 16

drwx------ 2 root root  4096 Aug  3 21:48 keys

-rw-r--r-- 1 root root 10288 Aug  3 21:57 server.conf

备份配置文件

[root@bier open***]# cp server.conf server.conf-$(date +%F)

[root@bier open***]# egrep -v "^#|^;" server.conf-$(date +%F) |sed "/^\s*$/d" >server.conf

[root@bier open***]# cat server.conf   

port 1194

proto udp

dev tun

ca ca.crt

cert server.crt

key server.key  # This file should be kept secret

dh dh1024.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

和原配置相比,改动如下

企业生产环境配置:

vim server.conf

local 192.168.1.138

port 1194

proto tcp

dev tun

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

cert /etc/open***/keys/server.crt

key /etc/open***/keys/server.key  

dh /etc/open***/keys/dh1024.pem

server 10.8.0.0 255.255.255.0

push "route 192.168.8.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

client-to-client

duplicate-cn

log /var/log/open***.log

配置服务端***启动环境

[root@bier open***]# vi /etc/sysctl.conf 

net.ipv4.ip_forward = 1

[root@bier open***]# sysctl -p

启动***

[root@bier open***]# open*** --config /etc/open***/server.conf &

[1] 27189

[root@bier open***]# netstat -lntup |grep ***

tcp        0      0 192.168.1.138:1194         0.0.0.0:*                   LISTEN      27189/open***

设置开机启动

[root@bier open***]# echo 'open*** --config /etc/open***/server.conf &' >>/etc/rc.local

[root@bier open***]# tail -1 /etc/rc.local  

open*** --config /etc/open***/server.conf &

查看日志

[root@bier open***]# tail /var/log/open***.log

启动***就多了个虚拟网卡

[root@bier open***]# ifconfig

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)

安装Windows ***客户端配置***连接

 Windows 客户端测试:

需要下载和服务器端一直的客户端版本软件

https://open***.net/index.php/component/content/article/58-open-source/downloads/471-old-releases.html

查看服务器端open*** 版本号,下载对应的客户端软件

在Windows上下载最新的客户端链接如果不行

[root@bier open***]# open*** --version

Open××× 2.2.2 x86_64

Windows 下安装好的open***客户端软件

配置并下载客户端证书

[root@bier keys]# pwd

/etc/open***/keys

[root@bier keys]# ll

total 72

-rw-r--r-- 1 root root 4122 Aug  3 21:27 01.pem

-rw-r--r-- 1 root root 1383 Aug  3 21:07 ca.crt

-rw------- 1 root root  916 Aug  3 21:07 ca.key

-rw-r--r-- 1 root root    0 Aug  3 21:39 bier.crt

-rw-r--r-- 1 root root  802 Aug  3 21:39 bier.csr

-rw------- 1 root root 1041 Aug  3 21:39 bier.key

-rw-r--r-- 1 root root  245 Aug  3 21:41 dh1024.pem

-rw-r--r-- 1 root root  138 Aug  3 21:27 index.txt

-rw-r--r-- 1 root root   21 Aug  3 21:27 index.txt.attr

-rw-r--r-- 1 root root    0 Aug  3 20:56 index.txt.old

-rw-r--r-- 1 root root    3 Aug  3 21:27 serial

-rw-r--r-- 1 root root    3 Aug  3 20:56 serial.old

-rw-r--r-- 1 root root 4122 Aug  3 21:27 server.crt

-rw-r--r-- 1 root root  802 Aug  3 21:20 server.csr

-rw------- 1 root root  916 Aug  3 21:20 server.key

-rw------- 1 root root  636 Aug  3 21:48 ta.key

-rw-r--r-- 1 root root    0 Aug  3 21:36 client.crt

-rw-r--r-- 1 root root  802 Aug  3 21:36 client.csr

-rw-r--r-- 1 root root  916 Aug  3 21:36 client.key

client.conf默认情况的配置

 [root@bier open***]# cp /root/open***/open***-2.2.2/sample-config-files/client.conf /etc/open***/

[root@bier open***]#cp client.conf client.conf-$(date +%F)

[root@bier open***]# egrep -v "^#|^;" client.conf.$(date +%F) |sed "/^\s*$/d" >client.conf

[root@bier open***]# cat client.conf

client

dev tun

proto udp

remote remote-master 1194

resolv-retry infinite

nobind

persist-key

persist-tun

ca ca.crt

cert client.crt

key client.key

ns-cert-type server

comp-lzo

verb 3

把服务器的client.conf 拷贝到客户端,然后修改为client.o***

或者修改好再拉到客户端

配置并下载客户端证书

将ca.crt  client.crt  client.key复制到

C:\Program Files (x86)\Open×××\config(不同用户用不同的证书,每个证书包含.crt和.key两文件)

修改后client.o***客户端配置如下

client

dev tun

proto tcp

remote 192.168.1.138 1194

resolv-retry infinite

nobind

persist-key

persist-tun

ca ca.crt

cert client.crt

key client.key

ns-cert-type server

comp-lzo

verb 3

解决每小时断线问题

Open××× 有一个参数 reneg-sec 定义了一段时间之后需要重新验证key , 在使用freeradius 认证并且限制了一次只能登录一个用户的的情况下,会导致用户断线。 默认值3600, 也就是一个小时就会断线一次。

在配置文件中添加一行

reneg-sec 0                                  #取消登录倒计时

在win7上拨号远程连接open***,打开open***右击点击Connect进行连接,如果拨号上去了图标显示绿色。

拨号成功而且open***客户端显示为绿色,就说明***拨号已经成功了!

成功拨号上***服务器上之后,通过下面一条命令的转发就可以实现通过***服务器的内网IP去访问没有外网IP的内网的机器了。

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth1 -j SNAT --to-source 192.168.8.138

eth1是内网网卡

iptables -A INPUT -p TCP --dport 1194 -j ACCEPT              #开启防火墙1194端口

service iptables restart                  #POSTROUTING需要保存并重启服务才能生效

chkconfig iptables on

成功拨号后自己电脑已经可以ping通公司内网的机器的ip了

Linux客户端连接***

安装客户端

$ yum -y install open***   

配置客户端

将Open×××服务器上的client.o*** ca.crt  client.crt client.key上传到Linux客户端/etc/open***/keys/文件夹

连接Open×××

$ open*** --daemon --config /etc/open***/keys/client.o***