一、原理图:
<?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
————————————————————未完待续———————————————————————–