open***搭建详解
一.open***搭建安装
apt-get install open***安装
初始化和创建证书
1. 将examples复制到oepn***的配置文件目录,方便使用。
# cp -r /usr/share/doc/open***/examples /etc/open***

2. 将vars里的KEY_COUNTRY, KEY_PROVINCE, KEY_CITY, KEY_ORG及KEY_EMAIL参数改成自己的值。
# cd /etc/open***/examples/easy-rsa/2.0/
# vi ./vars

3.接下来设定服务器端:将vars的参数load到环境中,并将旧的key或设定清除,建立root certificate。
# . ./vars
# ./clean-all
# ./build-ca
注意./vars前面还有个“.”,且中间有个空格。完成后会在keys/下生成ca.crt和ca.key。

4. 建立服务器的证书。
# ./build-key-server server
server是指服务器的名字,完成后生成server.crt、server.csr和server.key。

5. 建立客户端的证书。
# ./build-key client
因为Windows客户端默认不支持密码,故建立的是无密码key。client指客户端的名字,完成后生成client.crt、client.csr和client.key。

6. 建立 Diffie Hellman parameters。
# ./build-dh
会生成dh{n}.pem。
今后若要添加客户端,则需重复. ./vars及5、6两步。
服务器端的/etc/open***目录下需要ca.crt/key、server.crt/key和dh{n}.pem(这几个文件直接放在/etc/open***下则后面的配置文件中不需要写路径),ca.crt、client.crt/key需要分发给客户端。

服务器端配置

服务器端还需要server.conf,可以在examples/sample-config-files/server.conf基础上修改




#服务器端ip
local *.*.*.*
#服务器端口
port 1194
#服务器协议,可以用tcp
proto udp
dev tun
#各类证书,如果不在server.conf相同文件夹要写绝对路径
ca /etc/open***/2.0/keys/ca.crt
cert /etc/open***/2.0/keys/server.crt
key /etc/open***/2.0/keys/server.key  # This file should be kept secret
dh /etc/open***/2.0/keys/dh1024.pem
#分配给clinet的ip段
server 10.8.0.0 255.255.255.0
#这个开启后同一个客户端可以同时连接多次
#duplicate-cn
#开启这个后各个客户端可以互相访问,类似网上邻居
#client-to-client
#记录客户端分配的ip地址情况,如果Open×××服务重启,
#客户端重新连接的时候会按照此文件分配原先的地址。
ifconfig-pool-persist ipp.txt 
#每10秒ping一次,120秒内客户端没有动作就断开连接
keepalive 10 120
comp-lzo
;max-clients 100
;user nobody
;group nobody
persist-key
persist-tun
status /etc/open***/2.0/keys/open***-status.log
verb 4
;mute 20
#参见下面注销证书
crl-verify crl.pem
 
#客户端的Internet访问使用Open×××通道 
push "redirect-gateway def1" 
#Windows客户端会使用此DNS地址
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
push "route 10.8.0.0 255.255.255.0"






客户端配置

客户端还需要client.conf,可由examples/sample-config-files/client.conf修改而来。windows下后缀为o***。

部分解释如下

client
dev tun
#通信协议,需要与服务器端一致
proto udp
#填写服务器端ip和端口
remote *.*.*.* 1194
persist-key
persist-tun
#客户端的证书
ca ca.crt
cert client.crt
key client.key
 
ns-cert-type server
comp-lzo
verb 4
redirect-gateway def1




注销证书

1. 进入 Open××× 安装目录的 easy-rsa 子目录。
cd /etc/open***/2.0/

2. 执行 vars 命令
source ./vars

3. 使用 revoke-full 命令,吊销客户端证书。命令格式为:
./revoke-full client1

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

4. 确保服务端配置文件打开了 crl-verify 选项
在服务端的配置文件 /etc/open***/server.conf 中,加入这样一行:
crl-verify crl.pem

如果 server.conf 文件和 crl.pem 没有在同一目录下面,则 crl.pem 应该写绝对路径,例如:
crl-verify /etc/open***/2.0/keys/crl.pem

5. 重启 Open××× 服务器。

echo 1 > /proc/sys/net/ipv4/ip_forward

Open×××防火墙配置 

sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
sudo iptables -A INPUT -p all -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A INPUT -i tun+ -j ACCEPT
sudo iptables -A FORWARD -i tun+ -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 1194 -j ACCEPT
sudo iptables -A INPUT -s 10.8.0.0/24 -p all -j ACCEPT
sudo iptables -A FORWARD -d 10.8.0.0/24 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 465 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 110 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
二,配置文件详解
#申明本机使用的IP地址,也可以不说明
;local 192.168.24.34
#申明使用的端口,默认443
port 443
#申明使用的协议,默认使用UDP,如果使用HTTP proxy,必须使用TCP协议
;proto tcp
proto udp
#申明使用的设备可选tap和tun,tap是二层设备,支持链路层协议。
#tun是ip层的点对点协议,限制稍微多一些,建议使用tun
dev tap
;dev tun
#Open×××使用的ROOT CA,使用build-ca生成的,用于验证客户是证书是否合法
ca ca.crt
#Server使用的证书文件
cert server.crt
#Server使用的证书对应的key,注意文件的权限,防止被盗
key server.key
#CRL文件的申明,被吊销的证书链,这些证书将无法登录
crl-verify ***crl.pem
#上面提到的生成的Diffie-Hellman文件
dh dh1024.pem
#这是一条命令的合集,如果你是Open×××的老用户,就知道这条命令的来由
#这条命令等效于:
# mode server #Open×××工作在Server模式,可以支持多client同时动态接入
# tls-server #使用TLS加密传输,本端为Server,Client端为tls-client
#
# if dev tun: #如果使用tun设备,等效于以下配置
# ifconfig 10.8.0.1 10.8.0.2 #设置本地tun设备的地址
# ifconfig-pool 10.8.0.4 10.8.0.251 #说明Open×××使用的地址池(用于分配给客户),分别是起始地址、结束地址
# route 10.8.0.0 255.255.255.0 #增加一条静态路由,省略下一跳地址,下一跳为对端地址,这里是: 10.8.0.2
# if client-to-client: #如果使用client-to-client这个选项
# push ”route 10.8.0.0 255.255.255.0″ #把这条路由发送给客户端,客户连接成功后自动加入路由表,省略了下一跳地址: 10.8.0.1
# else
# push ”route 10.8.0.1″ #否则发送本条路由,这是一个主机路由,省略了子网掩码和下一跳地址,分别为: 255.255.255.255 10.8.0.1
#
# if dev tap: #如果使用tap设备,则等效于以下命令
# ifconfig 10.8.0.1 255.255.255.0 #配置tap设备的地址
# ifconfig-pool 10.8.0.2 10.8.0.254 255.255.255.0 #客户端使用的地址池,分别是起始地址、结束地址、子网掩码
# push ”route-gateway 10.8.0.1″ #把环境变量route-gateway传递给客户机
#
server 10.8.0.0 255.255.255.0 #等效于以上命令
#用于记录某个Client获得的IP地址,类似于dhcpd.lease文件,
#防止open***重新启动后“忘记”Client曾经使用过的IP地址
ifconfig-pool-persist ipp.txt
#Bridge状态下类似DHCPD的配置,为客户分配地址,由于这里工作在路由模式,所以不使用
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100
#通过××× Server往Client push路由,client通过pull指令获得Server push的所有选项并应用
;push ”route 192.168.10.0 255.255.255.0″
;push ”route 192.168.20.0 255.255.255.0″
#×××启动后,在××× Server上增加的路由,×××停止后自动删除
;route 10.9.0.0 255.255.255.252
#Run script or shell command cmd to validate client
#virtual addresses or routes. 具体查看manual
;learn-address ./script
#其它的一些需要PUSH给Client的选项
#
#使Client的默认网关指向×××,让Client的所有Traffic都通过×××走
;push ”redirect-gateway”
#DHCP的一些选项,具体查看Manual
;push ”dhcp-option DNS 10.8.0.1″
;push ”dhcp-option WINS 10.8.0.1″
#如果可以让××× Client之间相互访问直接通过open***程序转发,
#不用发送到tun或者tap设备后重新转发,优化Client to Client的访问效率
client-to-client
#如果Client使用的CA的Common Name有重复了,或者说客户都使用相同的CA
#和keys连接×××,一定要打开这个选项,否则只允许一个人连接×××
;duplicate-cn
#NAT后面使用×××,如果×××长时间不通信,NAT Session可能会失效,
#导致×××连接丢失,为防止之类事情的发生,keepalive提供一个类似于ping的机制,
#下面表示每10秒通过×××的Control通道ping对方,如果连续120秒无法ping通,
#认为连接丢失,并重新启动×××,重新连接
#(对于mode server模式下的open***不会重新连接)。
keepalive 10 120
#上面提到的HMAC防火墙,防止DOS***,对于所有的控制信息,都使用HMAC signature,
#没有HMAC signature的控制信息不予处理,注意server端后面的数字肯定使用0,client使用1
tls-auth ta.key 0 # This file is secret
#对数据进行压缩,注意Server和Client一致
comp-lzo
#定义最大连接数
;max-clients 100
#定义运行open***的用户
user nobody
group nobody
#通过keepalive检测超时后,重新启动×××,不重新读取keys,保留第一次使用的keys
persist-key
#通过keepalive检测超时后,重新启动×××,一直保持tun或者tap设备是linkup的,
#否则网络连接会先linkdown然后linkup
persist-tun
#定期把open***的一些状态信息写到文件中,以便自己写程序计费或者进行其它操作
status open***-status.log
#记录日志,每次重新启动open***后删除原有的log信息
log /var/log/open***.log
#和log一致,每次重新启动open***后保留原有的log信息,新信息追加到文件最后
;log-append open***.log
#相当于debug level,具体查看manual
verb 3
三。具体环境服务端配置

 server.conf ____________________________________________________________________________________________________
  1 port 161
  2 proto udp
  3 dev tun
  4 ca ca.crt
  5 cert server.crt
  6 key server.key
  7 dh dh2048.pem
  8 server 172.16.0.0 255.255.255.0
  9 push "redirect-gateway"
 10 push "dhcp-option DNS 10.0.1.222"
 11 push "dhcp-option DNS 8.8.8.8"
 12 duplicate-cn
 13 keepalive 10 120
 14 tls-auth ta.key 0
 15 cipher AES-256-CBC
 16 comp-lzo
 17 max-clients 100
 18 user nobody
 19 group nogroup
 20 persist-key
 21 persist-tun
 22 status /var/log/open***-status.log
 23 log /var/log/open***.log
 24 #log-append /var/log/open***.log
 25 verb 3
 26 mute 10
客户端配置client
dev tun
proto udp
remote 103.246.244.174 161
cipher AES-256-CBC
resolv-retry infinite
nobind
persist-key
persist-tun
ca key/ca.crt
cert key/client.crt
key key/client.key
tls-auth key/ta.key 1
reneg-sec 0
tran-window 84600
comp-lzo
verb