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***