一、原理图:
<?xml:namespace prefix = o ns = “urn:schemas-microsoft-com:office:office” />
二、
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
————————————————————未完待续———————————————————————–