5 配置 Open××× windows 客户端

a)安装 openvpn-2.0.9-gui-1.0.3-install.exe

编辑安装目录config 文件中的 client.ovpn 文件

内容如下:

client

dev tun

proto udp

remote 192.168.80.129 2194

persist-key

persist-tun

ca ca.crt

cert client1.crt

key client1.key

ns-cert-type server

comp-lzo

verb 3

;redirect-gateway def1

tls-auth ta.key 1

安照配置文件 cp 相应的 .key .crt .pem 文件到 config 文件夹

运行openvpn 客户端,并从windows客户机ping 公司局域网pc 172.18.2.202

tracert pathping 一下,确认数据流向

OK 实验成功

6 再做一个小测试 吊销客户端证书

root@localhost ~]# cd Scripts/openvpn-2.0.9/easy-rsa/

[root@localhost easy-rsa]# ./revoke-full client1 吊销client1的证书

这条命令执行完成之后, 会在 keys 目录下面, 生成一个 crl.pem 文件,这个文件中包含了吊销证书的名单。 成功注销某个证书之后,可以打开 keys/index.txt 文件,可以看到被注销的证书前面,已标记为R

a 复制easy-rsa 目录下keys目录中的 crl.pem /usr/local/etc/keys 目录中
b 确保 server.conf 中包含这样一句

crl-verify /usr/local/etc/keys/crl.pem

c 重新启动openvpn 。并测试

Client 连接失败 测试成功

7.使用 tap 设备的路由模式

把服务器和客户端配置文件中 dev tun 改为 dev tap 即可

关于使用tap tun 设备的区别,见附录 tun tap 区别。

(二) 搭建Open××× Server 桥接模式

还是(一)的网络环境

目的:客户端还是连接到公司局域网中,但出于一些目的必须使用桥接模式。

如客户端要获得公司局域网ip,某些应用只能使用桥接模式,节省ip

不管什么原因,反正就是必须使用桥接模式

Open××× Server 基本设定:连接方式采用桥接,认证方式采用证书认证,虚拟设备使用tap

1 Open××× 服务器的LAN 网卡和虚拟网卡桥接

关闭Open××× 服务 killall openvpn

a 确认你已经安装了bridge-utils软件包。

可以 vi /root/install.log rpm –qa ,没有安装可以去安装光盘找或者直接yum安装

b 编辑下面的bridge-start脚本。依照你要桥接的物理以太网接口设置br, tap, eth, eth_ip,eth_netmasketh_broadcast参数。确保使用的接口是私有的且它连接的局域网由防火墙保护其到internet的连接。可以使用ifconfig命令获得要填入bridege-start参数的网络接口的信息
c 这个脚本可以从
d http://openvpn.net/index.php/documentation/miscellaneous/ethernet-bridging.html#linuxscript获得,或者 openvpn 的模版文件目录中也有
e 运行bridge-start脚本。它将创建一个永久( 服务器重起前 )的tap0接口并将它和活跃的以太网接口桥接。
f 把这个脚本也加入到 /etc/rc.local
2 编辑服务器配置文件
a “(一)”步骤地服务器配置文件基础上
i. 更改 dev tun dev tap0
ii. 注释 server 开头的行
iii. 添加如下行
iv. 网桥ip 分给vpn 客户端的ip范围 server-bridge 172.18.2.30 255.255.255.0 172.18.2.128 172.18.2.254
v. push "route 172.18.2.0 255.255.255.0" 这句也可以注释掉,当然只要知道这句是push 一条路由给 vpn client 就可以灵活掌握。
vi.
3 设置防火墙使数据包在新建的tap0 br0 借口上自由传送

vi /etc/sysconfig/iptables

添加如下几条

-A RH-Firewall-1-INPUT -i tap0 -j ACCEPT

-A RH-Firewall-1-INPUT -i br0 -j ACCEPT

那条 NAT 的规则也可以去掉。

开启openvpn

/usr/local/sbin/openvpn --daemon --config /usr/local/etc/server.conf

winxp client 连接到服务器

测试 ok ipconfig /all tracert pathping

Open××× 服务器启动和停止

运行 bridge-start 运行 openvpn 停止 openvpn 运行 bridge-stop

Ok Open××× 桥接设置完毕


(三) 搭建Open××× Server 路由模式 + 口令认证+ MYSQL

还是(一)的网络环境

目的:客户端还是连接到公司局域网中,但为了用户管理方便,认证数据从mysql 数据库中提取。

Open××× Server 基本设定:连接方式采用路由,认证方式采用mysql认证,虚拟设备使用tun

1 首先检查pam-devel包是否安装,否则从系统盘安装改软件包
a) rpm –qa | grep pam
2.检查Mysql是否安装,确认mysql-devel包已经安装,否则从系统盘安装改软件包

rpm –qa | grep msql

mysql-5.0.45-7.el5

mysql-devel-5.0.45-7.el5

mysql-server-5.0.45-7.el5

注:从系统盘安装改软件包时有一系列的依赖问题,我晕

可以把系统盘设置为yum源,使用yum安装这样依赖问题就会自动解决

