一、在网上下载open***的安装包 http://open***.net/上下载open***的最新版,时至今 日是open***-2.0.9.tar.gz。
    网上都说还需要lzo这个压缩库。这个包是压缩的,我没有安装,在编译程序的时候只需要加上--disable-lzo就可以了。然后再配置文件里面把这项注释掉就可以了,这样所有要安装的就是一个包open***-2.0.9.tar.gz。
二、***服务端的网络结构
    ***服务端是有两个ip 其中eth0 172.16.6.79 提供***服务,由外部通过172.31.16.0/24 通过1194端口拨入,然后通过 eth1 192.168.253.79访问192.168.253.0/24去维护服务器
三、安装open***
tar zxvf open***-2.0.9.tar.gz
cd open***-2.0.9
./configure –prefix=/usr/local/open*** –-disable-lzo
make;make install
四、生成open***证书
    1、cd open***-2.0.9/ easy-rsa/
    vi vars
    根据自己的情况设置
根据自己的情况设置KEY_COUNTRY, KEY_PROVINCE, KEY_CITY, KEY_ORG, KEY_EMAIL,比如我的
export KEY_COUNTRY=CN
export KEY_PROVINCE=Beijing
export KEY_CITY=Beijing
export KEY_ORG=abc
export KEY_EMAIL=abc@123.com
然后保存
. ./vars //注意两个点中间有空格
./clean-all
./build-ca
build-ca 命令使用openssl 命令生成certificate authority (CA) certificate 和密钥:
./build-ca
Generating a 1024 bit RSA private key
....++++++
.......++++++
writing new private key to 'ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [CN]:
State or Province Name (full name) [Beijing]:
Locality Name (eg, city) [Beijing]:
Organization Name (eg, company) [BUAA]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:zhang //这里随便输入即可
    Email Address [zhangwenhao@wanmei.com]:
    这些步骤一直按回车就可以了
    2、为*** server生成证书与密匙
./build-key-server server
Common Name 处填server,其他默认,为上面编辑vars 文件时设置的值。"Sign the certificate?
[y/n]" 和"1 out of 1 certificate requests certified, commit? [y/n]"两处选y。
    3、为*** clients 生成证书与密匙
./build-key client1
./build-key client2
./build-key client3
Common Name 处分别填client1 client2 client3,别的同*** server 设置
    4、生成diffie hellman 参数
./build-dh
现 在生成了所需的文件。目录keys 下生成的文件中,ca.crt 是所有*** 机器都需要的。*** server 需要ca.crt ca.key dh1024.pem server.crt server.key,拷贝到*** server 的/etc/open***目录。*** client1 需要ca.crt ca.key lient1.crt client1.key,拷贝到*** client1 的/etc/open*** 目录。client2,client3 和client1 同,只是client1.crt 和client1.key 分别用client2 和client3 的对应文件。*** client2 和*** client3 也把对应的密钥文件拷贝到各自的/etc/open*** 目录。
五、配置server端与client端
    1、server.conf 使用代码包目录sample-config-files 里的server.conf 修改即可。配置文件如下()
#################################################
;local a.b.c.d 绑定的IP 地址,可以不填
port 1194 绑定的端口
proto tdp 选择udp 协议,也可用tcp
# "dev tun" will create a routed IP tunnel,
# "dev tap" will create an ethernet tunnel.
;dev tap
#使用tun 设备,路由IP 通道。FreeBSD 默认支持TUN/TAP 驱动。
dev tun
#下面4 处填上面为*** server 生成的证书和密钥
ca /etc/open***/ca.crt (如果启动的时候带了cd路径,则这里不需要绝对路径)
cert /etc/open***/server.crt
key /etc/open***/server.key  # This file should be kept secret
dh /etc/open***/dh1024.pem
#配置*** 虚拟网段,会在*** server 建立一条10.0.0.1 >10.0.0.2 的点对点虚拟链路。
server 10.8.0.0 255.255.255.0
#记录client 对应得虚拟地址,默认600 秒更新一次
ifconfig-pool-persist ipp.txt
#等价于ping 10 和ping-restart 120,对于*** 机器有可能断开外网联线或者重起的,
#或者*** client 先于*** server 运行的情况下很重要。Client 会重新连接。
keepalive 10 120
#开启压缩支持。如果编译的时候没有使用LZO 库则注释本行
#comp-lzo
#初始化完成后改变Open××× 进程的用户ID 为nobody
user nobody
#同上,改变进程的组ID 为nobody。如果是Windows 系统,注释掉这两行
group nobody
persist-key
persist-tun
#默认每分钟更新状态文件,可以看到client 的真实IP 虚拟IP 等信息。
status open***-status.log
verb 3
    2、client端
