LINUX open*** 配置




一 ×××基础讲解

1.1什么是×××

IP机制仿真出一个私有的广域网"是通过私有的隧道技术在公共数据网络上仿真一条点到点的专线技术。所谓虚拟,是指用户不再需要拥有实际的长途数据线路,而是使用Internet公众数据网络的长途数据线路。
1.2 Open×××的功能
可以将两个不同的网段打通一条通道,可以互相访问,对于运维人员来说主要是为了安全,因为Open×××ssl加密机制,增加了密码的安全度,运维人员可以自定义ip段进行管理服务器,简单点说,安全方便。

1.3 SSL ×××原理

如果把SSL ××× 两个概念分开,大家对他们的含义应该都非常清楚,但是作为一种新技术,它们之间是如何结合起来的大家也许还不是很了解。从学术和商业的角度来讲,因为他们代表的含义有所不同,因而常常会被曲解。
     SSL(安全套接层)协议是一种在Internet上保证发送信息安全的通用协议。它处于应用层。SSL用公钥加密通过SSL连接传输的数据来工作。 SSL协议指定了在应用程序协议(如HTTPTelnetFTP等)和 TCP/IP协议之间进行数据交换的安全机制,为TCP/IP连接提供数据加密、服务器认证以及可选的客户机认证。SSL协议包括握手协议、记录协议以及警告协议三部分。握手协议负责确定用于客户机和服务器之间的会话加密参数。记录协议用于交换应用数据。警告协议用于在发生错误时终止两个主机之间的会话。
     ×××(虚拟专用网)则主要应用于虚拟连接网络,它可以确保数据的机密性并且具有一定的访问控制功能。×××是一项非常实用的技术,它可以扩展企业的内部网络,允许企业的员工、客户以及合作伙伴利用Internet访问企业网,而成本远远低于传统的专线接入。过去,××× 总是和IPSec 联系在一起,因为它是××× 加密信息实际用到的协议。IPSec 运行于网络层,IPSec ××× 则多用于连接两个网络或点到点之间的连接。

所谓的SSL ×××,其实是×××设备厂商为了与IPsec ×××区别所创造出来的名词,指的是使用者利用浏览器内建的SecureSocket Layer封包处理功能,用浏览器连回公司内部SSL ×××服务器,然后透过网络封包转向的方式,让使用者可以在远程计算机执行应用程序,读取公司内部服务器数据。它采用标准的安全套接层(SSL)对传输中的数据包进行加密,从而在应用层保护了数据的安全性。高质量的SSL ×××解决方案可保证企业进行安全的全局访问。在不断扩展的互联网Web站点之间、远程办公室、传统交易大厅和客户端间,SSL ×××克服了IPSec ×××的不足,用户可以轻松实现安全易用、无需客户端安装且配置简单的远程访问,从而降低用户的总成本并增加远程用户的工作效率。而同样在这些地方,设置传统的IPSec ×××非常困难,甚至是不可能的,这是由于必须更改网络地址转换(NAT)和防火墙设置。

1.4验证LINUX是否支持安装×××

如果购买的vps是基于OpenVZ类型,无法配置标准的×××(无测试过),部分手机可能无法支持,OpenVZ支持pptpopen×××

在安装之前请确认一下你购买的vps是否开启了tun/tap的支持,burst vps默认是不开启tun/tap的,可以使用cat /dev/net/tun 进行检查

如果是没有权限的话可以发个ticket要求客服为你开启tun/tap

cat /dev/net/tun

cat /dev/net/tun:Permissiondenied(未开启tun/tap)

出现File descriptor in bad state说明tun/tap已经开启,可以开始进行open×××的安装配置

cat /dev/net/tun

cat:/dev/net/tun:Filedescriptor in bad state

二、服务端安装

现在开始在vps上安装和配置open×××,需要的有下列的软件
gcc g++ [gcc g++为系统需要的编译工具]
lzo [Lzo库的功能是对虚拟链路进行压缩]
openssl [囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议]
open***

2.1 检查并安装编译工具gcc g++

# yum install gccgcc-c++ -y

2.2安装lzo

# cd/home/download/

# wgethttp://www.oberhumer.com/opensource/lzo/download/lzo-2.03.tar.gz

# tar -xvzflzo-2.03.tar.gz

# cd lzo-2.03

# ./configure-prefix=/usr/local/lzo && make && make install

# vi/etc/ld.so.conf