3.我们安装pam_mysql使用MySQL数据库存储用户数据,其它数据库可以找相应的PAM验证模块(我是在cu下载的 pam_mysql-0.7RC1.tar.gz

[root@localhost ~]# gzip -cd pam_mysql-0.7RC1.tar.gz | tar xvf –

[root@localhost ~]# cd pam_mysql-0.7RC1

[root@localhost pam_mysql-0.7RC1]# ./configure

[root@localhost pam_mysql-0.7RC1]# make

[root@localhost pam_mysql-0.7RC1]# cp .libs/pam_mysql.so /lib/security/

4 配置 mysql 数据库 pam

Server mysqld start

使用 chkconfig 命令让 mysql 数据库,开机自启动

配置数据库

以管理员身份登录数据库:

mysql>; create database vpn;

mysql>; GRANT ALL ON vpn.* TO vpn@localhost IDENTIFIED BY 'vpn123';

mysql>; flush privileges;

mysql>; use vpn;

mysql>; CREATE TABLE vpnuser (

->; name char(20) NOT NULL,

->; password char(128) default NULL,

->; active int(10) NOT NULL DEFAULT 1,

->; PRIMARY KEY (name)

->; );

mysql>; insert into vpnuser (name,password) values('elm',elm);

#创建vpn用户,对vpn这个database有所有操作权限,密码为vpn123

#active不为1,无权使用×××

#增加用户 用户名:elm 密码:elm

配置pam_mysql模块

创建/etc/pam.d/openvpn文件,文件内容如下:

===================CUT Here================

auth sufficient pam_mysql.so user=vpn passwd=vpn123 host=localhost db=vpn \

table=vpnuser usercolumn=name passwdcolumn=password \

where=active=1 sqllog=0 crypt=0

account required pam_mysql.so user=vpn passwd=vpn123 host=localhost db=vpn \

table=vpnuser usercolumn=name passwdcolumn=password \

where=active=1 sqllog=0 crypt=0

==================Cut Here=================

crypt(0) -- Used to decide to use MySQL's PASSWORD() function or crypt()

0 = No encryption. Passwords in database in plaintext. NOT recommended!

1 = Use crypt

2 = Use MySQL PASSWORD() function

下面可以测试pam_mysql是否工作正常,先检查saslauthd是否安装:

[root@localhost pam_mysql-0.7RC1]# rpm -qa | grep sasl

cyrus-sasl-plain-2.1.22-4

cyrus-sasl-devel-2.1.22-4

cyrus-sasl-2.1.22-4

cyrus-sasl-lib-2.1.22-4

cyrus-sasl-2.1.22-4应该就可以了,如果没有请安装相应的软件包,不安装也行,可以通过其它方法测试

[root@vpn ~]# saslauthd -a pam

把这句加入到 /etc/rc.local 记得写全路径 whereis locate

[root@vpn ~]# testsaslauthd -u elm -p elm -s openvpn

0: OK "Success."

恭喜,pam_mysql工作正常了,下面可以开始配置Open×××服务器了。

这里我第一次测试时失败了

编辑 /etc/pam.d/openvpn

两句最后都加上

verbose=1 详细日志

[root@localhost pam_mysql-0.7RC1]# ls -ltr /var/log

看哪个日志文件被更新了

再开两个窗口监视这两个文件

[root@localhost pam_mysql-0.7RC1]# tail –f /var/log/messages

[root@localhost pam_mysql-0.7RC1]# tail -f /var/log/secure

重新 做一次 saslauthd 的启动 testsaslauthd

日志也没有看到明显错误

最后才记起来

Mysql password 函数因为mysql 的加密函数和pam_mysql-0.7RC1 的加密函数不相同。

crypt (plain)

The method to encrypt the user's password:

0 (or "plain") = No encryption. Passwords stored in plaintext.

HIGHLY DISCOURAGED.

1 (or "Y") = Use crypt(3) function.

2 (or "mysql") = Use MySQL PASSWORD() function. It is possible

that the encryption function used by PAM-MySQL

is different from that of the MySQL server, as

PAM-MySQL uses the function defined in MySQL's

C-client API instead of using PASSWORD() SQL function

in the query.

3 (or "md5") = Use plain hex MD5.

4 (or "sha1") = Use plain hex SHA1.

于是 crypt 设置为0 ,新建一个密码不加密的帐户。再测试就通过了

5 生成 openvpn-auth-pam.so

[root@localhost etc]# cd /root/Scripts/openvpn-2.0.9/plugin/auth-pam/

[root@localhost auth-pam]# make

[root@localhost auth-pam]# cp openvpn-auth-pam.so /usr/local/etc/lib/

6.配置服务器配置文件, 在(一)的基础上

添加如下几行:

#说明使用的插件,openvpn为插件的参数,使用pam的servicesname

plugin /usr/local/etc/lib/openvpn-auth-pam.so openvpn

#不请求客户的CA证书,使用User/Pass验证

client-cert-not-required

#使用客户提供的UserName作为Common Name

username-as-common-name

7.配置客户端配置文件

注释掉

;cert client1.crt

;key client1.key

增加

#询问用户名和密码

auth-user-pass

使用客户端连接服务器 测试 ok