一、原理图:

<?xml:namespace prefix = o ns = “urn:schemas-microsoft-com:office:office” />

Open××× for Linux搭建之一

二、
Open×××
应用场景:

×××
虚拟专用通道,可以应用于企业和企业之间或者外地出差个人与公司之间
安全数据传输
的隧道,
Open×××

Linux
下开源
×××
的先锋,提供了良好的性能和友好的用户
GUI

Open×××
允许参与建立
×××
的单点使用预设的
私钥
,第三方证书,或者用户名
/
密码来进行
身份验证
。它使用了
OpenSSL
加密库,以及
SSLv3/TLSv1
协议。
Open×××
能在
Linux

xBSD

Mac OS X

Windows XP
及更高版本上运行。它并不是一个基于
Web

×××
软件,也不与
IPsec
及其他
×××
软件包兼容。

三、Open×××
工作原理:

一台拥有私有
IP
地址的主机想要通过
Internet
访问另一私有网络,首先必须把自己映射(
NAT
)成可以访问
Internet
的公有
IP
,然后当数据到达目标公有
IP
地址主机时,公有
IP
不在做数据转发,因为使用私有
IP
地址的组织和个人很多不知该转发给谁。在配置了
Open***


,会在主机主机上多出现一个网卡,这样就使源主机和目标主机由虚拟网卡构成的一个局域网(
10.8.0.0/24
)中通讯,用户访问一个远程的
虚拟地址
(属于
虚拟网卡
配用的地址系列,区别于真实地址),则操作系统会通过路由机制将
数据包

TUN
模式)或
数据帧

TAP
模式)发送到虚拟网卡上,服务程序接收该数据并进行相应的处理后,通过
SOCKET
从外网上发送出去,
远程服务
程序通过
SOCKET
从外网上接收数据,并进行相应的处理后,发送给虚拟网卡,则
应用软件
可以接收到。

私有IP地址范围:

A: 10.0.0.0~10.255.255.255

10.0.0.0/8

B:172.16.0.0~172.31.255.255

172.16.0.0/12

C:192.168.0.0~192.168.255.255

192.168.0.0/16

 

深圳总公司:Open××× Server

 eth0 
公网IP 2.2.2.1/255.255.255.0 网关2.2.2.254 DNS 8.8.8.8

 eth1 
私有IP(总公司网关)192.168.100.254/255.255.255.0

异地分公司:

 eth0 
公网IP 2.2.2.2/255.255.255.255.0 网关 2.2.2.254 DNS 8.8.8.8

 eth1 
私有IP(分公司网关)192.168.200.254/255.255.255.0

Linux/Windows
客户端:

 eth0   
私有
IP 192.168.200.200/255.255.255.0
网关
192.168.200.254  DNS 8.8.8.8

 

配置之前

1
、在
NAT Server
上打开路由转发实现路由功能

# vim /etc/sysctl.conf

net.ipv4.ip_forward = 1

# sysctl -p

2
、打开
iptables
端口

# iptables -t nat -A POSTROUTING -s 192.168.200.0/24 -o eth0 -j SNAT –to-source 2.2.2.1

#iptables -A INPUT -p udp –dport 1194 -j ACCEPT

#iptables -A OUTPUT -p udp –dport 1194 -j ACCEPT

#service iptables save

#service iptables restart

确保客户端能访问
Open×××
服务器的公有
IP
地址

===============================================================================

三、
在深圳总部部署
OPEN××× Server

 
拨号验证的
***
服务端帐号和密码决定存放在
mysql
数据库

    1)
安装
mysql
数据库

    2)open***
软件够能支持使用
pam
连接数据库

    3)
安装
pam_mysql.so
模块

我用的是平台是
Linux 6.3

# uname -a

Linux ***.shenzhen.com 2.6.32-279.el6.x86_64 #1 SMP Wed Jun 13 18:24:36 EDT 2012 x86_64 x86_64 x86_64 GNU/Linux

1
、安装
mysql
数据库并且配置

# yum install mysql-server mysql-libs mysql-devel

# service mysqld start

# mysql -p

Enter password:

mysql> create database open*** default charset utf8;

mysql> show databases;

+——————–+

| Database                         |

+——————–+

| information_schema     |

| mysql                                 |

| open***                          |         

| test                            |      

+——————–+

mysql> use open***;

 

mysql> create table users (

    -> id int unsigned not null primary key auto_increment,

    -> name varchar(32),

    -> passwd varchar(64) );

 

mysql> insert into usres values (NULL,’cxh’,password(‘123’));

mysql> insert into users values (NULL,’zhanghua’,password(‘123’)); //
创建
×××
客户端账户和密码

mysql> grant all on open***.* to ***@’localhost’

    -> identified by ‘123’;

2
、安装
pam_mysql
模块

 

# yum install pam-devel -y

# tar xvf pam_mysql-0.7RC1.tar.gz -C /usr/src

# cd /usr/src/pam_mysql-0.7RC1/

# ./configure && make && make install

# mv /lib/security/pam_mysql.*  /lib64/security/

 

3
、编写
pam
的配置文件,该配置文件给后面
open***
使用的

 

# vim /etc/pam.d/open***

#%PAM-1.0

auth       required     pam_mysql.so user=*** passwd=123 host=/var/lib/mysql/mysql.sock db=open*** table=users usercolumn=name passwdcolumn=passwd crypt=2

account    required     pam_mysql.so user=*** passwd=123 host=/var/lib/mysql/mysql.sock db=open*** table=users usercolumn=name passwdcolumn=passwd crypt=2

 

测试该配置文件是否有效:

 

# service saslauthd restart

 

# testsaslauthd -s open*** -u cxh -p 123 