include/etc/ld.so.conf.d/*.conf

/lib

/lib64

/usr/lib

/usr/lib64

/usr/local/lib

/usr/local/lib64

编辑完ld.so.conf,执行

# ldconfig

使动态库生效

2.3 安装openssl

# cd/home/download/

# wgethttp://www.openssl.org/source/openssl-1.0.1c.tar.gz

# tar -xvzf openssl-1.0.1c.tar.gz

# ./config&& make && make install

2.4 安装open***

# cd/home/download/

# wgethttp://swupdate.open***.org/community/releases/open***-2.2.1.tar.gz

# tar -xvzf open***-2.2.1.tar.gz

# cd open***-2.2.1

./configure--prefix=/usr/local/open*** --with-lzo-lib=/usr/local/lzo/lib/--with-ssl-lib=/usr/local/ssl/lib/ --with-lzo-headers=/usr/local/lzo/include/--with-ssl-headers=/usr/local/ssl/include/

make &&make install

三 服务器配置

3.1 创建配置环境

# mkdir/etc/open***

# cp -R/home/download/open***-2.2.1/easy-rsa/ /etc/open***

# cd/etc/open***/easy-rsa/2.0/

# ls

total 112

-rwxr-xr-x 1 rootroot 121 Oct 26 03:14 build-ca

-rwxr-xr-x 1 rootroot 354 Oct 26 03:14 build-dh

-rwxr-xr-x 1 rootroot 190 Oct 26 03:14 build-inter

-rwxr-xr-x 1 rootroot 165 Oct 26 03:14 build-key

-rwxr-xr-x 1 rootroot 159 Oct 26 03:14 build-key-pass

-rwxr-xr-x 1 rootroot 251 Oct 26 03:14 build-key-pkcs12

-rwxr-xr-x 1 rootroot 270 Oct 26 03:14 build-key-server

-rwxr-xr-x 1 rootroot 215 Oct 26 03:14 build-req

-rwxr-xr-x 1 rootroot 160 Oct 26 03:14 build-req-pass

-rwxr-xr-x 1 rootroot 430 Oct 26 03:14 clean-all

-rwxr-xr-x 1 rootroot 1459 Oct 26 03:14 inherit-inter

-rwxr-xr-x 1 rootroot 297 Oct 26 03:14 list-crl

-rw-r--r-- 1 rootroot 422 Oct 26 03:14 Makefile

-rwxr-xr-x 1 rootroot 7768 Oct 26 03:14 openssl-0.9.6.cnf

-rwxr-xr-x 1 rootroot 8230 Oct 26 03:14 openssl.cnf

-rwxr-xr-x 1 rootroot 12068 Oct 26 03:14 pkitool

-rw-r--r-- 1 rootroot 8864 Oct 26 03:14 README

-rwxr-xr-x 1 rootroot 894 Oct 26 03:14 revoke-full

-rwxr-xr-x 1 rootroot 180 Oct 26 03:14 sign-req

-rwxr-xr-x 1 rootroot 1602 Oct 26 03:14 vars

-rwxr-xr-x 1 rootroot 190 Oct 26 03:14 whichopensslcnf

结果是程序以及脚本,这个简要的说明一下

vars 脚本,是用来创建环境变量,设置所需要的变量的脚本
clean-all 脚本,是创建生成CA证书及密钥文件所需要的文件和目录
build-ca 脚本,生成CA证书(交互)
build-dh 脚本,生成Diffie-Hellman文件(交互)
build-key-server 脚本,生成服务器端密钥(交互)
build-key 脚本,生成客户端密钥(交互)
pkitool 脚本,直接使用vars的环境变量设置直接生成证书(非交互)

3.2 生成CA证书及密钥

mv openssl-1.0.0.cnfopenssl.cnf

mkdir/etc/open***/easy-rsa/2.0/keys

# cd/etc/open***/easy-rsa/2.0/

source ./vars (初始化)

# ./vars(不使用)

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

:如果你执行了./clean-all,系统将删除/etc/open***/easy-rsa/2.0/keys下的文件

修改vars文件

# 定义你所在的国家,2个字符
export KEY_COUNTRY=CN
# 你所在的省份
export KEY_PROVINCE=”JS”
# 你所在的城市
export KEY_CITY=”SUZHOU”
# 你所在的组织
export KEY_ORG="bcgogo.com"
# 你的单位
export KEY_OU="bcgogo.com"
# 你的邮件地址
export KEY_EMAIL="xiaokaibo@bcgogo.com"

