实验环境
    ×××服务器:CentOS 6.X 64位系统
    ×××内网IP:10.10.10.10/255.0.0.0
    ×××外网IP:192.168.10.71
    Open×××版本:Open××× 2.3.2 x86_64-RedHat-linux-gnu
    ×××同网段其它server : 10.10.10.11  (测试时使用)
一、服务器端安装及配置
1、安装前准备
# 添加epel源
/usr/bin/wget -qO /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
# 安装openssl和lzo,lzo用于压缩通讯数据加快传输速度
yum -y install openssl openssl-devel lzo
 
2、安装及配置Open×××和easy-rsa
# 安装open***和easy-rsa
yum -y install open*** easy-rsa
cp -a /usr/share/easy-rsa/ /etc/open***/ 
# 修改vars文件
cd /etc/open***/easy-rsa/2.0/
cp vars vars.bak
vi vars
# 修改注册信息,比如公司地址、公司名称、部门名称等。
export KEY_COUNTRY="CN"
export KEY_PROVINCE="BJ"
export KEY_CITY="BJ"
export KEY_ORG="你的公司"
export KEY_EMAIL="你的邮箱" 
export KEY_OU="OPS"
# 初始化环境变量
source vars 
# 清除keys目录下所有与证书相关的文件
# 下面步骤生成的证书和密钥都在/etc/open***/easy-rsa/2.0/keys目录里
./clean-all
# 生成根证书ca.crt和根密钥ca.key(一路按回车即可)
./build-ca
# 为服务端生成证书和密钥(一路按回车,直到提示需要输入y/n时,输入y再按回车,一共两次)
./build-key-server server 
# 创建迪菲·赫尔曼密钥,会生成dh2048.pem文件(生成过程比较慢,在此期间不要去中断它)
./build-dh
# 生成ta.key文件(防DDos***、UDP淹没等恶意***)
open*** --genkey --secret /etc/open***/easy-rsa/2.0/keys/ta.key
# 每一个登陆的×××客户端需要有一个证书,每个证书在同一时刻只能供一个客户端连接,下面建立2份
# 为客户端生成证书和密钥(一路按回车,直到提示需要输入y/n时,输入y再按回车,一共两次)
./build-key client1
./build-key client2

3、创建服务器端配置文件
# 将需要用到的open***证书和密钥复制一份到/etc/open***/目录中
cp /etc/open***/easy-rsa/2.0/keys/{ca.crt,server.{crt,key},dh2048.pem,ta.key} /etc/open***/
# 复制一份服务器端配置文件模板server.conf到/etc/open***/
cp /usr/share/doc/open***-2.4.4/sample/sample-config-files/server.conf /etc/open***/
# 编辑server.conf
vi /etc/open***/server.conf
port 1194
# 改成tcp,默认使用udp,如果使用HTTP Proxy,必须使用tcp协议
proto tcp
dev tun
# 证书相关信息,全路径为/etc/open***/ca.crt
ca keys/ca.crt
cert keys/server.crt
key keys/server.key  # This file should be kept secret
dh keys/dh2048.pem
# 默认虚拟局域网网段,不要和实际的局域网冲突即可
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
# 10.0.0.0/8是我这台×××服务器所在的内网的网段,读者应该根据自身实际情况进行修改
push "route 10.0.0.0 255.0.0.0"
# 可以让客户端之间相互访问直接通过open***程序转发,根据需要设置
client-to-client
# 如果客户端都使用相同的证书和密钥连接×××,一定要打开这个选项,否则每个证书只允许一个人连接×××
duplicate-cn
keepalive 10 120
tls-auth keys/ta.key 0 # This file is secret
comp-lzo
persist-key
persist-tun
# Open×××的状态日志,默认为/etc/open***/open***-status.log
status open***-status.log
# Open×××的运行日志,默认为/etc/open***/open***.log 
log-append open***.log
#将下面一行注释掉
#explicit-exit-notify 1

4、配置内核和防火墙,启动服务
# 关闭selinux
sed -i '/SELINUX/ s/enforcing/disabled/' /etc/selinux/config
setenforce 0
# 开启路由转发功能
sed -i '/net.ipv4.ip_forward/ s/0/1/' /etc/sysctl.conf
sysctl -p 
# 配置防火墙,别忘记保存
iptables -I INPUT -p tcp --dport 1194 -m comment --comment "open***" -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE
service iptables save
# 启动open***并设置为开机启动
service open*** start
chkconfig open*** on

5、创建客户端配置文件
# 复制一份client.conf模板命名为client.o***
cp /usr/share/doc/open***-2.4.4/sample/sample-config-files/client.conf /etc/open***/easy-rsa/2.0/keys/client.o***
# 编辑client.o***
vim client.o***
client
dev tun
# 改为tcp
proto tcp
# Open×××服务器的外网IP和端口
remote 192.168.10.71 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
# client1的证书
cert client1.crt
# client1的密钥
key client1.key
tls-auth ta.key 1
comp-lzo
verb 3
二、客户端安装及配置
    客户端系统:Windows7 64位
    内网IP:192.168.10.72
    Open×××版本:Open××× 2.3.3 Windows 64位
    1、下载安装Open×××
    Open××× 2.3.3 Windows 32位 安装文件:
    http://swupdate.open***.org/community/releases/open***-install-2.3.3-I002-i686.exe
    Open××× 2.3.3 Windows 64位 安装文件:
    http://swupdate.open***.org/community/releases/open***-install-2.3.3-I002-x86_64.exe
    2、配置client
    将Open×××服务器上的client.o***、ca.crt、client1.crt、client1.key、ta.key上传到Windows客户端安装目录下的config文件夹(C:\Program Files\Open×××\config)
    3、启动Open××× GUI
    在电脑右下角的open***图标上右击,选择“Connect”。正常情况下应该能够连接成功,分配正常的IP。
    
    客户端系统:CentOS linux 64位
    内网IP:192.168.10.72
    yum -y install openssl openssl-devel lzo
    yum -y install open***
    cd /etc/open***/
    rz 上传客户端证书 秘钥 .o*** CA证书  ta.key
    open*** client1.o***  (如果不行client1.opvn 重命名成client1.conf)
三、激动人心的时刻来了
        在你的×××客户端执行:   
        ping  10.10.10.11  (×××服务器同网段的服务器)
        
        如果通了,辣么恭喜您啦。。。。。。。
        如果没通,辣么也不要灰心........
        对端防火墙,
        ×××服务器NAT,
        转发功能,
        还要那剪不断,理还乱的证书and keyS
        大不了重头再来。。。。
        
        缕做屡败,屡败缕做,come on baby ...........
        
        
        
        
注:以上所有的配置为基于证书的认证,下面讲解一下基于密码的认证       

其实非常简单,只需要要调整一下服务器端和客户端的配置文件即可
server.conf
#这些是基于密码认证服务端需要添加的参数
auth-user-pass-verify /etc/open***/checkpsw.sh via-env
client-cert-not-required
username-as-common-name
script-security 3 
#上传脚本,创建保存密码的文件
rz checkpsw.sh  #如果没有这个脚本,就baidu吧,一堆堆滴
chmod +x checkpsw.sh
vi /etc/open***/psw-file
chmod 400 /etc/open***/psw-file


client.opvn
注释掉关于证书的信息
#cert client.crt
#key client.key
#这些是基于密码认证客户端需要添加的参数
auth-user-pass
auth-user-pass pass.txt    这个文件保存的是用户名密码