client1.conf 使用源代码包目录sample-config-files 里的client.conf 修改即可
client
dev tun
proto tcp #和server.conf 一致即可
remote 172.16.6.79 1194 #指定*** server 的IP 地址和端口
resolv-retry infinite #如果解析*** server 失败则无限次重试
nobind
user nobody
group nobody
persist-key
persist-tun
ca ca.crt
cert client1.crt #这2 行填给client1 生成的密钥文件。client2 client3 相应更改。
key client1.key
#comp-lzo
keepalive 10 120
如果有其他的客户端需要连过来  也采取同样的配置
    3、分配client端的联入地址
给server.confi添加如下行:
client-config-dir ccd
并 在*** server 的/etc/open*** 目录建立ccd 子目录,并在ccd 目录下建立文件client1,client2,client3(这里的文件名对应”为*** clients 产生证书和密钥”步骤里的Common Name),当对应得client 连接时,*** server 会读去对应文件里的配置信息。文件client1 里输入:
ifconfig-push 10.8.0.5 10.8.0.6,即给*** client1 指定10.8.0.5,对端10.8.0.6 的虚拟链路。
如果有其他的客户端也同样处理,如
client2 内容:ifconfig-push 10.8.0.9 10.8.0.10
client3 内容:ifconfig-push 10.8.0.13 10.8.0.14
分别拷贝server.conf,client1.conf,client2.conf,client3.conf 到*** server 和对应的client。
    4、启动***
分别在各个*** 计算机启动*** server 和*** client
启动server的时候用 守护进程启动
./open*** –daemon –config /etc/open***/server.conf
启动client的时候 用client的配置文件
./open*** –daemon –config /etc/open***/client.conf
查看端口1194端口是否起来,如果两个都起来则查看ifconfig 看***网卡是否起来
到这一步,××× 客户端和服务端可以相互通讯了。10.8.0.1 应该可以ping 通10.8.0.5,10.8.0.9,10.8.0.13。10.8.0.5,10.8.0.9,10.8.0.13 也可以ping 通10.8.0.1
但是此时还仅仅是*** 客户端与服务器可以通,但此时,***的客户端还不能访问服务器端同网段内机器
    5、 *** client 访问*** server 所在172.16.6.0/24 网段内计算机
第一种方法,添加如下行到server.conf
push "route 172.16.6.0 255.255.255.0"
push 选项是把选项内容给连接的*** 客户端执行,也就是在*** 客户端执行“route 172.16.6.0 255.255.255.0”,即当client 连接时,添加路由到client 的路由表里。对于*** client1,该选项相当于在*** client1 的路由表里添加到网络172.16.6.0/24,下一跳为10.8.0.6的路由,这里10.8.0.6 为给*** client1 分配的虚拟IP 对的服务器端IP,相当于路由到*** server。
第二种方法,如果不改变 server.conf,在*** client1 里route add –net 172.16.6.0 10.8.0.6 255.255.255.0 效果一样,也可route add –net 172.16.6.0 10.8.0.1 255.255.255.0 直接路由到*** server 的本端IP 也可,但这样需要在所有的*** 客户端改变路由表。
这样在*** 客户端可以ping 通172.16.6.0/24 网段内部计算机了。到此,***客户端可以访问服务端同网段的服务器了。
    6、总结
在*** server 的/etc/rc.local 文件添加如下行:
/usr/local/open***/open*** –daemon --config /etc/open***/server.conf --cd /etc/open***/
在*** client1 的/etc/rc.local 文件添加如下行:
/usr/local/open***/open*** –daemon --config /etc/open***/client1.conf --cd /etc/open***/
这样完成了所有的配置。下面总结如下:
*** server 的目录/etc/open*** 下有文件ca.crt,ca.key,dh1024.pem,server.crt,server.key和server.conf 以及子目录ccd。/etc/open***/ccd 目录下有文件client1,client2 和client3。
/etc/open***/server.conf 内容如下:
;local a.b.c.d
port 1194
proto tcp
dev tun
ca ca.crt
cert server.crt
key server.key # This file should be kept secret
dh dh1024.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status open***-status.log
verb 3
client-config-dir ccd
#使*** clients 能访问*** server 内部网段计算机
push "route 172.16.6.0 255.255.255.0"
#route 172.31.13.0 255.255.255.0 #使*** server 能访问中文网计算机
/etc/open***/ccd/client1 内容如下:
ifconfig-push 10.8.0.5 10.8.0.6
iroute 172.31.13.0 255.255.255.0
*** client1 的目录/etc/open*** 下有文件ca.crt,ca.key client1.crt,client1.key 和client1.conf。
/etc/open***/client1.conf 内容如下:
##############################################
# Sample client-side Open××× 2.0 config file #
# for connecting to multi-client server. #
##############################################
client
dev tun
proto udp
remote 172.16.6.79 1194
resolv-retry infinite
nobind
user nobody
group nobody
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
comp-lzo
verb 3
keepalive 10 120


本文的引用网址:
http://www.vfocus.net/blog/mt-tb.cgi/345