#. ./vars (注意有两个点,两个点之间有空格)

初始化keys文件

# ./clean-all #[:删除/etc/open***/easy-rsa/2.0/keys下的文件]

# ./build-ca #[:生成一个a 1024 bit RSA的密钥,writing new private key to 'ca.key']

084837573.jpg

一路按回车就可以

# cd keys

# ls

ca.crt ca.keyindex.txt serial可以看到生成的ca.crtca.key文件

可以看到生成的ca.crt ca.key文件

3.3 生成Diffie-Hellman文件

# cd ..

# ./build-dh #[:Generating DH parameters, 1024 bitlong safe prime]

# ls keys

ca.crt ca.keydh1024.pem index.txt serial

:可以看到生成了1024为的Diffie-Hellman文件

3.4 生成服务器使用的××× server ca证书

#./build-key-server chenyz #[:其中chenyzCA证书的一个名字]

084923153.jpg

一路回车,Sign the certificate? [y/n]:y 选择y

然后把刚才生成的CA证书和密钥copy/etc/open***/

# cd keys
# cp ca.crt ca.key chenyz.crt chenyz.key dh1024.pem /etc/open***/

3.5生成客户端CA证书及密钥

#./build-key client-chenyz
一路回车,Sign thecertificate? [y/n]:y 选择y

keys目录下生成了client-chenyz.crtclient-chenyz.csr client-chenyz.key三个客户端证书
并且将ca.crtca.key client-chenyz.crt client-chenyz.csr client-chenyz.key 五个文件打包,以便客户端***

tar -zcvfbcgogo***.tar.gzca.crt ca.keyclient-chenyz.crt client-chenyz.csr client-chenyz.key

3.6 修改open***配置文件

# cp/home/download/open***-2.0.9/sample-config-files/server.conf /etc/open***/server.conf
vpen***的原始样例文件复制到/etc/open***,并改名为open***.conf,我们将在样例文件上进行修改

085008830.jpg

使用的端口,默认1194

085047251.jpg

使用的协议,默认使用UDP,如果使用HTTPproxy,必须使用TCP协议

085118886.jpg

ca:使用build-ca生成的,用于验证客户是证书是否合法
cert:使用build-key-server,Server使用的证书对应的key,注意安全,防止被盗

085152985.jpg

dh:生成的加密文件

085234145.jpg

通过××× ServerClient push路由,client通过pull指令获得Server push的所有选项并应用(建议把内网路由加上那样×××连上后就可直接对局域网操作了)


085301850.jpg

可以让客户端之间相互访问直接通过open***程序转发

085330667.jpg

如果Client使用的CACommon Name有重复了,或者说客户都使用相同的CA #keys连接×××,一定要打开这个选项,否则只允许一个人连接×××

085424186.jpg

对数据进行压缩

085454545.jpg

定义用户

085520956.jpg

open***状态log

085547894.jpg

每次重新启动open***后保留原有的log信息,新信息追加到文件最后

3.7启动Open×××

修改完毕后,即可以启动***,--daemon为后台守护进程模型启动
/usr/local/open***/sbin/open*** --daemon --config /etc/open***/server.conf

085633969.jpg

使用netstat -ln 查看1194open***的端口是否已经起来

3.8 把程序加载到开机启动项中

echo "/usr/local/open***/sbin/open***--daemon --config /etc/open***/server.conf " >> /etc/rc.local

四 客户端安装及配置

4.1 win客户端的安装和配置

下载open***客户端http://www.open***.net/release/open***-2.0.9-install.exe 安装完毕
把刚刚打包的userkey.tar.gz下载解压到 C:\ProgramFiles\Open×××\config 目录下
/home/download/open***-2.0.9/sample-config-files/client.conf也下载到C:\Program Files\Open×××\config 目录下

接着是配置这个client.conf客户端配置文件

主要修改有以下几个地方

dev tun
proto tcp
remote 你的***地址 1194
user nobody
group nobody
ca ca.crt
cert client-chenyz.crt
key client-chenyz.key ##:文件名和路径必须对应
comp-lzo
#redirect-gateway def1

确保与服务端的配置对应,然后将client.conf修改文件名为client.o***,右键点击client.o***,选择"Start Open××× on this configfile"

085711866.jpg

