Open×××是不同于PPTP、L2TP的另一种×××软件包,基于SSL的×××。Open×××使用需要客户端支持。这里系统为CentOS6.2。

一、检查Open×××所需环境
Open×××需要TUN设备支持,还需要iptables的nat模块支持。
1、检查TUN模块:modinfo tun
显示如下:
Centos安装openvpn_客户端
如果报错则不支持TUN设备。

2、在OpenVZ虚拟化的VPS上,需要管理员在母鸡上打开TUN/TAP设备。
cat /dev/net/tun
如果返回:cat: /dev/net/tun: File descriptor in bad state

VPS的TUN/TAP已经可以使用。

如果返回:cat: /dev/net/tun: No such device

或者其它,说明TUN/TAP设备没有被正确配置,需要与客服沟通开通TUN/TAP。

 

3、检查OpenVZ的VPS上iptables是否支持:
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o venet0 -j MASQUERADE

二、编译安装Open×××
1、安装LZO
LZO是一种数据压缩算法。
cd /tmp
wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.06.tar.gz
tar -zxvf lzo-2.06.tar.gz
cd lzo-2.06
./configure
make
make install

2、安装Open×××
cd /tmp
wget http://swupdate.openvpn.org/community/releases/openvpn-2.2.2.tar.gz
tar -zxvf openvpn-2.2.2.tar.gz
cd openvpn-2.2.2
./configure
此时提示:

configure: error: OpenSSL Crypto headers not found.

原来是openssl的开发包没有安装:yum install openssl-devel
继续安装:
./configure
make
make install
mkdir /etc/openvpn
cp -R /tmp/openvpn-2.2.2/easy-rsa/ /etc/openvpn/ #复制生成证书的脚本

三、生成密钥和证书
1、初始化PIK
cd /etc/openvpn/easy-rsa/2.0/
vim vars
设置最后的证书字段值:

export KEY_COUNTRY="CN"
export KEY_PROVINCE="SH"
export KEY_CITY="shanghai"
export KEY_ORG="xxxx"
export KEY_EMAIL="xxx@xxx.com"
export KEY_EMAIL=xxx@xxx.com
export KEY_CN=tom
export KEY_NAME=tom
export KEY_OU=tom
export PKCS11_MODULE_PATH=tom
export PKCS11_PIN=1234

使vars设置生效:source ./vars

报错:

No /etc/openvpn/easy-rsa/2.0/openssl.cnf file could be found
Further invocations will fail

将/etc/openvpn/easy-rsa/2.0目录下的openssl-1.0.0.cnf改名为openssl.cnf可解决:

cp openssl-1.0.0.cnf openssl-1.0.0.cnf.bak
mv openssl-1.0.0.cnf openssl.cnf

继续运行脚本设置变量,并清理:

source ./vars
./clean-all

建立私钥:
./build-ca

Centos安装openvpn_客户端_02
build-ca脚本用于生成一个1024位的RSA私钥,由于前面已经设置过vars文件,直接按回车。

2、建立server key

./build-key-server server

Centos安装openvpn_管理员_03
前面几个按回车,中间有extra属性要填,最后按两个y。

3、建立client key

./build-key client1

Centos安装openvpn_软件包_04
和建立server key基本相同,生成的每个客户端证书名字要不同。一份客户端证书对应一个客户端。

4、生成Diffie Hellman参数

./build-dh

5、将keys下的所有文件下载到本地
可以用winscp等工具。

6、创建服务端配置文件
将源代码解压后目录下的规范配置文件复制过来。

mkdir /etc/openvpn/easy-rsa/2.0/conf/
cp /tmp/openvpn-2.2.2/sample-config-files/server.conf /etc/openvpn/easy-rsa/2.0/conf/

编辑配置文件:

vim /etc/openvpn/easy-rsa/2.0/conf/server.conf

找到:

ca ca.crt
cert server.crt
key server.key
dh dh1024.pem

修改为:

ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt
cert /etc/openvpn/easy-rsa/2.0/keys/server.crt
key /etc/openvpn/easy-rsa/2.0/keys/server.key
dh /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem

并将以下几句前的分号去掉:

push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
client-to-client
user nobody
group nobody

7、设置IP包转发

vim /etc/sysctl.conf

将“net.ipv4.ip_forward”的值改为1。

使sysctl.conf配置生效:

sysctl -p

8、添加iptables转发

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
/etc/init.d/iptables save
/etc/init.d/iptables restart

PS:如果iptables save报错

iptables: Saving firewall rules to /etc/sysconfig/iptables: /etc/init.d/iptables: line 268: restorecon: command not found

要安装一个软件包:

yum install policycoreutils

9、设置Open×××开机自启动

echo "/usr/local/sbin/openvpn --config /etc/openvpn/easy-rsa/2.0/conf/server.conf &" >> /etc/rc.local

10、启动Open×××

/usr/local/sbin/openvpn --config /etc/openvpn/easy-rsa/2.0/conf/server.conf

四、安装Windows客户端Open××× GUI For Windows
1、下载客户端软件并安装
http://openvpn.se/files/install_packages/openvpn-2.0.9-gui-1.0.3-install.exe

2、配置客户端
将下载下来的keys文件夹内的:
ca.crt
ca.key
client1.crt
client1.csr
client1.key
复制到客户端安装路径config文件夹下。
例如:
C:\Program Files\Open×××\config

将安装路径sample-config文件夹下的client.ovpn也复制到config文件夹内。

打开client.ovpn,找到:

remote my-server-1 1194

将my-server-1修改为Open×××服务端的ip地址。

找到:

cert client.crt
key client.key

修改为客户端证书的名字。

cert client1.crt
key client1.key

在最后加上:

redirect-gateway def1

使客户端把Open×××服务器IP设为默认网关。

双击client.ovpn即可启动openvpn,或者通过Open××× GUI的控制启动×××。

随后到ip查询的网站上查看自己的ip是否为Open×××服务器ip。

备注:
客户端连接时报错:

There are no TAP-Win32 adapters on this system. You should be able to create a TAP-Win32 adapter by going to Start -> All Programs -> Open××× -> Add a new TAP-Win32 virtual ethernet adapter.

需要安装TAP-Win32 virtual ethernet adapter。

 

在实际的生产环境中,公司的环境是内网的一台服务器前面有一个ASA防火墙,公网的IP放在防火墙上,通过防火墙将数据转出进行上网。具体的配置参考如下:

Vpn的防火墙映射:

access-list Out_In extended permit udp any host 公网IP eq 11194

static (inside,outside) udp interface 11194 10.10.10.1 11194 netmask 255.255.255.255

 

 

vpnserver 防火墙规则

 

iptables -I INPUT -p UDP -i em1 --dport 11194 -j ACCEPT

iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o em1 -j SNAT --to-source 10.10.10.1

 

Vpnserver.config

local 10.10.10.1

port 11194

proto udp

dev tun

ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt

cert /etc/openvpn/easy-rsa/2.0/keys/server.crt

key /etc/openvpn/easy-rsa/2.0/keys/server.key

dh /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem

server 10.8.0.0 255.255.255.0

ifconfig-pool-persist ipp.txt

push "redirect-gateway def1 bypass-dhcp"

push "dhcp-option DNS 202.106.0.20"

push "dhcp-option DNS 202.106.196.115"

client-to-client

keepalive 10 120

comp-lzo

persist-key

persist-tun

status /etc/openvpn/openvpn-status.log

log-append  openvpn.log

verb 3

 

Client.conf

client

dev tun

proto udp

remote 公网IP 11194

resolv-retry infinite

nobind

persist-key

persist-tun

ca /root/ca.crt

cert /root/client1.crt

key /root/client1.key

ns-cert-type server

comp-lzo

verb 3

redirect-gateway def1

 

参考资料:

http://www.jianshu.com/p/0ed2a7e8258d

http://blog.csdn.net/fengyu09/article/details/7469940

http://www.centoscn.com/p_w_picpath-text/install/2013/0924/1681.html