0: OK “Success.”

//
如果这里验证不成功的话,一般就是
pam
的配置文件编写错误,查看与
/etc/my.cnf

sock
目录是否一致。

4
、安装
Open×××
服务端

 

       
基于
ssl
加密的一个
***
工具

 

1

安装
lzo
依赖工具

lzo-2.03.tar.gz

#tar xvf lzo-2.03.tar.gz

#cd lzo-2.03

# ./configure && make && make install

 

2

安装
open***

 

# yum install openssl-devel -y

# tar xvf open***-2.0.2.tar.gz -C /usr/src

# cd /usr/src/open***-2.0.2/

# ./configure && make && make install

 


open***
支持使用
pam
进程帐号验证

# cd plugin/auth-pam/

# make

# mkdir /etc/open***/

# cp open***-auth-pam.so /etc/open***/open***-auth-pam.so

 

5
、配置
open***

 

1
)生成加密数据用的证书和相关密钥

 

# mkdir -p /etc/open***/keys

# cp -a /usr/src/open***-2.0.2/easy-rsa/* /etc/open***/

 

# cd /etc/open***/

# vim ./vars

export D=`pwd`

export KEY_CONFIG=$D/openssl.cnf

export KEY_DIR=$D/keys                                  //
这里定义了密钥证书的路径

export KEY_SIZE=1024

export KEY_COUNTRY=CN 

export KEY_PROVINCE=GD

export KEY_CITY=shenzhen

export KEY_ORG=”Shenzhen.com “

export KEY_EMAIL=”***@shenzhen.com” 

 

# . vars 
让该脚本里的变量生效

# ./clean-all

 

 

2
)生成根证书
ca.crt            

# ./build-ca

 

Country Name (2 letter code) [CN]:

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

Locality Name (eg, city) [shenzhen]:

Organization Name (eg, company) [Shenzhen.com]:

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

Common Name (eg, your name or your server’s hostname) []:***.shenzhen.com  <—
必须填写

Email Address [***@shenzhen.com]:

 

 

3

生成
***
服务器专用的私钥

       
服务器用该私钥签名数据,然后发送给客户端

 

# ./build-key-server ***

 

Country Name (2 letter code) [CN]:

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

Locality Name (eg, city) [shenzhen]:

Organization Name (eg, company) [Shenzhen.com]:

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

Common Name (eg, your name or your server’s hostname) []:***.shenzhen.com  //
必须填写本地主机

Email Address [***@shenzhen.com]:

 

Please enter the following ‘extra’ attributes

to be sent with your certificate request

A challenge password []:       
直接回车,无需密码

An optional company name []:   
直接回车

Using configuration from /etc/open***/openssl.cnf

Check that the request matches the signature

Signature ok

The Subject’s Distinguished Name is as follows

countryName           :PRINTABLE:’CN’

stateOrProvinceName   :PRINTABLE:’GD’

localityName          :PRINTABLE:’shenzhen’

organizationName      :PRINTABLE:’shenzhen’

commonName            :PRINTABLE:’shenzhen.com’

emailAddress          :IA5STRING:’***@shenzhen.com ‘

Certificate is to be certified until Dec 24 01:05:23 2022 GMT (3650 days)

Sign the certificate? [y/n]:y 

1 out of 1 certificate requests certified, commit? [y/n]y        //
这里必须
y

Write out database with 1 new entries

Data Base Updated

 

 

生成
dh
密钥文件

# ./build-dh

这时查看生成的验证密钥文件就会有:

# ls /etc/open***/keys

01.pem  ca.key      index.txt       index.txt.old  serial.old  ***.csr

ca.crt  dh1024.pem  index.txt.attr  serial         ***.crt     ***.key

4)
编辑配置文件

 

# cp /usr/src/open***-2.0.2/sample-config-files/server.conf  /etc/open***/server.conf

 

# vim /etc/open***/server.conf

port 1194

proto udp

dev tun                      //
生成一个虚拟的隧道网卡

 

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

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

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

 

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

server 10.8.0.0 255.255.255.0      //tun0
虚拟网卡所在的
×××
网段
IP

push “route 0.0.0.0 0.0.0.0”          //
让拨号的客户端增加一个默认路由指向
×××
服务器

push “redirect-gateway”        //
修改客户端原来的默认网关,把前面注释符号“
;

去掉

 

client-to-client                           //
让拨号后客户端可以相互通信

comp-lzo

 

plugin /etc/open***/open***-auth-pam.so open***  //
调用插件,使用
pam
模块验证

client-cert-not-required

username-as-common-name

 

5)
使用自带启动脚本启动服务

# cp /usr/src/open***-2.0.2/sample-scripts/open***.init  /etc/rc.d/init.d/open***

 

# chmod 755 /etc/rc.d/init.d/open***

 

启动

# service open*** start

正在启动
open***

                                         [
确定
]

 

 

验证服务是否启动成功:

 [root@*** ~]# ifconfig tun0

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:40 errors:0 dropped:0 overruns:0 frame:0

          TX packets:5 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:100

          RX bytes:16944 (16.5 KiB)  TX bytes:420 (420.0 b)

# lsof -i:1194

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

open*** 4481 root    7u  IPv4  23873      0t0  UDP *:open***

 

 

打开
×××
客户端转发上网,实现路由功能

# vim /etc/sysctl.conf

net.ipv4.ip_forward = 1

# sysctl  -p

 

# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT –to-source 2.2.2.1

打开
iptables

××× 1194
端口

#iptables -A INPUT -p udp –dport 1194 -j ACCEPT

#iptables -A OUTPUT -p udp –dport 1194 -j ACCEPT

#service iptables save

#service iptables restart
————————————————————未完待续———————————————————————–