可以看到连接已经成功,并且创建了 [本地连接 6] 一条新的链路

085803387.jpg

085804569.jpg


或者你也可以打开C:\ProgramFiles\Open×××\bin\open***-gui-1.0.3.exe进行连接,双击后会在任务栏里有个小连接图标,变成绿色的话就表明你连接成功

    open***的参数配置如果只是简单的应用,配置倒真的很简单,不过如果真的是要用起来,网段设置和访问控制各种问题真的不少,入是否配置dhcp,是否分配dns,***如何和内网通讯,很多很多,因为我只是拿来做代理这里就不细说了

4.2 LINUX客户端配置

4.2.1 安装open***openssllzo安装方案同LINUX服务器安装方法相同

4.2.2 配置客户端程序

4.2.3复制从服务器下载过来的bcgogo***.tar.gz/etc/open***

tar zxvf bcgogo***.tar.gz/etc/open***

4.2.4创建一个连接配置文件

vim /etc/open***/test.o***

client

;dev tap

dev tun

;dev-node MyTap

;proto tcp

proto tcp

remote 58.215.78.110 1194

;remote-random

resolv-retry infinite

nobind

user nobody

group nobody(windows与LINUX不同)

persist-key

persist-tun

;http-proxy-retry # retry on connection failures

;http-proxy [proxy server] [proxy port #]

;mute-replay-warnings

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

cert /etc/open***/client-bcgogo.com.crt

key/etc/open***/client-bcgogo.com.key

ns-cert-type server

;tls-auth ta.key 1

;cipher x

comp-lzo

verb 3

;mute 20

4.2.5 检查并启动

/usr/local/open***/sbin/open***--config /etc/open***/test.o***(会显示所有启动信息)

/usr/local/open***/sbin/open***--daemon --config /etc/open***/test.o***(正式启动程序会加载到后台执行)

netstat -tnl 检查是否启动完成自动分配的IP地址为10.8.0.9

085840789.jpg

增加路由

route add -net 10.8.0.0 netmask 255.255.255.0 dev eth0

route add -net 10.8.0.0 netmask 255.255.255.0 gw 10.8.0.1

五 备注

备注1:(客户端配置)

up ‘/jffs/open***/***up.sh open***’

#*** tunnel up时执行autodd***脚本

down ‘/jffs/open***/***down.sh open***’

#*** tunnel down时执行autodd***脚本

daemon

#驻留后台

client

#配置为客户端

dev tun11

#指定tun接口名称,需跟open***dd的配置对应,tomato firmware默认即使用tun11

proto udp

#使用udp协议,和服务器对应

remote <服务器IP 地址>  1194

#服务器IP地址和端口号

nobind

#客户端使用动态接口,写不写应该都一样

persist-key

#***通道重启时不用重新读密匙

#persist-tun

#这句不能有或要comment掉,否则*** down的时候脚本不会生效

comp-lzo yes

#使用LZO压缩

#redirect-gatewaydef1

#这句同样不能有,否则会多一条到open*** server的默认路由,移动设备要直接连***把这句uncomment就好

verb 3

#日志详细程度

ca ca.crt

#指定证书所在

cert client.crt

#指定证书所在

key client.key

#指定证书所在

log-append /tmp/open***.log

#日志文件所在

fragment 1300

#指定分片设置,和服务器对应

resolv-retry infinite

#断线后始终尝试重连

keepalive 10 30

#keepavlive polling interval

备注2(服务器配置)

Server使用的配置文件server.conf

----------------CUTHere-------------

#申明本机使用的IP地址,也可以不说明

;local a.b.c.d

#申明使用的端口,默认1194

port 1194

#申明使用的协议,默认使用UDP,如果使用HTTP proxy,必须使用TCP协议

;proto tcp

proto udp

#申明使用的设备可选taptuntap是二层设备,支持链路层协议。

#tunip层的点对点协议,限制稍微多一些,本人习惯使用TAP设备

dev tap

;dev tun

#Open×××使用的ROOT CA,使用build-ca生成的,用于验证客户是证书是否合法

ca ca.crt

#Server使用的证书文件

cert server.crt

#Server使用的证书对应的key,注意文件的权限,防止被盗

keyserver.key# This file should be keptsecret

#CRL文件的申明,被吊销的证书链,这些证书将无法登录

crl-verify***crl.pem

#上面提到的生成的Diffie-Hellman文件

dh dh1024.pem

#这是一条命令的合集,如果你是Open×××的老用户,就知道这条命令的来由

#这条命令等效于:

# mode server#Open×××工作在Server模式,可以支持多client同时动态接入

# tls-server#使用TLS加密传输,本端为ServerClient端为tls-client

#

# if dev tun:#如果使用tun设备,等效于以下配置

#ifconfig 10.8.0.1 10.8.0.2#设置本地tun设备的地址

#ifconfig-pool 10.8.0.4 10.8.0.251#说明Open×××使用的地址池(用于分配给客户),分别是起始地址、结束地址

#route 10.8.0.0 255.255.255.0#增加一条静态路由,省略下一跳地址,下一跳为对端地址,这里是:10.8.0.2

#if client-to-client:#如果使用client-to-client这个选项

#push "route 10.8.0.0255.255.255.0"#把这条路由发送给客户端,客户连接成功后自动加入路由表,省略了下一跳地址:10.8.0.1

#else

#push "route 10.8.0.1" #否则发送本条路由,这是一个主机路由,省略了子网掩码和下一跳地址,分别为:255.255.255.255 10.8.0.1

#

# if dev tap:#如果使用tap设备,则等效于以下命令

#ifconfig 10.8.0.1 255.255.255.0#配置tap设备的地址

#ifconfig-pool 10.8.0.2 10.8.0.254 255.255.255.0#客户端使用的地址池,分别是起始地址、结束地址、子网掩码

#push "route-gateway 10.8.0.1"#把环境变量route-gateway传递给客户机

#

server 10.8.0.0255.255.255.0#等效于以上命令

#用于记录某个Client获得的IP地址,类似于dhcpd.lease文件,

#防止open***重新启动后“忘记”Client曾经使用过的IP地址

ifconfig-pool-persistipp.txt

#Bridge状态下类似DHCPD的配置,为客户分配地址,由于这里工作在路由模式,所以不使用

;server-bridge10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100

#通过××× ServerClient push路由,client通过pull指令获得Server push的所有选项并应用

;push "route192.168.10.0 255.255.255.0"

;push "route192.168.20.0 255.255.255.0"

#×××启动后,在××× Server上增加的路由,×××停止后自动删除

;route 10.9.0.0255.255.255.252

#Run script orshell command cmd to validate client

#virtual addressesor routes. 具体查看manual

;learn-address./script

#其他的一些需要PUSHClient的选项

#

#使Client的默认网关指向×××,让Client的所有Traffic都通过×××

;push"redirect-gateway"

#DHCP的一些选项,具体查看Manual

;push"dhcp-option DNS 10.8.0.1"

;push"dhcp-option WINS 10.8.0.1"

#如果可以让××× Client之间相互访问直接通过open***程序转发,

#不用发送到tun或者tap设备后重新转发,优化Client to Client的访问效率

client-to-client

#如果Client使用的CACommon Name有重复了,或者说客户都使用相同的CA

#keys连接×××,一定要打开这个选项,否则只允许一个人连接×××

;duplicate-cn

#NAT后面使用×××,如果×××长时间不通信,NAT Session可能会失效,

#导致×××连接丢失,为防止之类事情的发生,keepalive提供一个类似于ping的机制,

#下面表示每10秒通过×××Control通道ping对方,如果连续120秒无法ping通,

#认为连接丢失,并重新启动×××,重新连接

#(对于mode server模式下的open***不会重新连接)。

keepalive 10 120

#上面提到的HMAC防火墙,防止DOS***,对于所有的控制信息,都使用HMAC signature

#没有HMAC signature的控制信息不予处理,注意server端后面的数字肯定使用0client使用1

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

#对数据进行压缩,注意ServerClient一致

comp-lzo

#定义最大连接数

;max-clients 100

#定义运行open***的用户

user nobody

group nobody

#通过keepalive检测超时后,重新启动×××,不重新读取keys,保留第一次使用的keys

persist-key

#通过keepalive检测超时后,重新启动×××,一直保持tun或者tap设备是linkup的,

#否则网络连接会先linkdown然后linkup

persist-tun

#定期把open***的一些状态信息写到文件中,以便自己写程序计费或者进行其他操作

statusopen***-status.log

#记录日志,每次重新启动open***后删除原有的log信息

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

#log一致,每次重新启动open***后保留原有的log信息,新信息追加到文件最后

;log-appendopen***.log

#相当于debug level,具体查看manual

verb 3